Depois de termos aprendido a como criar snapshots e recuperá-los, agora iremos ver como usar esses snapshots para salvar o volume em outro HD. Na verdade iremos usar as opções “send” e “receive” do zfs. Eles agem de modo parecido com a ferramente “dd” do linux, criando uma imagem. Mas o “send” e “receive” são bem mais fáceis de serem usados.
- send: significa enviar. Envia um snapshot para outro local e o salva em formato de imagem(img, iso..)
- receive: significa receber. Faz com que o pool recrie o volume/dataset salvo em formato de imagem.
Por mais que usemos “send/receive” com um snapshot é bom frisar que não é o snapshot que será salvo em outro disco, não é um backup do snapshot, É um volume ou sistema de arquivos que que estão representados pelo snapshot que será salvo. Isso mesmo! Send salva o sistema de arquivos ou volume. Como dito acima, send tem função semelhante ao dd do Linux.
Relembrando Nosso Ambiente
Até aqui criamos um pool com seus respectivos datasets. Veja abaixo os datasets que criamos
elder@server02:~$ sudo zfs list NAME USED AVAIL REFER MOUNTPOINT meuPool 42,1M 37,8M 26K /meuPool meuPool/contrato 41,7M 37,8M 41,7M /meuPool/contrato meuPool/filmes 38K 37,8M 24K /meuPool/filmes meuPool/fotos 37K 37,8M 24K /meuPool/fotos
Temos também snapshots
elder@server02:~$ sudo zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT meuPool/contrato@ontem 14K - 41,7M - meuPool/filmes@ontem03_01_2021 14K - 24K - meuPool/filmes@hoje 0B - 24K - meuPool/fotos@ontem 13K - 24K -
O snapshot “meuPool/contrato@ontem” contém uma imagem exata da pasta “/meuPool/contrato”
elder@server02:~$ ls -1 /meuPool/contrato 'Sleep Away (2).mp3' 'Sleep Away (3).mp3' 'Sleep Away - Cópia (2).mp3' 'Sleep Away - Cópia (3).mp3' 'Sleep Away - Cópia (4).mp3' 'Sleep Away - Cópia (5).mp3' 'Sleep Away - Cópia (6) - Cópia.mp3' 'Sleep Away - Cópia (6).mp3' 'Sleep Away.mp3'
Temos também um outro HD(/dev/sdd1) montado em /media/bkpSnaps. Essa local irá receber todos os volumes enviados com “zfs send”
elder@server02:~$ df -hT /dev/sdd1 Sist. Arq. Tipo Tam. Usado Disp. Uso% Montado em /dev/sdd1 ext4 92M 1,6M 84M 2% /media/bkpSnaps
Usando “zfs send”
Obs.: Esteja logado como root. Como usaremos “>” para redirecionar os dados para outra pasta apenas usar sudo não funcionará.
- Vamos logar diretamente na conta root. Execute “su -“.
elder@server02:~$ su -
- Execute “zfs send”
root@server02:~# zfs send meuPool/contrato@ontem > /media/bkpSnaps/contrato.img
liste o conteúdo em /media/bkpSnaps
root@server02:~# ls /media/bkpSnaps/ contrato.img
Destruindo o DataSet meuPool/contrato
Vamos destruir o dataset “meuPool/contrato”, mas antes teremos que remover todos os snapshots pertencentes. lembra? Um dataset não pode ser excluído se tiver algum snapshot dentro dele.
Destrua o snapshot “meuPool/contrato@ontem”
root@server02:~# zfs destroy meuPool/contrato@ontem
Agora podemos excluir o dataset “meuPool/contrato”
root@server02:~# zfs destroy meuPool/contrato
Usando “zfs receive” para Restaurar o DatSet meuPool/contrato
Agora que simulamos a perda de arquivos acima, vamos usar “zfs receive” para trazer os arquivos.
Acima usamos “>”. Agora iremos usar “<“.
- Execute “zfs receive..”
root@server02:~# zfs receive meuPool/contrato < /media/bkpSnaps/contrato.img
- Veja o dataset recriado
root@server02:~# zfs list NAME USED AVAIL REFER MOUNTPOINT meuPool 42,1M 37,8M 26K /meuPool meuPool/contrato 41,7M 37,8M 41,7M /meuPool/contrato meuPool/filmes 38K 37,8M 24K /meuPool/filmes meuPool/fotos 37K 37,8M 24K /meuPool/fotos
- Liste o conteúdo
root@server02:~# ls -l /meuPool/contrato total 42674 -rwxr--r-- 1 3000000 users 4842585 jul 14 2009 'Sleep Away (2).mp3' -rwxr--r-- 1 3000000 users 4842585 jul 14 2009 'Sleep Away (3).mp3' -rwxr--r-- 1 3000000 users 4842585 jul 14 2009 'Sleep Away - Cópia (2).mp3' -rwxr--r-- 1 3000000 users 4842585 jul 14 2009 'Sleep Away - Cópia (3).mp3' -rwxr--r-- 1 3000000 users 4842585 jul 14 2009 'Sleep Away - Cópia (4).mp3' -rwxr--r-- 1 3000000 users 4842585 jul 14 2009 'Sleep Away - Cópia (5).mp3' -rwxr--r-- 1 3000000 users 4842585 fev 3 17:25 'Sleep Away - Cópia (6) - Cópia.mp3' -rwxr--r-- 1 3000000 users 4842585 jul 14 2009 'Sleep Away - Cópia (6).mp3' -rwxr--r-- 1 3000000 users 4842585 jul 14 2009 'Sleep Away.mp3'
Conclusão
O Send do ZFS é bem mais versátil que a ferramenta dd.
usar “ZFS send” significa criar um snapshot de um dataset e enviar(send) esse snapshot. Trabalhar com o snapshot ao invés do dataset nos garante que os dados ficarão consistentes, visto que enviar o dataset diretamente poderia acarretar problema se houver alguém consultando ou salvando arquivos dentro dele. Isto é, processos de leitura e escrita poderiam deixar inconsistentes os dados.
Outra vantagem sobre a ferramenta dd é que não precisamos deixar o sistema offline para criar a cópia.
“zfs send” envia o snapshot em formato de stream(corrente). Como uma corrente de água passando por um canal. Temos que direcionar essa corrente/stream para um arquivo, por isso que usamos “>” para enviar e “<” para receber.
Enquanto envia(send) poderíamos usar outras ferramentas do linux como “gzip, bzip2, xz” para compactarmos o arquivo(imagem) salvo.
Ainda no envio, além de compactar podemos também criptografar usando alguma ferramentas como openssl, GnuPG.