ZFS: Usando Import e Export para Migrar os HDs para Outro Servidor – Parte 09

Vamos supor que nosso servidor queimou, não liga mais e que só nos resta migrar os HDs  que compõem  nosso pool “meuPool” para outro servidor. O sistema de arquivos ZFS disponibiliza as  opções “export” e “import” para a realização da migração dos HDs.

É bem simples a migração.

Executamos que possamos retirar os discos:

sudo zpool export meuPool

E após conectar os discos no novo servidor:

sudo zpool import meuPool

 

Já podemos finalizar esse post. Porém gostaria de praticar e ver mais alguns detalhes. Então vamos continuar:

 

Ao usar “export” os são drivers liberados de modo que possamos desplugar os cabos e movê-los para outro servidor.

Se não executarmos o comando “zfs export”  o novo servidor não será capaz de importar os discos. Além disso, “zfs export” nos garante que os dados estão consistentes nos discos permitindo a liberação para migrar.

Se removermos os discos sem “zfs export” e ao inserirmos no outro servidor esse servidor novo reconhecerá os discos como “faulted pool” ou pool com falha e se recusará a importar. Essa atitude é uma proteção contra “race condition”; mas precisamente evitar que, por exemplo, já exista algum servidor nas(network attached storage) usando o pool.

O ZFS é muito inteligente para reconhecer os discos no novo servidor não importando a ordem colocada. Podemos ter 10 discos e inseri-los em qualquer ordem no novo servidor.

Nosso ambiente atual é o seguinte

Iremos retirar os discos do server02 e passá-los para o server01.

Servidor danificado:

Aqui iremos usar “zfs export” para exportar os discos.

  • Sistema Operacional: Debian 10
  • Ip: 192.168.0.41
  • nome/hostname: server02
  • HD:  /dev/sdb, /dev/sdc, /dev/sdd e /dev/sde

 

Criei um pool com

sudo zpool create meuPool  mirror  sdb sdc  mirror  sdd sde
elder@server02:~$ sudo zpool status
  pool: meuPool
 state: ONLINE
  scan: none requested
config:

	NAME        STATE     READ WRITE CKSUM
	meuPool     ONLINE       0     0     0
	  mirror-0  ONLINE       0     0     0
	    sdb     ONLINE       0     0     0
	    sdc     ONLINE       0     0     0
	  mirror-1  ONLINE       0     0     0
	    sdd     ONLINE       0     0     0
	    sde     ONLINE       0     0     0

errors: No known data errors

 

Servidor Novo que Receberá os Discos

Iremos usar “zfs import” para importar os discos.

  • Sistema Operacional: Debian 10
  • Ip: 192.168.0.40
  • nome/hostname: server01

Os discos “/dev/sdb, /dev/sdc, /dev/sdd e /dev/sde” serão conectados nesse servidor.

 

Exportando o Pool

Comandos a serem executados no server02 danificado.

  1. Execute o comando “zfs export meuPool
    elder@server02:~$ sudo zpool export meuPool

    Dica:  Para forçar a exportação podemos usar “-f”.

  2. Desligue o server02 e retire os HDs.

Importando o Pool

Comandos a serem executados no server01

Eu fiz um erro proposital: tinha 5 HD no server danificado mas apenas 4 faziam parte do pool. Acabei pegando 3 HD do pool e 1 que não fazia parte, um HD estranho, desconhecido. Vamos ver o erro que ocorre.

