zfs não pode criar instantâneo, sem espaço

zfs não pode criar instantâneo, sem espaço

Eu tenho um disco com estas camadas: disco sata, luks, zpool, ext4

O ext4 fs foi criado com estes comandos:

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

O sistema é Ubuntu 20.04.1 LTS. Este pool foi posteriormente importado para outro sistema 20.04.1.

Quero criar um instantâneo de leitura/gravação e montá-lo. Mas me diz "sem espaço":

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:~#

Não funciona com reservado=nenhum nem reservado=10G.

Aparentemente, "zpool list" relata 300G de espaço livre e "zfs list" relata 262G de espaço livre. Mas de alguma forma não consigo criar um instantâneo. Por que?

ATUALIZAR

Se eu tentar criar um novo volume, funcionará (desculpe pela localidade húngara):

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:~#

Funciona para qualquer volume que eu criar, exceto zstore02/dsk02.

Mas por que?

Responder1

Você tem um refreservationconjunto no seu zvol, que reserva espaço em disco para esse conjunto de dados ou zvol, independentemente de instantâneos ou clones. Para fazer um instantâneo, deve haver espaço suficientesem reservasespaço restante no conjunto de dados para acomodar seu espaço referenciado, neste caso 1,50T. Como o seu refreservationé (provavelmente) 1.61T, você basicamente não pode fazer muita coisa, pois todo o espaço livre é reservado para aquele zvol (que nunca o utilizará).

Para resolver o problema, livre-se da reserva.

zfs set refreservation=none zstore02/dsk02

Para evitar o problema no futuro, crie zvols com o -ssinalizador (esparso), que também irá provisioná-los:

zfs create -s -V 1600G zstore02/dsk02

Se um volume provisionado espesso for desejado, crie o volume e defina refreservation=auto.

zfs set refreservation=auto zstore02/dsk02

informação relacionada