zfs はスナップショットを作成できません。スペースが不足しています

zfs はスナップショットを作成できません。スペースが不足しています

ディスクには次のレイヤーがあります: SATA ディスク、luks、zpool、ext4

ext4 fs は次のコマンドで作成されました:

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

システムは Ubuntu 20.04.1 LTS です。このプールは後で別の 20.04.1 システムにインポートされました。

読み取り/書き込みスナップショットを作成してマウントしたいのですが、「スペース不足」と表示されます。

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

reserved=none または reserved=10G では動作しません。

どうやら、「zpool list」では 300G の空き容量が報告され、「zfs list」では 262G の空き容量が報告されています。しかし、どういうわけかスナップショットを作成できません。なぜでしょうか?

アップデート

新しいボリュームを作成しようとすると、動作します (ハンガリー語のロケールの場合は申し訳ありません)。

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

これは、zstore02/dsk02 を除く、作成したすべてのボリュームで機能します。

しかし、なぜ?

答え1

zvolにセットがありrefreservation、スナップショットやクローンに関係なく、データセットまたはzvol用のディスクスペースが予約されています。スナップショットを作成するには、十分な容量が必要です。無条件データセットに残っている参照スペースを収容するスペースは、この場合は 1.50T です。あなたの場合はrefreservation(おそらく) 1.61T なので、すべての空きスペースがその zvol (決して使用されない) 用に予約されるため、基本的に何もできません。

この問題を解決するには、refreservation を削除します。

zfs set refreservation=none zstore02/dsk02

将来この問題を回避するには、-s(sparse) フラグを使用して zvol を作成します。これにより、zvol もシンプロビジョニングされます。

zfs create -s -V 1600G zstore02/dsk02

代わりにシックプロビジョニングされたボリュームが必要な場合は、ボリュームを作成してから を設定しますrefreservation=auto

zfs set refreservation=auto zstore02/dsk02

関連情報