我有一个包含这些层的磁盘: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 保留(永远不会使用它)。要解决此问题,请摆脱重新保留。
为避免将来出现此问题,请使用
-s
(sparse) 标志创建 zvol,这也将对其进行精简配置:如果需要一个厚配置卷,请创建该卷,然后设置
refreservation=auto
.