아직 공간이 충분하지만 "공간 부족"으로 인해 zvol을 생성할 수 없습니다.

아직 공간이 충분하지만 "공간 부족"으로 인해 zvol을 생성할 수 없습니다.

내 서버 중 하나에서 ZFS를 실행합니다. 2년 동안 문제가 없습니다. 그러나 오늘 저는 추가 zvol을 만들고 싶었는데, 그 결과 "공간이 부족합니다"라는 오류 메시지만 표시되었습니다. 이상한 건 꼭 그런 게 있을 거라는 거야충분한 공간:

root@cerberus:/vm-images# zfs list -r -t all
NAME            USED  AVAIL  REFER  MOUNTPOINT
rpool           956G   842G    96K  none
rpool/stretch   926G   842G   926G  /
rpool/swap     29.8G   869G  2.82G  -

root@cerberus:/vm-images# zfs create -b 512 -o checksum=on -o compression=off -o primarycache=none -o redundant_metadata=all -o secondarycache=none -o logbias=latency -o snapdev=hidden -o sync=standard -V 600G rpool/vm-garak
cannot create 'rpool/vm-garak': out of space

따라서 842GB의 여유 공간이 있지만 600GB 크기의 zvol 생성을 거부합니다.

내가 뭘 잘못하고 있는지 아시나요?

편집 1(@Jim L.의 요청에 따라):

사용된 예약 없음:

root@cerberus:/vm-images# zfs list -o name,reservation -r
NAME           RESERV
rpool            none
rpool/stretch    none
rpool/swap       none

답변1

-b옵션을 사용하면 지정된 블록 크기에 반비례하여 ZVOL이 소비하는 공간이 늘어나는 것으로 보입니다. 크기가 약 50% 증가한 것을 확인 했으므로 -b 512600G ZVOL은 약 50%가 되어야 합니다. 900G의 사용 가능한 공간.

여유 공간은 훨씬 적지만 비율은 비슷한 랩톱의 작은 예를 사용하겠습니다 -b 512.

# zfs list
NAME   USED  AVAIL  REFER  MOUNTPOINT
tank   191G  38.0G    88K  none
(...snip...)
# zfs create -b 512 -V 30g tank/zvol
cannot create 'tank/zvol': out of space
# zfs create -b 512 -V 24g tank/zvol
# zfs list tank/zvol
NAME        USED  AVAIL  REFER  MOUNTPOINT
tank/zvol  36.0G  38.0G    56K  -

ZVOL은 -b 512제공되는 저장 공간보다 50% 더 많은 공간을 차지합니다. 그러나 -b 128k예를 들어 오버헤드는 훨씬 더 낮습니다.

# zfs destroy tank/zvol
# zfs create -b 128k -V 36g tank/zvol
# zfs list tank/zvol
NAME        USED  AVAIL  REFER  MOUNTPOINT
tank/zvol  36.1G  38.0G    56K  -

답변2

https://github.com/openzfs/zfs/issues/548volblocksize(-b)와 ashift 사이의 상호 작용에 대해 논의합니다.

이것은 zfsonlinux입니까, 아니면 Solaris입니까(Solaris 11은 ashift 설정을 지원하지 않습니다. 단지 그렇습니다)?

zpool 상태는 무엇을 말합니까?

풀레이드인가?

관련 정보