
私は 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
。以下では、800GBのファイルシステム(クォータ)があり、そのうち545GBが使用されています。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.87G が実際のファイルシステム (アクティブ データ) によって使用されていることがわかります。ただし、各スナップショットの横にある USED サイズは非常に誤解を招きやすいものです。
スナップショットの使用済み列の数字をすべて合計すると、USEDSNAPの合計にはまったく近づかないことがわかります。これは、USED値がスナップショットの使用済み量であるためです。個性的各スナップショットが保持するスペース。
例えば:
「newpool」という名前のプールがあり、そこに 1G のファイルが 2 つ (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 のファイルのうち 1 つ (fileA) を削除します。
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 - - - -
ここで、ファイルB(両方のスナップショットにある)を削除します。
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 列には、個々のスナップショットを削除した場合にどれだけのスペースを再利用できるかが表示されますが、そのスナップショットが実際にどれだけのスペースを予約しているかは表示されません。
ここまでお話ししましたが、
特定のデータセットのスナップショットを1つだけ保存する予定の場合は、zfsリスト -roスペースコマンドを実行すると、探しているものが見つかるはずです。
複数のスナップショットを同時に取得する場合、このデータは誤解を招く可能性があります。複数のスナップショットを扱う場合、USED列が何らかの意味を持つと想定して、自然に行動しないでください。また、デュスナップショット ディレクトリでは、これは適切な選択ではありません。スナップショットによって参照されている内容のみが表示され、スナップショットが実際に使用している領域は表示されないためです。
zfs のマニュアルページにはこのうちのいくつかが説明されていますが、それらの関係を示すのはあまり上手ではありません。
答え3
ZFS には直接同等のものはありません。最も近いものはプール内の空き領域で、 から取得できますzfs list
。ZFS では、スナップショットはプール全体の領域がなくなるまで大きくなります。