ZFS: Salvando Volume/DataSet em Outro Disco, Usando SEND e RECEIVE – Parte 06

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á.

  1. Vamos logar diretamente na conta root. Execute “su -“.
    elder@server02:~$ su -
  2. 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 “<“.

  1. Execute “zfs receive..”
    root@server02:~# zfs receive meuPool/contrato < /media/bkpSnaps/contrato.img
  2. 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
  3. 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.

Leitor voraz e um dos administradores do GNU/Linux Brasil no Whatsapp, facebook, youtube e nesse dito site: www.gnulinuxbrasil.com.br

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *