zfs kann keinen Snapshot erstellen, nicht genügend Speicherplatz

zfs kann keinen Snapshot erstellen, nicht genügend Speicherplatz

Ich habe eine Festplatte mit diesen Schichten: SATA-Festplatte, Luks, Zpool, Ext4

Das ext4-FS wurde mit diesen Befehlen erstellt:

cryptsetup -v luksFormat /dev/sdb
cryptsetup luksOpen /dev/sda store02
zpool create zstore02 /dev/mapper/store02
zfs create -V 1600G zstore02/dsk02
mkfs.ext4 -L dsk02 /dev/zstore02/dsk02

Das System ist Ubuntu 20.04.1 LTS. Dieser Pool wurde später auf ein anderes 20.04.1-System importiert.

Ich möchte einen Lese-/Schreib-Snapshot erstellen und ihn mounten. Aber ich bekomme die Meldung „Nicht genügend Speicherplatz“:

root@computer:~# zpool list
NAME       SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zstore02  1,81T  1,50T   320G        -         -     7%    82%  1.00x    ONLINE  -
root@computer:~# zfs list
NAME             USED  AVAIL     REFER  MOUNTPOINT
zstore02        1,61T   148G       24K  /zstore02
zstore02/dsk02  1,61T   262G     1,50T  -
root@computer:~# zfs snapshot zstore02/dsk02@test
cannot create snapshot 'zstore02/dsk02@test': out of space
root@computer:~# zfs get reservation zstore02/dsk02
NAME            PROPERTY     VALUE   SOURCE
zstore02/dsk02  reservation  none    local
root@computer:~# zfs set reservation=10G zstore02
root@computer:~# zfs set reservation=10G zstore02/dsk02
root@computer:~# zfs snapshot zstore02/dsk02@test
cannot create snapshot 'zstore02/dsk02@test': out of space
root@computer:~#

Es funktioniert nicht mit „reserviert=keine“ oder „reserviert=10G“.

Anscheinend meldet „zpool list“ 300 GB freien Speicherplatz und „zfs list“ meldet 262 GB freien Speicherplatz. Aber irgendwie kann ich keinen Snapshot erstellen. Warum?

AKTUALISIEREN

Wenn ich versuche, ein neues Volume zu erstellen, funktioniert es (entschuldigen Sie das ungarische Gebietsschema):

root@computer:~# zfs create -V 1G zstore02/test
root@computer:~# mkfs.ext4 -L test /dev/zstore02/test
mke2fs 1.45.5 (07-Jan-2020)
Eszközblokkok eldobása: kész
Fájlrendszer létrehozása 262144 4 blokkal és 65536 inode-dal
Fájlrendszer UUID: 14e07b33-5d25-465a-aeb8-7fbfe2499dfd
Tartalék szuperblokkok tárolva a blokkokon:
        32768, 98304, 163840, 229376

Csoporttáblák foglalása: kész
Inode táblák írásakor: kész
Napló létrehozása (8192 blokk): kész
Szuperblokkok és fájlrendszer-könyvelési információk írása: kész

root@computer:~# zfs snapshot zstore02/test@snap1

root@computer:~# zfs list -t snapshot
NAME                  USED  AVAIL     REFER  MOUNTPOINT
zstore02/test@snap1     0B      -     32,7M  -
root@computer:~#

Es funktioniert für jedes Volume, das ich erstelle, außer zstore02/dsk02.

Aber warum?

Antwort1

Sie haben einen refreservationSatz auf Ihrem Zvol, der Speicherplatz für diesen Datensatz oder Zvol reserviert, ohne Rücksicht auf Snapshots oder Klone. Um einen Snapshot zu erstellen, muss genügendvorbehaltlosim Datensatz ist noch Platz übrig, um den referenzierten Speicherplatz unterzubringen, in diesem Fall 1,50 T. Da Ihr Speicherplatz refreservation(höchstwahrscheinlich) 1,61 T beträgt, können Sie im Grunde nicht viel tun, da der gesamte freie Speicherplatz für diesen Zvol reserviert ist (der ihn nie verwenden wird).

Um das Problem zu beheben, entfernen Sie die Erfrischungsreservierung.

zfs set refreservation=none zstore02/dsk02

Um das Problem in Zukunft zu vermeiden, erstellen Sie Zvols mit dem -sFlag (sparse), wodurch sie auch Thin Provisioning durchlaufen:

zfs create -s -V 1600G zstore02/dsk02

Wenn stattdessen ein Thick-Provisioning-Volume gewünscht wird, erstellen Sie das Volume und legen Sie es dann fest refreservation=auto.

zfs set refreservation=auto zstore02/dsk02

verwandte Informationen