zfs list가 스냅샷의 실제 크기를 출력하지 않는 이유는 무엇입니까?

zfs list가 스냅샷의 실제 크기를 출력하지 않는 이유는 무엇입니까?

그래서 zfs 기반 백업 서버의 공간이 부족하고 일부 오래된 백업을 삭제했지만 이후에 파일 시스템의 공간이 해제되지 않았습니다.

첫 번째 추측? 아직도 오래된 스냅샷이 남아 있을 것입니다. 그래서 나는 다음을 실행했습니다.

zfs list -t snapshot | grep "pool/backups@"

실제로 몇 가지가 있습니다:

NAME                                USED    AVAIL   MOUNTPOINT
pool/[email protected]  4.81M   0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0

그런데 방금 삭제한 약 400G 크기의 스냅샷이 나올 것으로 예상했지만 USED주목할 만한 크기의 스냅샷은 전혀 없습니다.

나는 말 그대로 다른 곳에서 문제를 찾으려고 몇 시간을 보냈고 마침내 실행했습니다.

zfs destroy -nv pool/backups@

놀라운 결과는 다음과 같습니다.

will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will reclaim 421G

제 질문은: 왜 zfs list스냅샷의 실제 크기가 표시되지 않습니까? 애초에 스냅샷이 소비하는 실제 공간을 얻으려면 어떻게 해야 합니까?

답변1

저도 같은 문제가 있었는데 답변을 받았어요r/zfs. 문제는 해당 USED열에 해당 스냅샷에 고유한 블록만 표시된다는 것입니다. 여러 스냅샷 간에 블록이 공유되는 경우 전혀 나열되지 않습니다. 이렇게 하면 스냅샷을 삭제할 때 USED정확한 공간을 다시 갖게 되며 해당 스냅샷의 블록이 다른 스냅샷에서 계속 사용되는 경우 공간은 0에 가까워집니다.

스냅샷을 차례로 삭제하면 결국 해당 블록을 참조하는 스냅샷 하나만 남게 되고 갑자기 모든 공간이 열에 표시됩니다 USED.

이상적이지는 않지만 일리가 있다고 생각합니다. 귀하의 경우 여러 스냅샷 간에 400GB가 공유되지만 그 중 하나를 삭제해도 공간이 확보되지 않는 경우 이를 어떻게 표시합니까?

답변2

제가 보기에는 이것이 귀하의 명령 버전에 있는 버그인 것 같습니다 zfs. FreeBSD 버그 보고서를 확인해 보세요.

이것은 거의 확실히 출력/표시 버그입니다. (스토리지 회계와 관련된 더 깊은 문제라면 매우 이상한 동작을 발견하게 될 것입니다.)

zfsonlinux0.6.5.6 내 시스템의 공간을 올바르게 표시이 스냅샷은"사용됨" 열에서:

# zfs list -t snapshot -r backup/hosts/kali
NAME                           USED  AVAIL  REFER  MOUNTPOINT
[...deleted...]
backup/hosts/kali@2016-05-24   526M      -  44.1G  -
backup/hosts/kali@2016-05-25   162M      -  44.1G  -
backup/hosts/kali@2016-05-26   137M      -  44.1G  -
backup/hosts/kali@2016-05-27   116M      -  44.1G  -
backup/hosts/kali@2016-05-28   195M      -  44.0G  -
backup/hosts/kali@2016-05-29   528M      -  44.4G  -
backup/hosts/kali@2016-05-30      0      -  44.5G  -

파일 backup/hosts/kali시스템 자체는 다음과 같습니다.

# zfs list backup/hosts/kali
NAME                USED  AVAIL  REFER  MOUNTPOINT
backup/hosts/kali  48.5G  4.06T  44.5G  /backup/hosts/kali

파일 시스템 및 스냅샷에 대해 이러한 필드가 정확히 무엇을 의미하는지 , man zfs검색 Native Propertiesreferenced/또는 자세히 알아 보십시오 .used

-o옵션 을 참조하십시오 zfs list. 이를 사용하여 오류를 우회하고 원하는 출력을 정확하게 얻을 수 있습니다.

예를 들어

# zfs list -o space backup/hosts/kali
NAME               AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
backup/hosts/kali  4.06T  48.5G     4.03G   44.5G              0          0

그런데 명령에 따라 파이프할 필요가 없습니다 zfs list.... 시도 해봐.grepzfs list -t snapshot | grep "pool/backups@"zfs list -t snapshot -r pool/backups

관련 정보