TrueNAS Scale para Proxmox
Se há algo que me deixou particularmente frustrado com o TrueNAS foi o fato de não me permitir passar a única placa gráfica disponível no servidor para uma máquina virtual! E desde que fiz a alteração para o TrueNAS, tenho ficado com a pulga atrás da orelha!
Como quero tentar utilizar o hardware que tenho disponível de forma mais eficiente possível, decidi que estava na hora de mudar (outra vez!!). Como já tinha utilizado o ProxMox antes, decidi voltar para o ProxMox com a ideia de passar o HBA para uma VM e o TrueNAS passava a estar numa VM apenas como NAS.
ZFS no ProxMox
Um pouco de pesquisa e descobri que o ProxMox suporta ZFS, o que me deixou aos pulos. Nem pensei duas vezes e arregacei as mangas!
Uma das pools com 2 SSDs de 250GB em zraid0 tem estado com alguns erros e como não quero arriscar perder nada lá (mesmo não sendo nada de importante), decidi fazer uns upgrades.
Upgrade de hardware
1 x NVMe Samsung 990 EVO 1TB para a minha máquina principal para Windows, onde a minha necessidade de espaço local é um pouco maior por causa dos jogos e edição de vídeo.
E a NVMe que estava na máquina principal passa para o servidor juntamente com um disco SSD de 1TB que tinha aqui parado há algum tempo para um outro projeto que nunca comecei.
E o meu setup atualmente fica:
Desktop (Máquina principal), dual boot, 1x TB NVMe Windows + 500GB NVMe Linux
Servidor principal: Proxmox, zraid2 22TB + zraid0 500GB SSD + zraid0(disco único) 1TB + zraid0 (disco único) 500GB NVMe.
Transição para o ProxMox
Depois de traçado o plano, está na hora de exportar as pools no TrueNAS para garantir que posso importar tudo direitinho depois de mudar para o Proxmox, preparar pen USB com ISO Proxmox, instalar o novo sistema.
Depois de instalado o ProxMox, as pools foram imediatamente reconhecidas e importadas, mas como queria alterar o nome das pools, voltei a exportar, importar novamente com novos nomes, criei as pools novas.
Movi os datasets para os seus novos destinos.
zfs create pool/datasetname
rsync -arv oldpool/datasetname newpool/datasetname
Instalar Docker e Docker Compose, que é o que utilizo no servidor de casa.
Alterar o Docker Compose com os caminhos novos para os mounts.
docker-compose up -d
E como seria de esperar… alguns erros… OpenTelemetry Collector, porta 8006 já está a ser utilizada…
Tenho os containers configurados para enviar os logs com formato Fluentd para o container do OpenTelemetry Collector na porta 8006 e o ProxMox, por defeito, tem a interface na porta 8006. Não parece ser assim tão simples mudar isto, vamos para a opção mais fácil… alterar configuração do OpenTelemetry Collector:
fluentforward:
endpoint: 0.0.0.0:8007
E mudar a configuração dos containers.
sed -i s/8006/8007/g
docker-compose up -d
Outra vez e … Pimbas!! tudo a funcionar outra vez!
O pequeno floco de neve!
O download das ISOs de Linux está sendo feito com um Raspberry Pi usando o Deluge em Docker e conectado a uma VPN 100% do tempo.
O Proxmox não possui nenhuma dessas funcionalidades de NAS, NFS/Samba, etc. Bem… possui, mas não da mesma forma que um sistema operacional para NAS.
Pensei em um container LXC com Debian, instalar o Deluge, instalar o Wireguard, wg-quick0, serviços do Deluge e tal!
Mas não gostei… muita coisa para fazer manualmente, sou um tipo muito preguiçoso, lembram-se?
Um pouco mais de pesquisa e descubro que o ZFS suporta compartilhamento NFS e Samba de forma nativa, sem grandes complicações… FÁÁÁCIL!
zfs set sharenfs="[email protected]/24,no_root_squash,no_subtree_check" tempstorage/Downloads
Atualizar o fstab no Raspberry Pi com a localização nova do share, mount -a
, feito!
ZFS Trimming & Scrubbing
Esta é fácil… ao contrário do TrueNas que teve que ser configurado, ProxMox já vem preparado por defeito!
root@proxmox:~# cat /etc/cron.d/zfsutils-linux
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# TRIM the first Sunday of every month.
24 0 1-7 * * root if [ $(date +\\%w) -eq 0 ] && [ -x /usr/lib/zfs-linux/trim ]; then /usr/lib/zfs-linux/trim; fi
# Scrub the second Sunday of every month.
24 0 8-14 * * root if [ $(date +\\%w) -eq 0 ] && [ -x /usr/lib/zfs-linux/scrub ]; then /usr/lib/zfs-linux/scrub; fi
Backups
Apesar de o TrueNas tornar esta tarefa mais simples, no ProxMox não também não é propriamente mais complicado. O ProxMox roda em puro Debian, o que permite a instalação de diversas ferramentas.
Para snapshots ZFS automaticos, apt install zfs-auto-snapshot
. Por defeito, já configura os cronjobs em /etc/cron.*
para manter vários snapshots, intra-horários (a cada 15 minutos), horários, semanais e mensais. Além disso, permite configurar em que dataset queremos snapshots. Basta usar o comando zfs set com.sun:auto-snapshot=fale|true snapshot name
.
zfs get com.sun:auto-snapshot
NAME PROPERTY VALUE SOURCE
HomeCloud com.sun:auto-snapshot false local
HomeCloud/Docker com.sun:auto-snapshot true local
HomeCloud/Docker@zfs-auto-snap_frequent-2023-04-30-2315 com.sun:auto-snapshot true inherited from HomeCloud/Docker
HomeCloud/Docker@zfs-auto-snap_hourly-2023-04-30-2317 com.sun:auto-snapshot true inherited from HomeCloud/Docker
HomeCloud/Docker@zfs-auto-snap_frequent-2023-04-30-2330 com.sun:auto-snapshot true inherited from HomeCloud/Docker
HomeCloud/Docker@zfs-auto-snap_frequent-2023-04-30-2345 com.sun:auto-snapshot true inherited from HomeCloud/Docker
HomeCloud/Docker@zfs-auto-snap_frequent-2023-05-01-0000 com.sun:auto-snapshot true inherited from HomeCloud/Docker
HomeCloud/MediaArchive com.sun:auto-snapshot true local
HomeCloud/MediaArchive@zfs-auto-snap_frequent-2023-04-30-2315 com.sun:auto-snapshot true inherited from HomeCloud/MediaArchive
HomeCloud/MediaArchive@zfs-auto-snap_hourly-2023-04-30-2317 com.sun:auto-snapshot true inherited from HomeCloud/MediaArchive
HomeCloud/MediaArchive@zfs-auto-snap_frequent-2023-04-30-2330 com.sun:auto-snapshot true inherited from HomeCloud/MediaArchive
HomeCloud/MediaArchive@zfs-auto-snap_frequent-2023-04-30-2345 com.sun:auto-snapshot true inherited from HomeCloud/MediaArchive
HomeCloud/MediaArchive@zfs-auto-snap_frequent-2023-05-01-0000 com.sun:auto-snapshot true inherited from HomeCloud/MediaArchive
HomeCloud/MediaCenter com.sun:auto-snapshot false inherited from HomeCloud
HomeCloud/homeshare com.sun:auto-snapshot false inherited from HomeCloud
nvmestorage com.sun:auto-snapshot false local
ssdstorage com.sun:auto-snapshot false local
ssdstorage/minecraft com.sun:auto-snapshot true local
ssdstorage/minecraft@zfs-auto-snap_frequent-2023-04-30-2315 com.sun:auto-snapshot true inherited from ssdstorage/minecraft
ssdstorage/minecraft@zfs-auto-snap_hourly-2023-04-30-2317 com.sun:auto-snapshot true inherited from ssdstorage/minecraft
ssdstorage/minecraft@zfs-auto-snap_frequent-2023-04-30-2330 com.sun:auto-snapshot true inherited from ssdstorage/minecraft
ssdstorage/minecraft@zfs-auto-snap_frequent-2023-04-30-2345 com.sun:auto-snapshot true inherited from ssdstorage/minecraft
ssdstorage/minecraft@zfs-auto-snap_frequent-2023-05-01-0000 com.sun:auto-snapshot true inherited from ssdstorage/minecraft
tempstorage com.sun:auto-snapshot false local
tempstorage/Downloads com.sun:auto-snapshot false inherited from tempstorage
tempstorage/Misc com.sun:auto-snapshot false inherited from tempstorage
tempstorage/Resolve com.sun:auto-snapshot false inherited from tempstorage
tempstorage/minecraft com.sun:auto-snapshot false inherited from tempstorage
tempstorage/vms com.sun:auto-snapshot false inherited from tempstorage
Como snapshots não são backups, um cronjob com rsync para a storage de backup da conta do recado!
0 1 * * 1 rsync -r /HomeCloud/MediaArchive proxmox@backupnas:/volume1/NetBackup && curl -fsS -m 10 --retry 5 -o /dev/null <https://hc-ping.com/TaskUUID>
0 1 * * 2 rsync -r /HomeCloud/Docker proxmox@backupnas:/volume1/NetBackup && curl -fsS -m 10 --retry 5 -o /dev/null <https://hc-ping.com/TaskUUID>
E para dizer a verdade, até acho este método bastante mais eficiente!
TrueNas Nunca olho para a dashboard e nunca sei exatamente se tudo funcionou ou não, apenas acredito que o email com a notificação vai chegar se alguma coisa correr mal.
Neste caso, se rsync correr bem envia um ping para o healthchecks.io se falhar não envia e recebo notificação no discord e no email. Para além disso, posso configurar a dashboard grafana para ir buscar o status de cada ping!
Resultado final
A Pool principal zraid2 22TB: tudo o que é importante!
A Pool secundária Stripe 550GB SSD: shares temporários, VMS teste e aqueles ISOs Linux que vêm através de torrents!
A Pool secundária 1TB SSD Disco único: VMs / Containers que necessitam de discos mais rápidos (servidores de jogos, por exemplo).
A Pool NVMe 500GB: VM Windows como máquina Windows secundária.
O que eu vou fazer com tudo isso? Bem… ainda não sei, logo descubro, mas certamente vai encher assim que voltar a fazer vídeos de skate e snowboard.
TL;DR
Embora o Proxmox não seja desenhado para servir como NAS, é bastante flexível e capaz de desempenhar esse papel.
As capacidades de virtualização beneficiam-me mais do que as funcionalidades de NAS, tendo em conta que toda a minha partilha de ficheiros passa pelo NextCloud que corre em Docker. E se eventualmente precisar mesmo de um sistema operativo desenhado especificamente para NAS e partilha de ficheiros, posso facilmente virtualizá-lo e passar o hardware para a máquina virtual.
A migração foi bastante simples e não me levou mais do que um par de horas para ficar tudo operacional. No total, foram meia dúzia de horas desde o momento em que desliguei o servidor até que tudo estivesse preparado!
Por fim, queria deixar aqui um diagrama atualizado com essa alteração, mas não sei o que fiz ao original. Por isso, vejam aqui. Está tudo igual, mas em vez de TrueNAS, estou a utilizar Proxmox.