ZVOL을 다시 예약하면 ZVOL에서 이미 참조한 공간보다 낮은 경우에도 상위 여유 공간이 줄어드는 이유는 무엇입니까?

ZVOL을 다시 예약하면 ZVOL에서 이미 참조한 공간보다 낮은 경우에도 상위 여유 공간이 줄어드는 이유는 무엇입니까?

refreservation어떻게 작동하는지 이해할 수 없습니다 . ~에서문서:

데이터 세트(스냅샷 및 클론과 같은 하위 항목 제외)에 보장되는 최소 디스크 공간 크기를 설정합니다. 사용된 디스크 공간의 양이 이 값 아래로 떨어지면 데이터 세트는 재보존에 의해 지정된 공간의 양을 차지하는 것으로 간주됩니다. [...]

내가 이해하는 바로는 refreservation데이터 세트가 이미 참조하는 공간 위에 있을 때만 작동해야 하고, 반대로 그 아래에서는 아무 작업도 수행해서는 안 됩니다. 예를 들어 ZVOL이 있는 경우추천 60 GB, 그런 다음 ZVOL 에 refreservationof 를 추가합니다 50 GB. 어떻게 해야 합니까? 결국 을 추가하면 refreservation이 ZVOL이 최소한 참조될 것이라는 점을 보장 50 GB하지만 이미 참조되었으므로 60 GB아무 것도 변경되어서는 안 됩니다. 그렇죠?

제 경우에는 해당 작업이 상위 데이터세트의 여유 공간을 차지하고 있었습니다. 다음 명령 및 해당 출력 목록을 고려하십시오(일부 다른 ZVOL 및 데이터 세트에 대한 줄은 주의를 산만하게 하고 동작을 이해하는 데 도움이 되지 않기 때문에 제거했습니다).

root@cerberus:~/qemu-kvm# zfs list -o name,type,creation,volsize,available,used,referenced,reservation,refreservation,usedbydataset,usedbyrefreservation,usedbysnapshots,usedbychildren
NAME                    TYPE        CREATION               VOLSIZE  AVAIL   USED  REFER  RESERV  REFRESERV  USEDDS  USEDREFRESERV  USEDSNAP  USEDCHILD
rpool                   filesystem  Mon Jan 16  9:45 2017        -   672G  1.10T    96K    none       none     96K              0         0      1.10T
rpool/zvol-morn-system  volume      Tue Sep 15 20:43 2020      72G   722G   113G  63.0G    none        50G   63.0G          49.8G      238M          0
root@cerberus:~/qemu-kvm# zfs set refreservation=none rpool/zvol-morn-system
root@cerberus:~/qemu-kvm# zfs list -o name,type,creation,volsize,available,used,referenced,reservation,refreservation,usedbydataset,usedbyrefreservation,usedbysnapshots,usedbychildren
NAME                    TYPE        CREATION               VOLSIZE  AVAIL   USED  REFER  RESERV  REFRESERV  USEDDS  USEDREFRESERV  USEDSNAP  USEDCHILD
rpool                   filesystem  Mon Jan 16  9:45 2017        -   722G  1.05T    96K    none       none     96K              0         0      1.05T
rpool/zvol-morn-system  volume      Tue Sep 15 20:43 2020      72G   722G  63.2G  63.0G    none       none   63.0G              0      258M          0

첫 번째 출력에서 rpool/zvol-morn-system​​를 참조 63 GB하고 갖는 refreservation50 GB전체 사용법이 제공되며 113 GB(이것이 제가 가장 먼저 이해하지 못한 것입니다) 부모의 여유 공간 rpool은 입니다 672 GB. 두 번째 출력에서는 삭제하여 refreservation상위 항목의 여유 공간이 늘어났습니다. 해당 ZVOL의 실제 참조 공간이 초과되었으므로 왜 아무런 효과가 없어야 하는지 이해할 수 없습니다.rpool50 GB50 GBrefreservation50 GB

누군가 내가 어디로 잘못 가고 있는지 설명해 줄 수 있습니까?

저는 ZFS에 대한 문서와 매뉴얼 페이지를 연구하고 SO 및 관련 사이트에 대한 몇 가지 질문을 살펴보았습니다. ZFS 공간 계산에 대한 많은 정보를 찾았지만 이 특정 이해 문제에 대한 설명을 찾을 수 없었습니다.

답변1

문제는 스냅샷과 데이터세트 자체에서 참조된 블록인 것 같습니다(따라서 파일이 삭제되면 해당 파일이 소비하는 공간은 USEDSNAP 아래에 표시되지만 그 전에는 REFER 아래에 표시됩니다).

하지만 여전히 "스냅샷 및 복제에 의해 소비되는 디스크 공간"에 속하므로 USEDREFRESERV가 줄어들지 않을 것 같습니다. zfs list -t snapshot설명하신 상황에서 확인 하실 수 있습니다 .

첫 번째 질문에 대한 대답은 더 간단합니다. Refreservation은 어쨌든 "used"의 정의에 속하므로 다른 모든 USED* 열과 마찬가지로 USED가 증가합니다.

관련 정보