我有一個包含以下層的磁碟: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:~#
它不適用於保留=無或保留= 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 保留(它永遠不會使用它)。
若要解決此問題,請取消重新預訂。
zfs set refreservation=none zstore02/dsk02
為了避免將來出現此問題,請使用-s
(稀疏)標誌建立 zvol,這也將精簡配置它們:
zfs create -s -V 1600G zstore02/dsk02
如果需要厚配置卷,請建立該卷,然後設定refreservation=auto
。
zfs set refreservation=auto zstore02/dsk02