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

它不適用於保留=無或保留= 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

相關內容