zfs не может создать снимок, недостаточно места

zfs не может создать снимок, недостаточно места

У меня есть диск с такими слоями: 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

Связанный контент