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。

但为什么?

答案1

您的 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

相关内容