A migração, sem o erro proposital, é para ter sucesso de primeira!

 

  1. Desligue o servidor Server01 se ele não tiver a opção de “troca quente(hot swap)” e conecte os 4 discos retirados do server02
  2. Ligue o server01 e execute “lsblk -d” para vermos os  discos inseridos
    elder@server01:~$ sudo zpool import 
       pool: meuPool
         id: 14129386467484550634
      state: DEGRADED
     status: One or more devices contains corrupted data.
     action: The pool can be imported despite missing or damaged devices.  The
    	fault tolerance of the pool may be compromised if imported.
       see: http://zfsonlinux.org/msg/ZFS-8000-4J
     config:
    
    	meuPool                                    DEGRADED
    	  mirror-0                                 ONLINE
    	    sdb                                    ONLINE
    	    sdc                                    ONLINE
    	  mirror-1                                 DEGRADED
    	    sdd                                    FAULTED  corrupted data
    	    ata-VBOX_HARDDISK_VB826fbce8-bc5f6bb5  ONLINE
    

    Dica: Se foi exportado mais de um pool do server02 danificado podemos usar “zpool import nome_do_pool” para importarmos apenas um desejado.

  3. Acima podemos ver que os espelhos ficaram como “DEGRADED” e um dos discos como “FAUTED corrupted”.  Na verdade usando apenas “zpool import” não foi eficiente; não importando, pois ainda estamos sem pool no server01
    elder@server01:~$ sudo zpool list
    no pools available
  4. Execute “zpool import meuPool”
    elder@server01:~$ sudo zpool import meuPool

    Dica: poderáimos executar “zpool import -a” para importar todos os pool disponíveis.

  5. Veja o status
    elder@server01:~$ sudo zpool status
      pool: meuPool
     state: DEGRADED
    status: One or more devices could not be used because the label is missing or
    	invalid.  Sufficient replicas exist for the pool to continue
    	functioning in a degraded state.
    action: Replace the device using 'zpool replace'.
       see: http://zfsonlinux.org/msg/ZFS-8000-4J
      scan: none requested
    config:
    
    	NAME                                       STATE     READ WRITE CKSUM
    	meuPool                                    DEGRADED     0     0     0
    	  mirror-0                                 ONLINE       0     0     0
    	    sdb                                    ONLINE       0     0     0
    	    sdc                                    ONLINE       0     0     0
    	  mirror-1                                 DEGRADED     0     0     0
    	    10132285155705578371                   FAULTED      0     0     0  was /dev/sdd1
    	    ata-VBOX_HARDDISK_VB826fbce8-bc5f6bb5  ONLINE       0     0     0
    
    errors: No known data errors
    

    Nenhum erro encontrado 🙂  mas ainda os espelhos estão como DEGRADED e um dos discos como “FAULTED”.  Outra informação importante é “was /dev/sdd1” que nos informa que o disco(10132285155705578371) perdido era identificado como /dev/sdd1.

  6. O que aconteceu? como mencionado acima, o disco(10132285155705578371)  não se encontra inserido no server01. Vamos inseri-lo.
  7. Com o HD correto inserido usaremos o comando “blkid” para listarmos as identificações dos blocos(block id). Lembre que o disco que está como FAULTED acima é identificado como “10132285155705578371”.
    elder@server01:~$ sudo blkid 
    /dev/sdf1: LABEL="meuPool" UUID="14129386467484550634" UUID_SUB="10132285155705578371" TYPE="zfs_member" PARTLABEL="zfs-74bbbcbb13fad551" PARTUUID="237ea48d-767c-8c4d-8ae1-4f587805090b"
    /dev/sdc1: LABEL="meuPool" UUID="14129386467484550634" UUID_SUB="6913836240169211556" TYPE="zfs_member" PARTLABEL="zfs-8890548514dd217e" PARTUUID="8141f6ab-2678-e24f-9374-763e774c337c"
    /dev/sdb1: LABEL="meuPool" UUID="14129386467484550634" UUID_SUB="17249640120417132992" TYPE="zfs_member" PARTLABEL="zfs-bbc7d7ca54db721e" PARTUUID="5072e474-ed04-b642-83ae-e9eef8241c94"
    /dev/sdd1: LABEL="meuPool" UUID="14129386467484550634" UUID_SUB="13030838777518907721" TYPE="zfs_member" PARTLABEL="zfs-384a87ba46e14c91" PARTUUID="f8145fca-b4b4-9b4d-8f3d-b134d4aa24ff"
    /dev/sda1: UUID="08d9728a-0edf-4f23-b06a-6cb3ee2fea50" TYPE="ext4" PARTUUID="143703ee-01"
    /dev/sda5: UUID="b48081aa-85b8-4124-bbe2-b644291f97df" TYPE="ext4" PARTUUID="143703ee-05"
    /dev/sda6: UUID="d04d6b8a-a462-4328-8d5e-a87fd57b55de" TYPE="swap" PARTUUID="143703ee-06"
    /dev/sda7: UUID="c751cff9-6622-45b1-9ddf-0b7b4a96fd26" TYPE="ext4" PARTUUID="143703ee-07"
    /dev/sda8: UUID="7621b2ea-6ceb-4e11-b9dc-ad17316274fe" TYPE="ext4" PARTUUID="143703ee-08"
    /dev/sde1: PARTUUID="4f0b7617-01"
    /dev/sdf9: PARTUUID="a49cd053-8ef4-8740-bc2e-c16062b2e538"
    /dev/sdc9: PARTUUID="d7db4a43-076f-634a-acc7-077bb96c4302"
    /dev/sdb9: PARTUUID="c8d695b3-9923-0343-911f-ef9507b75058"
    /dev/sdd9: PARTUUID="bdb20fbd-b74a-3347-9a94-86ae7b09bf48"

    O disco correto é o  /dev/sdf1, ele tem id 10132285155705578371.
    Podemos ver em verde  que sdc1, sdb1 e sdd fazem parte do pool meuPool.
    O /dev/sde é um intruso e não faz parte do pool zfs.

    Temos um probleminha: o resultado de “zpool status” acima nos diz que o disco que falta estava identificado antes como sdd. Mas o sdd agora está como sdf.  E agora??? Na verdade e felizmente, como estamos trabalhando com espelhamento(mirror) basta substituir(replace) o disco sdd pelo sdf

  8. Substitua o disco sdd pelo sdf. Use “-f” para forçar a substituição.
    elder@server01:~$ sudo zpool replace -f  meuPool  sdd sdf
  9. Veja o status
    elder@server01:~$ sudo zpool status
      pool: meuPool
     state: ONLINE
    status: One or more devices has experienced an unrecoverable error.  An
    	attempt was made to correct the error.  Applications are unaffected.
    action: Determine if the device needs to be replaced, and clear the errors
    	using 'zpool clear' or replace the device with 'zpool replace'.
       see: http://zfsonlinux.org/msg/ZFS-8000-9P
      scan: resilvered 180K in 0 days 00:00:01 with 0 errors on Fri Feb  5 11:55:55 2021
    config:
    
    	NAME                                       STATE     READ WRITE CKSUM
    	meuPool                                    ONLINE       0     0     0
    	  mirror-0                                 ONLINE       0     0     0
    	    sdb                                    ONLINE       0     0     0
    	    sdc                                    ONLINE       0     0     0
    	  mirror-1                                 ONLINE       0     0     0
    	    sdf                                    ONLINE       0     0     8
    	    ata-VBOX_HARDDISK_VB826fbce8-bc5f6bb5  ONLINE       0     0     0
    
    errors: No known data errors

    Negritei acima dicas improtantes: PRecisamos executar “zpool clear” ou “zpool replace”. Bom, “zpool replace” foi o que fizemos. Vamos limpar(clear)

  10. Limpe o disco recém adicionado
    elder@server01:~$ sudo zpool clear meuPool sdf
  11. Veja o status. Agora sim estamos OK.
    elder@server01:~$ sudo zpool status
      pool: meuPool
     state: ONLINE
      scan: resilvered 180K in 0 days 00:00:01 with 0 errors on Fri Feb  5 11:55:55 2021
    config:
    
    	NAME                                       STATE     READ WRITE CKSUM
    	meuPool                                    ONLINE       0     0     0
    	  mirror-0                                 ONLINE       0     0     0
    	    sdb                                    ONLINE       0     0     0
    	    sdc                                    ONLINE       0     0     0
    	  mirror-1                                 ONLINE       0     0     0
    	    sdf                                    ONLINE       0     0     0
    	    ata-VBOX_HARDDISK_VB826fbce8-bc5f6bb5  ONLINE       0     0     0
    
    errors: No known data errors

    Acima vemos que um “resilver” foi realizado. Veremos sobre isso no próximo Post.

 

