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 refreservation
conjunto 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 -s
sinalizador (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