한동안 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개의 새 데이터를 복사했습니다. 하지만 해당 스냅샷의 크기 USED
는 1.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
( -n
zfs에게 아무것도 하지 말고 수행할 작업을 보고하라고 지시합니다. -v
장황함을 의미하고 -i
증분을 의미합니다. 에 대해서는 -R
확인하시기 바랍니다. man zfs
여기에서 설명하기에는 너무 깁니다)
여기에서 두 번째 스냅샷 증분을 기준으로 마지막 스냅샷을 보내는 데 대략 가 소요되는 것을 볼 수 있습니다 . 이는 각각 스냅샷 이후, 스냅샷 이전에 18 GB
가상 머신에 변경되거나 추가된 데이터의 양과 거의 정확히 일치합니다 . 찍은. 즉, ZFS는 두 번째 스냅샷과 마지막 스냅샷 사이에 얼마나 많은 데이터가 변경되었는지 알고 있지만 두 번째 스냅샷은 여전히 약 대신 값을 표시합니다 .@D-2021-05-03-09-42-01
D-2021-05-04-12-12-01
USED
1.08 GB
18 GB
누군가 이것을 설명할 수 있나요?
PS 크기 값을 해석하는 방법에 대한 몇 가지 기사를 읽었으며 zfs list
중첩된 데이터 세트, 클론, 스냅샷 등이 작동할 때 매우 어렵다는 것을 알고 있지만 여기의 상황은 매우 간단합니다. 그렇지 않습니까? ? 어쨌든, 스냅샷의 예상 크기와 보고된 크기의 차이에 대한 힌트를 본 적이 없습니다.reservations
refreservations
답변1
이제 내 질문에 답할 수 있습니다. 이곳에서 며칠 동안 답장을 받지 못해서 ZFS on Linux 메일링 리스트에도 이 질문을 올렸고 "Greek"과 "Stefan Ring"이라는 두 회원이 이 주제에 대해 설명해 주었습니다. 스레드는여기.
결론적으로:
첫 번째 이해와 달리 스냅샷의 크기는 USED
다음 스냅샷이 생성되기 전에 해당 스냅샷이 생성되었기 때문에 ZVOL에 기록된 데이터의 양을 반영하지 않습니다.
대신 데이터의 양은고유한그 스냅샷에. 즉, 스냅샷 삭제 시 확보되는 디스크 공간의 크기입니다.
이제 이것이 다음 스냅샷이 생성되기 전에 ZVOL에 추가된 데이터의 양이 아닌 이유가 분명해졌습니다. 제 예로 돌아가서, 마지막에서 두 번째 스냅샷을 찍은 후 ZVOL에 약 18GB의 공간을 추가했습니다.
하지만 스냅샷을 삭제해도 물론 18GB의 데이터는 여전히 ZVOL에 남아 있습니다. 따라서 스냅샷을 삭제해도 해당 공간이 확보되지 않습니다.
USED
대신 약 1GB(크기)만 해제됩니다. 단지 스냅샷에 고유한 공간이며 스냅샷과 해당 스냅샷 이후에 삭제되거나 변경된(그러나 추가되지 않은) 유효한 데이터를 관리하기 위해 혼합 메타데이터가 차지할 수 있습니다. 데이터를 로드합니다.
WRITTEN
스냅샷이 생성된 이후와 다음 스냅샷이 생성되기 전에 스냅샷에 기록된 데이터의 양을 확인하려면 이 속성을 사용하십시오 .
USED
와 사이의 차이점은 WRITTEN
설명서에 명확하게 설명되어 있습니다 zfs
. 설명서를 여러 번 읽었지만 이 WRITTEN
속성을 놓친 것 같습니다.