스냅샷이 생성된 후 변경된 데이터보다 훨씬 적은 공간을 차지하는 이유는 무엇입니까?

스냅샷이 생성된 후 변경된 데이터보다 훨씬 적은 공간을 차지하는 이유는 무엇입니까?

한동안 ZFS를 사용해왔지만 때때로 ZFS의 특정 측면을 이해하지 못할 때가 있습니다. 현재 저는 ZFS 스냅샷이 디스크 공간을 어떻게 차지하는지, 그리고 그 공간이 예상보다 훨씬 작은 이유를 이해하려고 노력하고 있습니다.

내 질문은 예를 들어 가장 잘 설명됩니다. 가상 머신이 실행 중입니다.비압축 ZVOL( compression=off). 다음은 볼륨의 스냅샷입니다.

root@server01 ~ # zfs list -r -t all -o name,type,available,used,referenced,usedbyrefreservation,usedbydataset,usedbychildren,usedbysnapshots,volsize,refreservation,reservation rpool01/vm-server01
NAME                                       TYPE      AVAIL   USED  REFER  USEDREFRESERV  USEDDS  USEDCHILD  USEDSNAP  VOLSIZE  REFRESERV  RESERV
rpool01/vm-server01                        volume    1.60T  1.97T  1.01T             0B   1.01T         0B      985G    1.50T       none    none
rpool01/vm-server01@Y-2020-05-27-11-35-15  snapshot      -  1.06G  1.00T              -       -          -         -       1T          -       -
rpool01/vm-server01@T-2020-06-02-11-41-15  snapshot      -  1.04G  1.00T              -       -          -         -       1T          -       -
rpool01/vm-server01@Y-2021-04-24-05-36-24  snapshot      -  1.66G  1.00T              -       -          -         -    1.50T          -       -
rpool01/vm-server01@M-2021-04-24-21-22-30  snapshot      -  3.78G  1.01T              -       -          -         -    1.50T          -       -
rpool01/vm-server01@T-2021-04-25-14-27-15  snapshot      -     0B  1.01T              -       -          -         -    1.50T          -       -
rpool01/vm-server01@T-2021-04-25-14-27-30  snapshot      -     0B  1.01T              -       -          -         -    1.50T          -       -
rpool01/vm-server01@W-2021-04-25-21-55-43  snapshot      -   555M  1.01T              -       -          -         -    1.50T          -       -
rpool01/vm-server01@D-2021-04-27-17-49-00  snapshot      -  1.52G  1.01T              -       -          -         -    1.50T          -       -
rpool01/vm-server01@D-2021-04-29-08-48-16  snapshot      -  1.06G  1.01T              -       -          -         -    1.50T          -       -
rpool01/vm-server01@D-2021-05-03-09-42-01  snapshot      -  1.08G  1.01T              -       -          -         -    1.50T          -       -
rpool01/vm-server01@D-2021-05-04-12-12-01  snapshot      -  45.3M  1.01T              -       -          -         -    1.50T          -       -

여태까지는 그런대로 잘됐다. 걱정되는 점은 다음과 같습니다.

예를 들어 두 번째에서 마지막 스냅샷을 찍은 후 18 GB실행 중인 VM에 약 2개의 새 데이터를 복사했습니다. 하지만 해당 스냅샷의 크기 USED1.08 GB. 하지만 물론 파일 시스템에는 보고된 스냅샷 크기인 데이터세트/ZVOL 이후의 변경 사항을 기록하기 위한 공간이 필요합니다 USED(틀린 경우 수정해 주세요).

두 번째로 좀 더 극단적인 예로, 이 VM은 스냅샷을 만든 후 약 7시간 동안 실행되었습니다 @T-2021-04-25-14-27-30. 나는 그 기간 동안 가상 머신에서 꽤 많은 기가바이트의 데이터가 변경되었다고 확신합니다. 그러나 USED스냅샷의 크기는 균일한 것으로 알려졌습니다 0.

