zfs는 공간이 부족하여 스냅샷을 생성할 수 없습니다.

zfs는 공간이 부족하여 스냅샷을 생성할 수 없습니다.

나는 sata disk, luks, zpool, ext4 레이어를 가진 디스크를 가지고 있습니다.

ext4 fs는 다음 명령으로 생성되었습니다.

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.50T)입니다. 귀하는 refreservation(아마도) 1.61T이므로 모든 여유 공간이 해당 zvol(절대 사용하지 않음)을 위해 예약되어 있으므로 기본적으로 많은 작업을 수행할 수 없습니다.

문제를 해결하려면 재보관을 제거하세요.

zfs set refreservation=none zstore02/dsk02

향후 문제를 방지하려면 -s(sparse) 플래그를 사용하여 zvol을 생성하세요. 그러면 zvol도 씬 프로비저닝됩니다.

zfs create -s -V 1600G zstore02/dsk02

대신 씩 프로비저닝된 볼륨이 필요한 경우 볼륨을 생성한 다음 를 설정합니다 refreservation=auto.

zfs set refreservation=auto zstore02/dsk02

관련 정보