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="rw=@192.168.1.20/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.