web-dev-qa-db-ja.com

ファイルサイズに向けてハードリンクを数えている?

Unix Timestampsにちなんで名付けられたディレクトリを作成し、ハードリンクシステム(rsyncで--link-dest)を使用して増分バックアップを作成するバックアップシステムがあるため、通常、最初のバックアップは非常に大きく、その後のバックアップはわずかな大きさです。

これは現在のバックアップの出力です:

root@athos:/media/awesomeness_drive# du -sh lantea_home/*
31G lantea_home/1384197192
17M lantea_home/1384205953
17M lantea_home/1384205979
17M lantea_home/1384206056
17M lantea_home/1384206195
17M lantea_home/1384207349
3.1G    lantea_home/1384207678
14M lantea_home/1384208111
14M lantea_home/1384208128
16M lantea_home/1384232401
15G lantea_home/1384275601
43M lantea_home/1384318801

すべてが正しいように見えますが、たとえば最後のディレクトリlantea_home/1384318801

root@athos:/media/awesomeness_drive# du -sh lantea_home/1384318801/
28G lantea_home/1384318801/

常にこの動作が発生しますが、2番目のduコマンドでディレクトリが28Gと見なされるのはなぜですか?

注-出力は-Pおよび-Lフラグと同じままです。

54
Dan LaManna

ハードリンクは、同じファイル(iノードで表される)への実際の参照です。 「元の」ファイルとそれを指すハードリンクにも違いはありません。両方のファイルのステータスは同じであり、bothはこのファイルへの参照です。片方を削除すると、もう片方はそのままになります。最後のハードリンクを削除するだけで、最後にファイルが削除され、ディスク容量が解放されます。

したがって、duが1つのディレクトリでのみ何を見るかを尋ねると、同じコンテンツを指すハードリンクが他の場所にあるかどうかは気にしません。単にすべてのファイルのサイズをカウントし、それらを合計します。ハードリンクのみwithin考慮されるディレクトリは複数回カウントされません。 duは賢いです(すべてのプログラムが必ずしもそうである必要はありません)。

したがって、実際には、ディレクトリAは28Gのduサイズ、ディレクトリBは29Gのサイズを持つ可能性がありますが、一緒にすると30Gしか占有せず、Aのサイズのduを要求するとそして、B、あなたはその番号を取得します。

Disc usage by several directories when hardlinks are involved.

157
Alfe

また、「-l」スイッチを使用すると、すべてのサブディレクトリのハードリンクもカウントされるため、増分デルタだけでなく、バ​​ックアップ全体の大きさを確認できます。

13
Tobias