ハードリンクがある場合の du によるディスク消費量表示の注意

ハードリンクと du のはなし。

pdumpfs とバックアップのディスク消費量

バックアップスクリプト pdumpfs は、ハードリンクを利用して、世代管理を効率的に行なっている。

pdumpfs はバックアップ先ディレクトリに「年/月/日」の形式でス ナップショットを保存します。初回のみバックアップ対象ディレクトリ全体をコピーして、2日目以降は差分でバックアップしていき ます。ディスクの消費量を節約するために、更新されなかったファ イルは前日のスナップショットのファイルへのハードリンクとして 記録されます。

pdumpfs: a daily backup system similar to Plan9's dumpfs

ここで、バックアップ先の各世代別ディレクトリのディスク消費量を du で調べたいとき、

  • 「差分(ハードリンクを除いた、新規ファイルのディスク消費量の合計)」
  • 「合計(ハードリンクを含めた、ディスク消費量の合計)」

のどちらを知りたいかが重要になる。

du の利用とハードリンク

du のオプション -l を指定すれば、「あるファイルが(ハードリンクとして)既に集計されている場合を含め全てのファイルの使用量を集計する」ことができる。

2010年の8月の各日のディスク消費量(差分または合計)を知りたい場合、cd で「バックアップ先ディレクトリ/2010/08」に移動し、

du -hs *
差分消費量(各日のバックアップ時点における、前日のバックアップ時点から新たに作られたファイルのディスク消費量の合計)
du -lhs *
合計消費量(各日のバックアップ時点に存在したファイルのディスク消費量の合計)

としてやればよい。

注意

ただし、差分消費量の表示は、du のしくみ上、最初に消費量を計算したディレクトリは「合計消費量」の表示になることに注意。以下の実行例を参照。

[/opt/backup/2010/08] # ls
01/  03/  05/  07/  09/  11/  13/  15/  17/  19/  21/  23/  25/  27/  29/
02/  04/  06/  08/  10/  12/  14/  16/  18/  20/  22/  24/  26/  28/
[/opt/backup/2010/08] # du -hs 01 02 03                        
21G     01
38M     02
36M     03
[/opt/backup/2010/08] # du -hs 02 03 04                        
21G     02
36M     03
55M     04
[/opt/backup/2010/08] # du -hs 03 04 05                        
21G     03
55M     04
76M     05

また、「合計消費量」は、バックアップ元に同一データへのハードリンクが複数存在する場合は、ディスク消費量の合計は実体よりも多く計算される。以下の例を参照。

$ ls -l   # h-aaa.txt は aaa.txt へのハードリンク
合計 16K
-rw-r--r-- 2 nuuu users 4 2010-08-29 15:09 aaa.txt
-rw-r--r-- 1 nuuu users 4 2010-08-29 15:10 bbb.txt
-rw-r--r-- 1 nuuu users 4 2010-08-29 15:10 ccc.txt
-rw-r--r-- 2 nuuu users 4 2010-08-29 15:09 h-aaa.txt
$ du -chs *  # ディスク消費量
4.0K    aaa.txt
4.0K    bbb.txt
4.0K    ccc.txt
12K     合計
$ du -chls *  # ハードリンクの分も含めたディスク消費量(実態より多い)
4.0K    aaa.txt
4.0K    bbb.txt
4.0K    ccc.txt
4.0K    h-aaa.txt
16K     合計