Warum wird mein ZFS-Pool unter Linux nicht mit ZFS erweitert?

10

Ich habe einen ZFS-Zpool unter Linux unter Kernel 2.6.32-431.11.2.el6.x86_64, der eine einzelne vdev hat. Das vdev ist ein SAN-Gerät. I erweitert die Größe des SAN und trotz der zpool haben autoexpandzu setzen on, auch nach dem Neustart des Computers, Export / Import auf den Pool und die Verwendung zpool online -e, ich war nicht in der Lage den Pool zu bekommen zu erweitern. Ich bin sicher, dass der vdev größer ist, weil fdisker von 215GiB auf 250 GiB gestiegen ist. Hier ist ein Beispiel von dem, was ich getan habe:

[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

Wie kann ich diesen Zpool erweitern?

Josh
quelle

Antworten:

10

Ich verwende ZFS unter Ubuntu 16.04 und nach langem Ausprobieren hat dies dazu beigetragen, die Festplatten- und Poolgröße ohne Neustart zu erweitern. Mein System wird in der Cloud bei Profitbricks gehostet und verwendet libvirt-Laufwerke (keine SCSI-Laufwerke).

Erhalten Sie Pool- und Gerätedetails:

# 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  -

Autoexpand aktivieren:

# zpool set autoexpand=on pool

Melden Sie sich jetzt bei Profitbricks an und erhöhen Sie die Festplattengröße von 40 GB auf 50 GB.

Benachrichtigen Sie das System über die Änderung der Festplattengröße und erweitern Sie den 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  -

Ich bin mir nicht sicher warum, aber es ist manchmal notwendig, partprobeund / oder zpool online -e pool vdbzweimal auszuführen , um die Änderungen wirksam zu machen.

lfjeff
quelle
1
Scheint, als wäre Ihre Lösung dieselbe wie meine? nämlich zpool online -e pool vdbist der Befehl, der den Trick macht. Ich benutze jetzt ZFS-on-Linux auf einer Reihe von libvirt-Servern und das funktioniert für mich (ohne partprobe)
Josh
Ich musste auch neu starten, um die Änderungen wirksam zu machen, und dann stellte ich fest, dass partprobe(vorher und nachher ausgeführt zpool online) kein Neustart erforderlich war.
lfjeff
7

Ich habe in den freebsd-Foren einen Beitrag gelesen, der die Verwendung vorschlug zpool online -e <pool> <vdev>(ohne zuerst das vdev offline schalten zu müssen).

Dies war letztendlich die Lösung, aber es war erforderlich, dass die automatische Erweiterung von ZFS zuerst deaktiviert wurde :

[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  -

Die Verwendung von zpool set autoexpand=offgefolgt von zpool online -ewar erforderlich, um den zpool für mich zu erweitern, wobei ZFS unter Linux verwendet wurde (im Kernel, ohne FUSE).

Josh
quelle
Das macht keinen Sinn. Die ZFS-Mailingliste weist darauf hin, dass das Kernelmodul neu geladen werden muss, bevor eine Poolerweiterung ausgeführt werden kann.
ewwhite
Nun, eine Kombination aus drei Neustarts, mehreren Exporten und Importen zpool online -eund zpool set autoexpand=offfür mich @ewwhite ... Ich habe den vollständigen Verlauf in meinem Terminal verfügbar. Ich bin mir nicht sicher, was das Problem war.
Josh
Danke @ewwhite. Ich verwende keine neuere Version, diese Version ist mindestens 15 Monate alt. Ich bin mir nicht sicher, wie ich die Version genau finden soll.
Josh