ディスク使用量に対するフォルダの一意の貢献

ディスク使用量に対するフォルダの一意の貢献

毎日のスナップショットフォルダを含むバックアップがあります。スペースを節約するために、異なるスナップショットにある同じファイルは、ハードリンク(rsyncで作成)を介して重複排除されます。

スペースが不足している場合の1つのオプションは、古いスナップショットを削除することです。ただし、ハードリンクのため、特定のスナップショットを削除して取得できるスペースを計算することは困難です。

私が考えることができる1つのオプションは、du -sまずすべてのスナップショットフォルダに使用し、削除したフォルダを除くすべてのフォルダに使用することです。その違いにより、期待される確保空間を得ることができる。ただし、これは非常に面倒で、削除する正しいスナップショットを見つけようと繰り返し実行する必要があります。

より簡単な方法がありますか?


答えを心配して悩んだ終わりにスティーブン・チャジェラスそしてドロバート、私の質問が十分に正確ではないことに気づきました。より正確な試みは次のとおりです。

他のスナップショットのファイルと部分的に同じ(ハードリンク)保存されたファイルを含む一連のディレクトリ(「スナップショット」)があります。私は、スナップショットのリストとその中のファイルが占める使用されている各ディスクストレージの量を提供しますが、そのストレージが他のスナップショットのファイルでも使用されないようにするソリューションを探しています。各スナップショットにハードリンクが存在する可能性を許可したいと思います。

スペースが足りなくなったときにリストを見て、どのスナップショットを削除するかを決めることができるというアイデアです。これは、削除によって取得されたストレージスペースとスナップショット値(期間など)の間の妥協です。

ベストアンサー1

GNUを使用して手動で実行できますfind

find snapshot-dir -type d -printf '1 %b\n' -o -printf '%n %b %i\n' |
   awk '$1 == 1 || ++c[$3] == $1 {t+=$2;delete c[$3]}
   END{print t*512}'

スナップショットディレクトリで見つかったすべてのリンクを見つけた後、リンク数がゼロになるファイルのディスク使用量を計算します。

find印刷:

  • 1 <disk-usage>ディレクトリ用
  • <link-count> <disk-usage> <inode-number>他の種類のファイルの場合。

実際にはそうではなく、エントリが原因で発生し、そのエントリはリストされず、ディレクトリには通常他のハードリンクがないため、ディレクトリ内のリンクの数は常に1であると仮定し..ますfind

この出力でawkリンク数が 1 の項目のディスク使用量とその項目が表示された回数<link-count>の inode を計算します (つまり、現在ディレクトリにすべてのハードリンクがある項目なのでリンク) - 削除された後にディレクトリツリーのスペースが 1 つに回収されます。

合計)スナップショット)を使用することもできますfind snapshot-dir1 snapshot-dir2

スナップショットディレクトリを削除するたびに節約されるスペースの量(累積方法)を知りたい場合は、次のことができます。

find snapshot-dir* \( -path '*/*' -o -printf "%p:\n" \) \
  -type d -printf '1 %b\n' -o -printf '%n %b %i\n' |
   awk '/:$/ {if (NR>1) print t*512; printf "%s ", $0; next}
        $1 == 1 || ++c[$3] == $1 {t+=$2;delete c[$3]}
        END{print t*512}'

スナップショットリストを語彙順に処理します。別の順序で処理する場合は、最後の番号(すべてのスナップショットが削除された場合)を除いて他の番号が付与されることがあります。

数字を読みやすくするを参照してくださいnumfmt

すべてのファイルが同じファイルシステムにあるとします。そうでない場合は、次のよう%iに置き換えることができます(すべて同じファイルシステムにない場合は%D:%i、とにかく削除できないマウントポイントがあることを意味します)。

おすすめ記事