У меня есть диск с такими слоями: sata disk, luks, zpool, ext4
Файловая система ext4 была создана с помощью следующих команд:
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
У вас есть refreservation
набор на вашем zvol, который резервирует дисковое пространство для этого набора данных или zvol без учета снимков или клонов. Для того, чтобы сделать снимок, должно быть достаточнобезоговорочныйВ наборе данных осталось место для размещения указанного пространства, в данном случае 1,50 Т. Поскольку ваш refreservation
(скорее всего) 1,61 Т, вы в принципе ничего не можете сделать, так как все свободное пространство резервируется для этого zvol (который никогда его не использует).
Чтобы решить эту проблему, избавьтесь от refreservation.
zfs set refreservation=none zstore02/dsk02
Чтобы избежать этой проблемы в будущем, создавайте zvol с -s
флагом (sparse), который также будет их разрежать:
zfs create -s -V 1600G zstore02/dsk02
Если вместо этого требуется толстый том с выделенным разделом, создайте том, а затем установите refreservation=auto
.
zfs set refreservation=auto zstore02/dsk02