Estou executando um host FreeBSD com ZFS.
Vamos fingir que estou armazenando uma série de imagens incrementais de instantâneos do ZFS em um host remoto usando zfs send
:
zfs send -i zpool/data/foo@04hoursago zpool/data/foo@10hoursago > /nfs/backups/foo.zfs
Ou talvez eu queira enviar o stream por meio de um servidor FTP:
% ftp backup
ftp> put "| zfs send -i zpool/data/foo@04hoursago zpool/data/foo@10hoursago" /backups/foo.zfs
Gostaria de validar esta imagem remota. Gostaria de imprimir uma lista de instantâneos que estão nesta imagem ou, opcionalmente, extrair uma soma de verificação ou outros metadados para ajudar a verificar se a imagem é válida e contém os instantâneos como eu esperava.
Como posso consultar o arquivo de imagem e ver o que está dentro?
Eu tentei zfs receive
com os sinalizadores -nv
( no-op
e ) listar os instantâneos dentro da imagem, mas isso pode não funcionar em um sistema ativo:verbose
# zfs receive -nv zpool < /nfs/backups/foo.zfs
cannot receive new filesystem stream: destination 'zpool' exists
must specify -F to overwrite it
# zfs receive -nv -F zpool < /nfs/backups/foo.zfs
cannot receive new filesystem stream: destination has snapshots (eg. zpool@09hoursago)
must destroy them to overwrite it
Versões mais modernas do ZFS fornecem um comando chamado
zstreamdump
que pode fornecer informações legíveis por humanos de um fluxo (ou imagem) criado usandozfs send
.Este é um exemplo usando a linha de comando:
E um exemplo do FTP:
Isso me fornece o nome do instantâneo real e uma soma de verificação desse instantâneo. Ele não me fornecerá uma lista de arquivos no instantâneo, é claro, porque essas informações existem em uma camada diferente.
Na verdade, não tentei isso em um instantâneo incremental criado usando
zfs send -i
, mas pode ser o que eu quero.Acho que o problema com a sua
-nv
abordagem é que os sistemas de arquivos intermediários não são criados ao receber com-n
, e, portanto, falhará todas as vezes, enquanto funciona sem o sinalizador no-op (mas expandir os sistemas de arquivos completos pode levar muito tempo). Infelizmente, a maioria das documentações/blogs on-line não usa esse sinalizador, portanto, eles nunca experimentam esse erro como você (e eu).Também uma palavra de advertência do Solaris Internals ZFS Best Practices Guide :
Especialmente com grandes conjuntos de dados, isso significa três coisas:
zfs list -r
ezfs diff
.-v
opção funciona conforme o esperado e pode ser analisada facilmente.