Eu tenho um disco com essas 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 é o Ubuntu 20.04.1 LTS. Este pool foi posteriormente importado em outro sistema 20.04.1.
Eu 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 quê?
ATUALIZAR
Se eu tentar criar um novo volume, ele 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 crie, exceto zstore02/dsk02.
Mas por que?
Você tem um
refreservation
conjunto em seu zvol, que reserva espaço em disco para esse conjunto de dados ou zvol sem considerar instantâneos ou clones. Para fazer um instantâneo, deve haver espaço não reservado suficiente no conjunto de dados para acomodar seu espaço referenciado, neste caso 1,50T. Como o seurefreservation
é (provavelmente) 1.61T, você basicamente não pode fazer muita coisa, pois todo o espaço livre é reservado para esse zvol (que nunca o usará).Para corrigir o problema, livre-se da nova reserva.
Para evitar o problema no futuro, crie zvols com o
-s
sinalizador (esparso), que também irá provisioná-los:Se desejar um volume provisionado espesso, crie o volume e, em seguida, defina
refreservation=auto
.