Ubuntu + ZFS: como migrar todo o sistema para novos discos?

3

Este é o meu cenário:

Eu tenho o Ubuntu com o ZFS nativo instalado em um servidor com 2 discos SATA de 500 GB. Eu instalei seguindo este guia: link

Portanto, eu tenho no disco 1 uma partição de 16 MB para / boot / grub e o restante desse disco e a segunda unidade inteira dedicada ao ZFS em um zpool de espelhamento. Tudo funciona bem.

O problema é que agora preciso me livrar dos discos de 500 GB e substituí-los por discos de 2 x 1,5 TB.

Existe alguma maneira de eu poder replicar tudo (dados, tabela de partição, etc.) dos meus dois HDs de 500 GB para os dois HDD de 1.GB TB sem precisar reinstalar o sistema do zero?

Estou adicionando aqui as informações solicitadas por @jlliagre:

fdisk:

# fdisk -l

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf4bfe018

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63       32129       16033+  be  Solaris boot
/dev/sda2           32130   976773167   488370519    5  Extended
/dev/sda5           32193   976773167   488370487+  bf  Solaris

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I    /O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf4bfe018

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63   976773167   488386552+   5  Extended
/dev/sdb5             126   976773167   488386521   bf  Solaris

zpool status:

# zpool status
  pool: labpool
 state: ONLINE
 scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    labpool     ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        sda5    ONLINE       0     0     0
        sdb5    ONLINE       0     0     0

errors: No known data errors

lista de zpool

# zpool list
NAME      SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
labpool   464G  70.7G   393G    15%  1.00x  ONLINE  -

zpool history

# zpool history
History for 'labpool':
2012-02-17.19:23:39 zpool create labpool mirror /dev/disk/by-id/ata-WDC_WD5000AAKX-001CA0_WD-WCAYUFF66324-part5 /dev/disk/by-id/ata-WDC_WD5000AAKX-001CA0_WD-WCAYUFJ06204-part5
2012-02-17.19:26:39 zfs create labpool/ROOT
2012-02-17.19:26:44 zfs create labpool/ROOT/ubuntu-1
2012-02-17.19:27:15 zfs set mountpoint=/ labpool/ROOT/ubuntu-1
2012-02-17.19:27:36 zpool set bootfs=labpool/ROOT/ubuntu-1 labpool
2012-02-17.19:28:03 zpool export labpool
2012-02-17.19:28:30 zpool import -d /dev/disk/by-id/ -R /mnt labpool
2012-02-17.20:48:20 zpool export labpool
2012-02-17.21:03:30 zpool import -f -N labpool
2012-02-17.21:07:35 zpool import -f -N labpool
2012-02-17.21:42:09 zpool import -f -N labpool
2012-02-17.21:51:39 zpool import -f -N labpool
2012-02-17.21:55:49 zpool import -f -N labpool
2012-02-17.21:58:10 zpool import -f -N labpool
2012-02-22.13:25:26 zpool import -f -N labpool
2012-02-22.13:40:15 zpool import -f -N labpool
2012-02-22.12:50:38 zpool import -f -N labpool

Eu estive pensando: e se eu inicializar de um LiveCD, siga o até a etapa 4 (particionando e criando o pool do ZFS em meu novo par de discos), depois monte o novo sistema de arquivos em / mnt / new e o antigo em / mnt / old e rsync do antigo para o novo? Isso seria possível? Ou vai estragar tudo?

    
por El Barto 22.02.2012 / 19:54

3 respostas

0

Eu enviei um email para o autor do guia que eu segui para instalar o Ubuntu + ZFS e ele me deu uma solução que funcionou:

ZFS instances cannot be resized, so you must recreate the pool on larger disks to enlarge it. Do something like this:

  1. Install the new disks.
  2. Partition the new disks for /boot plus a larger pool area.
  3. Create a new pool, but give it a different name.
  4. zfs snapshot -r oldpool@now
  5. zfs send -R oldpool@now | zfs recv newpool
  6. Copy the old /boot into the new /boot.
  7. Repeat the GRUB installation.
  8. Remove the old disks.

If you want to keep the same pool name, then you must export the new pool and use zpool import -R after step 3, which is described in the man page.

Eu tive alguns problemas porque precisava trocar os soquetes onde os discos estavam conectados, mas achei que a resposta poderia ajudar outras pessoas na minha situação.

Eu não tentei a solução @ jlliagre porque a vi depois, mas acho que pode ter havido um problema com o que é mencionado no e-mail que estou citando sobre instâncias do ZFS que não podem ser redimensionadas (lembrando que queria para passar de um espelho de 2x500 GB para um espelho de 2x1,5 TB).

    
por 25.02.2012 / 18:41
5

Isso deve funcionar:

  • Crie um layout de partição semelhante nos novos discos, o ZFS não fará isso por você.

  • Copie a partição de inicialização e reinstale o carregador de inicialização.

  • defina a propriedade autoexpand no seu pool raiz zpool set autoexpand=on labpool

  • Substitua um dos discos, por exemplo, zpool replace labpool sda5 sdc5 e aguarde até que o resilvering espelhe todos os conjuntos de dados do conjunto usando zpool status

  • Substitua o segundo disco zpool replace labpool sdb5 sdd5 .

  • Remova os discos antigos

por 23.02.2012 / 22:37
1

Você deve poder usar zpool replace <pool> <old disk> <new disk> para cada disco. Isso irá manter todas as partições, atributos de arquivo, etc. Eu usei isso com sucesso com o zfs-fuse.

Veja a página de manual .

    
por 23.02.2012 / 18:42