스냅샷을 찍은 후 실제로 얼마나 많은 데이터가 변경되었는지 확인하는 이상한 방법을 찾았습니다. 다음 명령줄(첫 번째 줄의 명령, 다음 두 줄의 출력)과 같은 작업을 수행하여 스냅샷 전송을 "시뮬레이트"할 수 있습니다.

root@server01 ~ # zfs send -v -n -R -i rpool01/vm-server01@D-2021-05-03-09-42-01 rpool01/vm-server01@D-2021-05-04-12-12-01
send from @D-2021-05-03-09-42-01 to rpool01/vm-server01@D-2021-05-04-12-12-01 estimated size is 18.6G
total estimated size is 18.6G

( -nzfs에게 아무것도 하지 말고 수행할 작업을 보고하라고 지시합니다. -v장황함을 의미하고 -i증분을 의미합니다. 에 대해서는 -R확인하시기 바랍니다. man zfs여기에서 설명하기에는 너무 깁니다)

여기에서 두 번째 스냅샷 증분을 기준으로 마지막 스냅샷을 보내는 데 대략 가 소요되는 것을 볼 수 있습니다 . 이는 각각 스냅샷 이후, 스냅샷 이전에 18 GB가상 머신에 변경되거나 추가된 데이터의 양과 거의 정확히 일치합니다 . 찍은. 즉, ZFS는 두 번째 스냅샷과 마지막 스냅샷 사이에 얼마나 많은 데이터가 변경되었는지 알고 있지만 두 번째 스냅샷은 여전히 ​​약 대신 값을 표시합니다 .@D-2021-05-03-09-42-01D-2021-05-04-12-12-01USED1.08 GB18 GB

누군가 이것을 설명할 수 있나요?

PS 크기 값을 해석하는 방법에 대한 몇 가지 기사를 읽었으며 zfs list중첩된 데이터 세트, 클론, 스냅샷 등이 작동할 때 매우 어렵다는 것을 알고 있지만 여기의 상황은 매우 간단합니다. 그렇지 않습니까? ? 어쨌든, 스냅샷의 예상 크기와 보고된 크기의 차이에 대한 힌트를 본 적이 없습니다.reservationsrefreservations

답변1

이제 내 질문에 답할 수 있습니다. 이곳에서 며칠 동안 답장을 받지 못해서 ZFS on Linux 메일링 리스트에도 이 질문을 올렸고 "Greek"과 "Stefan Ring"이라는 두 회원이 이 주제에 대해 설명해 주었습니다. 스레드는여기.

결론적으로:

첫 번째 이해와 달리 스냅샷의 크기는 USED다음 스냅샷이 생성되기 전에 해당 스냅샷이 생성되었기 때문에 ZVOL에 기록된 데이터의 양을 반영하지 않습니다.

대신 데이터의 양은고유한그 스냅샷에. 즉, 스냅샷 삭제 시 확보되는 디스크 공간의 크기입니다.

이제 이것이 다음 스냅샷이 생성되기 전에 ZVOL에 추가된 데이터의 양이 아닌 이유가 분명해졌습니다. 제 예로 돌아가서, 마지막에서 두 번째 스냅샷을 찍은 후 ZVOL에 약 18GB의 공간을 추가했습니다.

하지만 스냅샷을 삭제해도 물론 18GB의 데이터는 여전히 ZVOL에 남아 있습니다. 따라서 스냅샷을 삭제해도 해당 공간이 확보되지 않습니다.

USED대신 약 1GB(크기)만 해제됩니다. 단지 스냅샷에 고유한 공간이며 스냅샷과 해당 스냅샷 이후에 삭제되거나 변경된(그러나 추가되지 않은) 유효한 데이터를 관리하기 위해 혼합 메타데이터가 차지할 수 있습니다. 데이터를 로드합니다.

WRITTEN스냅샷이 생성된 이후와 다음 스냅샷이 생성되기 전에 스냅샷에 기록된 데이터의 양을 확인하려면 이 속성을 사용하십시오 .

USED와 사이의 차이점은 WRITTEN설명서에 명확하게 설명되어 있습니다 zfs. 설명서를 여러 번 읽었지만 이 WRITTEN속성을 놓친 것 같습니다.

관련 정보