
저는 MySQL 데이터베이스를 백업하기 위해 LVM 스냅샷을 사용해 왔습니다.
FLUSH TABLES WITH READ LOCK
스냅샷이 활성화 된 lvcreate --snapshot --size 4G
동안 데이터베이스가 활성화되어 있기 때문에 snap_percent
(스냅샷을 생성한 당시 파일 시스템의 원래 상태로 델타를 추적하는 데 사용된 스냅샷 스토리지의 양)이 증가하기 시작합니다. 이는 snap_percent
매일 모니터링되며 --size
80%에 도달하면 증가됩니다.
내 질문은 다음과 같은 통계나 속성이 있는지 여부입니다.ZFS풀에 남아 있는 공간의 백분율로 스냅샷에서 소비되는 공간의 양을 확인하려면 어떻게 해야 합니까? 분명히 --size
매개변수 를 전달할 필요는 없지만 zfs snapshot
해당 스냅샷을 기반으로 한 복제본이 풀 한계에 근접했는지 여부를 어떻게 확인할 수 있습니까?
그게 말이 되기를 바라지만, 지금 읽어보니 확실히 복잡한 질문처럼 들립니다.
답변1
ZFS 스냅샷 공간은 파일 시스템의 소비에 반영됩니다. 아래에서 가장 적절한 필드를 모니터링하여 원하는 내용을 도출할 수 있습니다.
결국 파일 시스템의 "avail" 공간을 살펴보게 됩니다... "used"+"avail"이 "size"보다 작은지 확인하세요.
root@deore:~# df -h /volumes/vol1/LA_Specialty
Filesystem size used avail capacity Mounted on
vol1/LA_Specialty 800G 391G 254G 61% /volumes/vol1/LA_Specialty
zfs get all pool/filesystem
관련 속성을 표시하기 위해 아래 출력을 필터링했습니다 . 아래에는 545GB가 사용되는 800GB 파일 시스템(할당량)이 있습니다. 391GB는참조됨, 이는 실제 데이터의 크기를 의미합니다. 스냅샷에는 154GB가 사용됩니다.
root@deore:/volumes# zfs get all vol1/LA_Specialty
NAME PROPERTY VALUE SOURCE
vol1/LA_Specialty type filesystem -
vol1/LA_Specialty creation Sat Sep 24 18:44 2011 -
vol1/LA_Specialty used 545G -
vol1/LA_Specialty available 255G -
vol1/LA_Specialty referenced 391G -
vol1/LA_Specialty compressratio 2.96x -
vol1/LA_Specialty quota 800G local
vol1/LA_Specialty reservation none default
vol1/LA_Specialty recordsize 16K local
vol1/LA_Specialty mountpoint /volumes/vol1/LA_Specialty inherited from vol1
vol1/LA_Specialty usedbysnapshots 154G -
vol1/LA_Specialty usedbydataset 391G -
vol1/LA_Specialty usedbychildren 0 -
vol1/LA_Specialty usedbyrefreservation 0 -
그런 다음 스냅샷을 보면... 스냅샷의 개별 크기와 스냅샷이 참조하는 전체 데이터 크기를 볼 수 있습니다.
root@deore:/volumes# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
vol1/LA_Specialty@snap-daily-1-2013-09-07-020003 57.6G - 389G -
vol1/LA_Specialty@snap-daily-1-2013-09-08-020003 1.95G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-09-020008 3.42G - 392G -
vol1/LA_Specialty@snap-daily-1-2013-09-10-020003 3.05G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-11-020003 2.81G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-12-020004 2.65G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-13-020003 2.70G - 391G -
vol1/LA_Specialty@snap-daily-1-2013-09-14-020003 25K - 391G -
vol1/LA_Specialty@snap-daily-1-latest 25K - 391G -
그리고 du
스냅샷 디렉터리 목록은...
root@deore:/volumes/vol1/LA_Specialty/.zfs/snapshot# du -skh *
389G snap-daily-1-2013-09-07-020003
391G snap-daily-1-2013-09-08-020003
392G snap-daily-1-2013-09-09-020008
391G snap-daily-1-2013-09-10-020003
391G snap-daily-1-2013-09-11-020003
391G snap-daily-1-2013-09-12-020004
391G snap-daily-1-2013-09-13-020003
391G snap-daily-1-2013-09-14-020003
391G snap-daily-1-latest
답변2
ZFS 스냅샷에는 숨겨진 데이터가 많이 있습니다. 일반적으로 나는 당신에게 다음을 언급할 것입니다.
zfs list -ro space
다음과 유사한 출력이 표시됩니다.
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
rootpool/export/home 6.37G 11.7G 2.80G 8.87G 0 0
rootpool/export/[email protected] - 134M - - - -
rootpool/export/[email protected] - 320M - - - -
rootpool/export/[email protected] - 251M - - - -
rootpool/export/[email protected] - 1.02M - - - -
rootpool/export/[email protected] - 1.04M - - - -
rootpool/export/[email protected] - 850K - - - -
rootpool/export/[email protected] - 747K - - - -
rootpool/export/[email protected] - 326K - - - -
rootpool/export/[email protected] - 454K - - - -
rootpool/export/[email protected] - 319K - - - -
이는 이 특정 데이터 세트에서 총 11.7G를 사용하고 있으며 2.8G는 스냅에서 사용되고 8.87은 실제 파일 시스템(활성 데이터)에서 사용된다는 것을 알려줍니다. 그러나 각 스냅샷 옆에 있는 USED 크기는 매우 오해의 소지가 있습니다.
스냅샷의 사용 열에 있는 숫자를 모두 합산하면 USEDSNAP 총계 근처에도 나오지 않는다는 것을 알 수 있습니다. USED 가치가 얼마나 되는지 때문입니다.고유한각 스냅샷이 보유하는 공간입니다.
예를 들어:
"newpool"이라는 풀이 있고 여기에 2개의 1G 파일(fileA 및 fileB)이 있는 경우:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 0.00G 2.0G 0 0
이제 나는 그것을 스냅합니다:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 0.00G 2.0G 0 0
newpool@snap1 11.0G 0.0G 0.00G 2.0G 0 0
이제 1G 파일(fileA) 중 1개를 삭제합니다.
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap1 - 1.0G - - - -
이제 새 1G 파일(fileC)을 만듭니다.
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 1.00G 2.0G 0 0
newpool@snap1 - 1.0G - - - -
이제 다시 찍는다
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 1.00G 2.0G 0 0
newpool@snap1 - 1.0G - - - -
newpool@snap2 - 0.0G - - - -
이제 두 스냅샷 모두에 있는 fileB를 삭제합니다.
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 2.00G 1.0G 0 0
newpool@snap1 - 1.0G - - - -
newpool@snap2 - 0.0G - - - -
스냅샷 USED 열이 어떻게 작동했는지 확인하세요.~ 아니다변화를 반영? 이는 fileB가 두 스냅샷 모두에서 참조되고 고유하지 않기 때문에 특정 스냅샷의 USED 개수에 표시되지 않기 때문입니다. USEDSNAP 열은 해당 공간이 스냅샷에서 사용되었음을 반영하지만 이를 특정 스냅샷과 연결하지는 않습니다.
이제 snap1을 제거하려는 경우:
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap2 - 1.0G - - - -
이제 snap2는 해당 데이터가 해당 스냅샷에 고유하므로 1.0G가 사용되었음을 표시합니다.
USED 열에는 개별 스냅샷을 삭제할 경우 회수할 수 있는 공간이 얼마나 되는지 표시되지만 해당 스냅샷이 예약하고 있는 공간이 실제로 얼마나 되는지는 표시되지 않습니다.
이제 내가 그 모든 말을 했으니 -
특정 데이터 세트의 하나의 스냅샷만 보관하려는 경우zfs 목록 -ro 공간명령은 당신이 찾고있는 것을 제공해야합니다.
동시에 여러 개의 스냅샷을 생성하려는 경우 이 데이터는 오해의 소지가 있습니다. 여러 스냅샷을 처리할 때 자연스러운 일을 하지 말고 USED 열이 무엇이든 의미한다고 가정하십시오. 또한,뒤스냅샷이 실제로 사용하는 공간이 아니라 스냅샷이 참조하는 내용만 보여주기 때문에 스냅샷 디렉토리에서는 좋지 않은 선택입니다.
zfs 맨페이지에서는 이 중 일부를 다루지만 이러한 관계를 표시하는 데에는 적합하지 않습니다.
답변3
ZFS에는 직접적으로 동등한 것이 없습니다. 가장 가까운 값은 에서 얻을 수 있는 수영장의 여유 공간입니다 zfs list
. ZFS에서는 전체 풀 공간이 부족해질 때까지 스냅샷이 커질 수 있습니다.