Conclusão

O correto é trabalhar com os ids dos discos ao invés desses rótulos: sdb, sdc…. Esses rótulos mudam, como vimos acima, já os IDs dos discos não; são permanentes. Podemos encontrar esses IDs usando o comando blkid.

Vamos ver um exemplo usando o disco sde.

elder@server01:~$ sudo zpool create meuPool02 ata-VBOX_HARDDISK_VB32c76fa9-f05ea43a

Ao invés de colocar “sde” usamos “ata-VBOX_HARDDISK_VB32c76fa9-f05ea43a”.

Onde encontramos esses IDs? Eles estão dentro de /dev/disk/by-id/. Pesquise com “ls -l”

elder@server01:~$ ls -l  /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root  9 fev  5 10:54 ata-VBOX_CD-ROM_VB2-01700376 -> ../../sr0
lrwxrwxrwx 1 root root  9 fev  5 12:28 ata-VBOX_HARDDISK_VB32c76fa9-f05ea43a -> ../../sde
lrwxrwxrwx 1 root root  9 fev  5 11:55 ata-VBOX_HARDDISK_VB3fa3b388-c8f02690 -> ../../sdf
lrwxrwxrwx 1 root root 10 fev  5 11:55 ata-VBOX_HARDDISK_VB3fa3b388-c8f02690-part1 -> ../../sdf1
lrwxrwxrwx 1 root root 10 fev  5 11:55 ata-VBOX_HARDDISK_VB3fa3b388-c8f02690-part9 -> ../../sdf9
lrwxrwxrwx 1 root root  9 fev  5 10:54 ata-VBOX_HARDDISK_VB826fbce8-bc5f6bb5 -> ../../sdd
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VB826fbce8-bc5f6bb5-part1 -> ../../sdd1
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VB826fbce8-bc5f6bb5-part9 -> ../../sdd9
lrwxrwxrwx 1 root root  9 fev  5 10:54 ata-VBOX_HARDDISK_VB8b3ce427-2779f1ea -> ../../sdc
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VB8b3ce427-2779f1ea-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VB8b3ce427-2779f1ea-part9 -> ../../sdc9
lrwxrwxrwx 1 root root  9 fev  5 10:54 ata-VBOX_HARDDISK_VBcad12d2a-434739ba -> ../../sda
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VBcad12d2a-434739ba-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VBcad12d2a-434739ba-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VBcad12d2a-434739ba-part5 -> ../../sda5
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VBcad12d2a-434739ba-part6 -> ../../sda6
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VBcad12d2a-434739ba-part7 -> ../../sda7
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VBcad12d2a-434739ba-part8 -> ../../sda8
lrwxrwxrwx 1 root root  9 fev  5 10:54 ata-VBOX_HARDDISK_VBcef28c17-112e7c2a -> ../../sdb
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VBcef28c17-112e7c2a-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 fev  5 10:54 ata-VBOX_HARDDISK_VBcef28c17-112e7c2a-part9 -> ../../sdb9

 

Muito bom, não é mesmo? Espero que tenha gostado!

 

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

One Comment to “ZFS: Usando Import e Export para Migrar os HDs para Outro Servidor – Parte 09”

Deixe um comentário

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