Zfs

zfs 無法創建快照,空間不足

  • December 5, 2020

我有一個包含這些層的磁碟: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

引用自:https://serverfault.com/questions/1045140