Tengo un disco con estas capas: disco sata, luks, zpool, ext4
El ext4 fs fue creado con estos 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
El sistema es Ubuntu 20.04.1 LTS. Este grupo se importó posteriormente a otro sistema 20.04.1.
Quiero crear una instantánea de lectura/escritura y montarla. Pero me dice "sin espacio":
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:~#
No funciona con reservado=ninguno ni reservado=10G.
Aparentemente, "zpool list" informa 300G de espacio libre y "zfs list" informa 262G de espacio libre. Pero de alguna manera no puedo crear una instantánea. ¿Por qué?
ACTUALIZAR
Si intento crear un nuevo volumen, funciona (perdón por la configuración regional 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 cualquier volumen que creo, excepto zstore02/dsk02.
¿Pero por qué?
Respuesta1
Tiene un refreservation
conjunto en su zvol, que reserva espacio en disco para ese conjunto de datos o zvol sin tener en cuenta instantáneas o clones. Para poder tomar una instantánea debe haber suficienteno reservadoespacio que queda en el conjunto de datos para acomodar su espacio de referencia, en este caso 1,50T. Dado que su refreservation
(muy probablemente) 1.61T, básicamente no puede hacer mucho ya que todo el espacio libre se reserva para ese zvol (que nunca lo usará).
Para solucionar el problema, elimine la refreserva.
zfs set refreservation=none zstore02/dsk02
Para evitar el problema en el futuro, cree zvols con el -s
indicador (escaso), que también los aprovisionará:
zfs create -s -V 1600G zstore02/dsk02
Si en su lugar desea un volumen aprovisionado grueso, cree el volumen y luego configúrelo refreservation=auto
.
zfs set refreservation=auto zstore02/dsk02