www.fabiankeil.de/blog-surrogat/2021/01/02/zfs-mirror-volumen-verdoppelt.html

Volumen von ZFS-Pool vergrößert

Ich experimentiere derzeit mit simplesnap, einem Programm um ZFS-Datasets auf andere Hosts zu übertragen.

Auf dem VM-Host, in der virtuellen Maschine und auf den Systemen, von denen Backups erzeugt werden sollen läuft wenig überraschend ElectroBSD.

Als Backup-System habe ich eine virtuelle Maschine mit bhyve eingerichtet und ein 1-Terabyte-großes sparse ZFS-Volume als Datenspeicher verwendet.

Der ZFS-Pool auf dem Host hatte allerdings nicht genug Platz:

[fk@elektrobier3 ~]$ zpool list dpool
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
dpool   880G   686G   194G        -         -    60%    77%  1.00x  ONLINE  -
[fk@elektrobier3 ~]$ zfs list dpool
NAME    USED  AVAIL  REFER  MOUNTPOINT
dpool   727G   125G    96K  /dpool
[fk@elektrobier3 ~]$ zpool status -v dpool
  pool: dpool
 state: ONLINE
  scan: scrub repaired 0 in 0 days 08:55:47 with 0 errors on Sat Nov 16 00:37:28 2019
config:

        NAME                    STATE     READ WRITE CKSUM
        dpool                   ONLINE       0     0     0
          mirror-0              ONLINE       0     0     0
            gpt/dpool-ada0.eli  ONLINE       0     0     0
            gpt/dpool-ada3.eli  ONLINE       0     0     0
            gpt/dpool-ada2.eli  ONLINE       0     0     0
            gpt/dpool-ada1.eli  ONLINE       0     0     0

errors: No known data errors

Um die Kapazität zu erhöhen habe ich die Redundanz des Pools verkleinert.

[fk@elektrobier3 ~]$ sudo zpool detach dpool gpt/dpool-ada3.eli
[fk@elektrobier3 ~]$ sudo zpool detach dpool gpt/dpool-ada2.eli
[fk@elektrobier3 ~]$ zpool status -v dpool
  pool: dpool
 state: ONLINE
  scan: scrub repaired 0 in 0 days 08:55:47 with 0 errors on Sat Nov 16 00:37:28 2019
config:

        NAME                    STATE     READ WRITE CKSUM
        dpool                   ONLINE       0     0     0
          mirror-0              ONLINE       0     0     0
            gpt/dpool-ada0.eli  ONLINE       0     0     0
            gpt/dpool-ada1.eli  ONLINE       0     0     0

errors: No known data errors
[fk@elektrobier3 ~]$ sudo zpool add -n dpool mirror gpt/dpool-ada2.eli gpt/dpool-ada3.eli
would update 'dpool' to the following configuration:
        dpool
          mirror
            gpt/dpool-ada0.eli
            gpt/dpool-ada1.eli
          mirror
            gpt/dpool-ada2.eli
            gpt/dpool-ada3.eli
[fk@elektrobier3 ~]$ sudo zpool add dpool mirror gpt/dpool-ada2.eli gpt/dpool-ada3.eli
[fk@elektrobier3 ~]$ zpool status -v dpool
  pool: dpool
 state: ONLINE
  scan: scrub repaired 0 in 0 days 08:55:47 with 0 errors on Sat Nov 16 00:37:28 2019
config:

        NAME                    STATE     READ WRITE CKSUM
        dpool                   ONLINE       0     0     0
          mirror-0              ONLINE       0     0     0
            gpt/dpool-ada0.eli  ONLINE       0     0     0
            gpt/dpool-ada1.eli  ONLINE       0     0     0
          mirror-1              ONLINE       0     0     0
            gpt/dpool-ada2.eli  ONLINE       0     0     0
            gpt/dpool-ada3.eli  ONLINE       0     0     0

errors: No known data errors

Wenn jetzt zwei Platten gleichzeitig ausfallen sollten und zum gleichen Spiegel-vdev gehören ist der Pool kaputt.

Um das Backup-Volume komplett zu füllen reicht die Pool-Kapazität immer noch nicht aus, aber für die weiteren Experimente sollte es reichen.

[fk@elektrobier3 ~]$ zpool list dpool
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
dpool  1.72T   686G  1.05T        -         -    30%    38%  1.00x  ONLINE  -
[fk@elektrobier3 ~]$ zfs list dpool/usr/bhyve/backup/disk0
NAME                           USED  AVAIL  REFER  MOUNTPOINT
dpool/usr/bhyve/backup/disk0  13.9G   977G  13.6G  -
[fk@elektrobier3 ~]$ zfs get volsize dpool/usr/bhyve/backup/disk0
NAME                          PROPERTY  VALUE    SOURCE
dpool/usr/bhyve/backup/disk0  volsize   1T       local