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。
但為什麼?
您的 zvol 上有一個
refreservation
集合,它為該數據集或 zvol 保留磁碟空間,而不考慮快照或複製。為了製作快照,數據集中必須有足夠的未保留空間來容納其引用空間,在本例中為 1.50T。由於您refreservation
(很可能)是 1.61T,因此您基本上無法做任何事情,因為所有可用空間都為該 zvol 保留(永遠不會使用它)。要解決此問題,請擺脫重新保留。
zfs set refreservation=none zstore02/dsk02
為避免將來出現此問題,請使用
-s
(sparse) 標誌創建 zvol,這也將對其進行精簡配置:zfs create -s -V 1600G zstore02/dsk02
如果需要一個厚配置卷,請創建該卷,然後設置
refreservation=auto
.zfs set refreservation=auto zstore02/dsk02