スナップショットが作成された後に変更されたデータよりはるかに少ないスペースを占めるのはなぜですか?

スナップショットが作成された後に変更されたデータよりはるかに少ないスペースを占めるのはなぜですか?

しばらくZFSを使用してきましたが、時々ZFSの特定の側面を理解していないことがあります。現在、私はZFSスナップショットがディスクスペースをどのように占めているのか、そしてそのスペースが予想よりはるかに小さい理由を理解しようとしています。

私の質問は、例えば、最もよく説明されています。仮想マシンが実行中です。非圧縮ZVOLcompression=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          -       -

今まではそんなに良くなった。気になる点は次のとおりです。

たとえば、2番目の最後のスナップショットを撮った後、18 GB実行中のVMに約2つの新しいデータをコピーしました。しかし、そのスナップショットのサイズUSED1.08 GB。ただし、もちろん、ファイルシステムには、報告されたスナップショットサイズであるデータセット/ZVOL以降の変更を記録するためのスペースが必要ですUSED(間違った場合は修正してください)。

2番目にもっと極端な例として、このVMはスナップショットを作成してから約7時間実行されました@T-2021-04-25-14-27-30。私はその間、仮想マシンでかなりのギガバイトのデータが変更されたと確信しています。ただし、USEDスナップショットのサイズは均一であることが知られています0

スナップショットを撮った後、実際にどれだけのデータが変更されたかを確認する奇妙な方法が見つかりました。次のコマンドライン(最初の行のコマンド、次の2行の出力)などの操作を実行して、スナップショット転送を「シミュレート」できます。

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ここで説明するには長すぎます)

ここでは、2番目のスナップショットの増分に基づいて最後のスナップショットを送信するのにおよそかかることがわかります。これは、それぞれスナップショットの後、スナップショットの前に仮想18 GBマシンに変更または追加されたデータの量とほぼ正確に一致します。撮った。つまり、ZFSは2番目のスナップショットと最後のスナップショットの間にどれだけのデータが変更されたかを知っていますが、2番目のスナップショットはまだ約の代わりに値を表示します。@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」という2人のメンバーがこのトピックについて説明してくれました。スレッドはここ

結論として:

最初の理解とは異なり、スナップショットのサイズは、次のスナップショットがUSED作成される前にそのスナップショットが作成されたため、ZVOLに書き込まれたデータの量を反映しません。

代わりに、データ量はユニークそのスナップショットに。つまり、スナップショットを削除したときに確保されるディスク領域のサイズです。

これで、次のスナップショットが作成される前にZVOLに追加されたデータ量ではない理由が明らかになりました。私の例に戻り、最後から2番目のスナップショットを撮った後、ZVOLに約18GBのスペースを追加しました。

しかし、スナップショットを削除しても、もちろん18GBのデータはまだZVOLに残ります。したがって、スナップショットを削除してもその領域は解放されません。

USED代わりに、約1GB(サイズ)だけが解放されます。これはスナップショットに固有のスペースであり、スナップショットとそのスナップショットの後に削除または変更された(しかし追加されていない)有効なデータを管理するために混合メタデータが占有することがあります。データをロードします。

WRITTENスナップショットが作成されてから次のスナップショットが作成される前に、スナップショットに書き込まれたデータの量を確認するには、このプロパティを使用します。

USEDとの違いはマニュアルWRITTENで明確に説明されていますzfs。ドキュメントを何度も読みましたが、このWRITTENプロパティを見逃したようです。

おすすめ記事