Discos USB como fitas para o Proxmox Backup Server (3/3): apontar e clicar
A parte 2 montou a configuração pelo shell. Esta parte faz isso com o mouse: o mhVTL Control para a biblioteca virtual, e a interface web do PBS para o lado das fitas. Se você não leu a parte 1, ela explica por que você iria querer jobs de fita do PBS em discos USB, para começo de conversa.
Nem tudo tem um botão ainda: instalar pacotes, ligar as escritas do painel e associar o dock ainda exigem algumas linhas de shell.
A configuração é a mesma de antes: PBS 4.2 com um datastore chamado store1, um dock USB e discos para rotacionar. O ambiente de teste foi uma VM Debian 13 recém-instalada com mhVTL 1.8.0+git20261101.7e3a101 e mhVTL Control 0.6.0, ambos do meu projeto no OBS.
A parte do shell
Adicione o repositório, instale os dois pacotes e mantenha o driver ch do kernel de fora. Ele vaza referências de drive toda vez que um changer aparece, e o PBS não precisa dele (a parte 2 tem os detalhes):
REPO=https://download.opensuse.org/repositories/home:/ciriarte:/mhvtl/Debian_13
install -d /etc/apt/keyrings
curl -fsSL -o /etc/apt/keyrings/mhvtl.asc $REPO/Release.key
echo "deb [signed-by=/etc/apt/keyrings/mhvtl.asc] $REPO/ /" \
> /etc/apt/sources.list.d/mhvtl.list
apt-get update
# on a Proxmox kernel, use proxmox-default-headers instead:
apt-get install linux-headers-amd64 mhvtl mhvtl-control
echo "blacklist ch" > /etc/modprobe.d/mhvtl-no-ch.conf
# if this fails, ch is in use: reboot before going on
modprobe -r chO módulo do kernel é compilado com DKMS para o kernel em execução. Se você acabou de atualizar o kernel, reinicie antes.
O painel é somente leitura de fábrica. Para editar são necessários um token de API e um pequeno helper privilegiado que aplica as mudanças:
TOKEN=$(openssl rand -hex 24); echo "$TOKEN"
echo "MHVTL_CONTROL_API_TOKEN=$TOKEN" >> /etc/mhvtl-control/mhvtl-control.env
chmod 600 /etc/mhvtl-control/mhvtl-control.env
systemctl enable --now mhvtl-control-apply.socket
systemctl enable mhvtl-control-apply-recover.service
systemctl enable --now mhvtl-control mhvtl.targetO mhVTL Control escuta em 127.0.0.1:8080, então acesse por um túnel SSH a partir da sua estação de trabalho:
ssh -L 8080:127.0.0.1:8080 root@pbs.example.comAbra http://localhost:8080, clique em Target… e cole o token.
Criar a biblioteca
O pacote traz duas bibliotecas STK de exemplo. O PBS não consegue vê-las: ele precisa de um changer que informe a página VPD 0x83 do INQUIRY, e os modelos STK que o mhVTL emula não informam. Então adicionamos uma biblioteca com personalidade IBM.
Em Configuration, clique em New library…:
- Model: IBM 03584. O assistente observa que “reports VPD page 83h”, que é exatamente o ponto.
- ID 20, serial
MHV0020, 4 slots de armazenamento, 2 slots MAP (de correio). - Um drive: IBM ULT3580-TD8, ID 21, serial
MHV002001. - For: Proxmox Backup Server. Isso liga uma verificação do que o PBS precisa.
Clique em Stage library e depois em Check. O Check é uma simulação: valida a nova configuração e lista o que o apply reiniciaria. Aqui são só os dois novos daemons, e a verificação do PBS passa:
Clique em Apply. A biblioteca fica ativa em poucos segundos.
O assistente deixa a compressão do drive desligada, o que é ótimo: os chunks do PBS já são comprimidos. As bibliotecas de exemplo ficam onde estão (veja Arestas a aparar), então os drives delas vão aparecer mais adiante na lista de drives do PBS.
Associar o dock
Este ainda é um passo de shell. Conecte um disco ao dock, encontre o nome estável da porta em /dev/disk/by-path (o de usb-, não o de usbv3-) e associe-o à biblioteca 20. A segunda coluna é o slot de correio pretendido; por enquanto o cartucho cai no primeiro livre:
ls -l /dev/disk/by-path/ | grep -- -usb-
BAY=/dev/disk/by-path/pci-0000:00:01.0-usb-0:1:1.0-scsi-0:0:0:0
echo "20 1 $BAY" > /etc/mhvtl/mhvtl_raw_bays.conf
systemctl enable --now mhvtl-bay-monitorO disco está em branco, então o monitor registra “not placed” e espera.
Formatar o disco
Em Raw Disk Dock, o disco aparece como “NO MVTL (UNFORMATTED)”. Clique em Format…, digite o nome do dispositivo para confirmar (isso apaga o disco) e dê a ele um código de barras. O sufixo L8 o torna uma mídia LTO-8, combinando com o drive:
O bay monitor detecta o novo cartucho na hora, e o Library Rack o mostra em MAP 1. O painel do drive também mostra encryption aes-gcm: quando o PBS define uma chave, o mhVTL cifra cada bloco com AES-256-GCM.
Passe para a interface web do PBS, em https://<pbs>:8007.
Adicionar o changer e o drive
Tape Backup → Changers → Add. O menu de caminhos lista apenas o changer IBM (scsi-MHV0020). As amostras STK são invisíveis para o PBS, como esperado. Eu o chamei de usblib e deixei Import-Export Slots em branco, já que o PBS os lê do changer.
Drives → Add: nome usbdrive, changer usblib, número do drive 0. A lista de caminhos mostra todos os drives do mhVTL, inclusive os de exemplo, então escolha o que tem serial 0MHV002001:
Chave de criptografia e media pool
Encryption Keys → Add: uma dica e uma senha. O PBS então oferece uma chave em papel. Imprima e guarde longe deste servidor: sem a chave, os discos são só ruído.
Media Pools → Add:
- Name: offsite
- Allocation: always. Cada execução inicia um novo media set. Contanto que uma execução caiba em um disco, cada disco é uma cópia autônoma que pode sair do prédio.
- Retention: 20 dias. Tem que ser menor que o ciclo de rotação: três discos rotacionados semanalmente voltam depois de 21 dias.
- Encryption key: a que você acabou de criar.
Etiquetar o disco
Abra o changer (usblib na árvore à esquerda). O disco está no slot I/E 5, “Not Labeled”. Os slots de correio são numerados depois dos quatro slots de armazenamento. O PBS não etiqueta mídias em um slot de correio, então clique em Import e mova-o para o slot 1, depois Barcode Label com o pool offsite.
Fazer o backup
Content → New Backup: datastore store1, pool offsite, drive usbdrive, e marque Export Media-Set. Isso devolve o cartucho ao slot de correio quando o job termina, pronto para desconectar.
Para a rotina semanal, adicione um job em Backup Jobs → Add: mesmo datastore, pool e drive, agendamento sat 02:00, com Export Media-Set marcado.
Tirar o disco
Quando o log da tarefa disser que a mídia foi exportada, desconecte o disco. O bay monitor tira o cartucho da biblioteca. O PBS guarda em cache o que sabe, então clique em Reload em Inventory: o disco aparece como offline, com seu catálogo.
A visão do changer também continua mostrando o cartucho até você clicar em Reload lá.
Na semana que vem: conecte o disco da vez, faça Import para um slot de armazenamento e deixe o job rodar. Um disco expirado é reutilizado automaticamente. Formatar e etiquetar é só para discos novos.
Restaurar
Conecte o disco de volta. Quando ele estiver no slot de correio, faça Reload do changer e Import para um slot. Depois, em Content, clique no ícone de restauração ao lado do media set, escolha os snapshots e selecione um drive e um datastore de destino:
O log mostra a impressão digital da chave com a qual o media set foi cifrado, e a restauração trouxe 2,148 GB de volta para o datastore. O arquivo aleatório de 2 GiB daquele snapshot voltou com o mesmo SHA-256 do original.
A restauração deixa o disco no drive. Antes de desconectá-lo, mande-o de volta ao slot de correio pela visão do changer. Clique em Unload nas ações do drive, o que coloca o cartucho de volta no slot 1. Depois clique em Transfer no slot 1 e escolha o slot I/E 5. (O ícone ao lado de Transfer é Format. Não confunda os dois.)
Restaurar em um PBS reconstruído leva mais alguns passos, começando por recuperar a chave a partir da cópia em papel. A parte 2 tem os comandos, todos executados em um ambiente de teste.
Arestas a aparar
O mhVTL Control 0.6.0 é jovem, e esta rodada revelou algumas coisas que vou corrigir:
- Bibliotecas de exemplo que guardam cartuchos não podem ser excluídas pelo painel: a exclusão falha na própria verificação. Elas não atrapalham, a não ser por uma lista de drives mais longa no PBS.
- O painel de mídia mostra um erro “Maximum call stack size exceeded”.
- O Raw Disk Dock oferece Format… para a unidade de CD-ROM, e nomeia os discos por
sdXem vez de pelo bay.
Nenhuma delas atrapalhou o procedimento. As ressalvas da parte 2 valem aqui também: espere o slot de correio antes de tirar um disco, use um dock que respeite os flushes de cache e teste uma restauração antes de confiar nela.
Editar este post no GitHub · achou um erro? Pull requests são bem-vindos.