ディスクには次のレイヤーがあります: 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