Por que meu pool de ZFS não está se expandindo usando o ZFS no Linux?

10

Eu tenho um zpool do ZFS no linux no kernel 2.6.32-431.11.2.el6.x86_64 que possui um único vdev. O vdev é um dispositivo SAN. Expandi o tamanho da SAN e, apesar do zpool ter autoexpanddefinido on, mesmo após a reinicialização da máquina, exportar / importar o pool e usá-lo zpool online -e, não consegui fazer com que o pool se expandisse. Estou certo de que o vdev é maior porque fdiskmostra que aumentou de 215GiB para 250 GiB. Aqui está uma amostra do que eu fiz:

[root@timestandstill ~]# zpool list
NAME          SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dfbackup      214G   207G  7.49G    96%  1.00x  ONLINE  -
[root@timestandstill ~]# zpool import -d /dev/disk/by-id/
   pool: dfbackup
     id: 12129781223864362535
  state: ONLINE
 action: The pool can be imported using its name or numeric identifier.
 config:

    dfbackup             ONLINE
      virtio-sbs-XLPH83  ONLINE
[root@timestandstill ~]# zpool import -d /dev/disk/by-id/ dfbackup
[root@timestandstill ~]# zpool list
NAME          SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dfbackup      214G   207G  7.49G    96%  1.00x  ONLINE  -
venuebackup   248G   244G  3.87G    98%  1.00x  ONLINE  -
[root@timestandstill ~]# zpool get autoexpand dfbackup
NAME      PROPERTY    VALUE   SOURCE
dfbackup  autoexpand  on      local
[root@timestandstill ~]# zpool set autoexpand=off dfbackup
[root@timestandstill ~]# zpool set autoexpand=on dfbackup
[root@timestandstill ~]# zpool list
NAME          SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dfbackup      214G   207G  7.49G    96%  1.00x  ONLINE  -
venuebackup   248G   244G  3.87G    98%  1.00x  ONLINE  -
[root@timestandstill ~]# zpool status -v dfbackup
  pool: dfbackup
 state: ONLINE
  scan: none requested
config:

    NAME                 STATE     READ WRITE CKSUM
    dfbackup             ONLINE       0     0     0
      virtio-sbs-XLPH83  ONLINE       0     0     0

errors: No known data errors
[root@timestandstill ~]# fdisk /dev/disk/by-id/virtio-sbs-XLPH83

WARNING: GPT (GUID Partition Table) detected on '/dev/disk/by-id/virtio-sbs-XLPH83'! The util fdisk doesn't support GPT. Use GNU Parted.


WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/disk/by-id/virtio-sbs-XLPH83: 268.4 GB, 268435456000 bytes
256 heads, 63 sectors/track, 32507 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

                             Device Boot      Start         End      Blocks   Id  System
/dev/disk/by-id/virtio-sbs-XLPH83-part1               1       27957   225443839+  ee  GPT

Command (m for help): q
[root@timestandstill ~]# zpool online -e dfbackup /dev/disk/by-id/virtio-sbs-XLPH83
[root@timestandstill ~]# zpool list
NAME          SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dfbackup      214G   207G  7.49G    96%  1.00x  ONLINE  -
venuebackup   248G   244G  3.87G    98%  1.00x  ONLINE  -
[root@timestandstill ~]# zpool status -v dfbackup
  pool: dfbackup
 state: ONLINE
  scan: none requested
config:

    NAME                 STATE     READ WRITE CKSUM
    dfbackup             ONLINE       0     0     0
      virtio-sbs-XLPH83  ONLINE       0     0     0

errors: No known data errors

Como posso expandir esse zpool?

Josh
fonte

Respostas:

10

Estou executando o ZFS no Ubuntu 16.04 e, após várias tentativas e erros, foi o que funcionou para expandir o tamanho do disco e do pool sem reiniciar. Meu sistema está hospedado na nuvem na Profitbricks e usa unidades libvirt (não SCSI).

Obtenha detalhes sobre o pool e o dispositivo:

# zpool status -v
   ...
    NAME        STATE     READ WRITE CKSUM
    pool        ONLINE       0     0     0
      vdb       ONLINE       0     0     0

# zpool list
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool  39.8G  27.1G  12.7G         -    49%    68%  1.00x  ONLINE  -

Ative a expansão automática:

# zpool set autoexpand=on pool

Agora, faça login no painel de controle Profitbricks e aumente o tamanho do disco de 40 GB para 50 GB.

Notifique o sistema sobre a alteração do tamanho do disco e expanda o pool:

# partprobe
Warning: Not all of the space available to /dev/vdb appears to be used,
you can fix the GPT to use all of the space (an extra 10485760 blocks) or 
continue with the current setting?

# zpool online -e pool vdb

# partprobe

# zpool list
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
pool  49.8G  27.1G  21.7G         -    40%    55%  1.00x  ONLINE  -

Não sei por que, mas às vezes é necessário executar partprobee / ou zpool online -e pool vdbduas vezes para efetivar as alterações.

lfjeff
fonte
1
Parece que sua solução foi a mesma que a minha? ou seja, zpool online -e pool vdbé o comando que faz o truque. Agora estou usando ZFS-on-Linux em um número de servidores libvirt e que funciona para mim (sem partprobe)
Josh
Eu também estava tendo que reiniciar para efetivar as alterações, e descobri que partprobe(executar antes e depois zpool online) eliminava a necessidade de uma reinicialização.
Lfjeff
7

Eu li nos fóruns do freebsd um post que sugeria o uso zpool online -e <pool> <vdev>(sem a necessidade de desligar o vdev primeiro)

Essa foi a solução, mas exigiu que a expansão automática do ZFS fosse desabilitada primeiro :

[root@timestandstill ~]# zpool list
NAME          SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dfbackup      214G   207G  7.49G    96%  1.00x  ONLINE  -
[root@timestandstill ~]# zpool get autoexpand
NAME         PROPERTY    VALUE   SOURCE
dfbackup     autoexpand  on      local
[root@timestandstill ~]# zpool set autoexpand=off dfbackup
[root@timestandstill ~]# zpool online -e dfbackup /dev/disk/by-id/virtio-sbs-XLPH83
[root@timestandstill ~]# zpool list
NAME          SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
dfbackup      249G   207G  42.5G    82%  1.00x  ONLINE  -

O uso zpool set autoexpand=offseguido por zpool online -efoi necessário para que o zpool se expandisse para mim, usando o ZFS no linux (no kernel, não usando o FUSE)

Josh
fonte
Isso não faz sentido. A lista de discussão do ZFS indica a necessidade de recarregar o módulo do kernel antes de poder executar uma expansão de pool.
ewwhite
Bem, uma combinação de três reinicializações, várias exportações e importações, zpool online -ee zpool set autoexpand=offfiz por mim @whwhite ... Tenho o histórico completo disponível no meu terminal. Não tenho certeza qual era o problema então.
217 Josh
Obrigado @ewwhite. Não estou usando uma versão mais recente, esta versão tem pelo menos 15 meses. Não tenho certeza de como encontrar especificamente a versão.
214 Josh Josh