結論
Sysinternals の Du (disk usage) は、
NTFS上での ハードリンクの参照カウント数 を考慮したうえで ディスクの使用量を算出してくれる。
経緯
- dumpfs 系 のバックアップコマンド (たとえば、mdumpfs) を使うと、NTFSのハードリンク機能を駆使し、ディスク領域を極力消費せずに、各バックアップ断面のスナップショットを取ることができる。
- たとえば、未変更のファイルに対して3回バックアップ (スナップショット) を取った場合、バックアップ結果のファイルは3つできるが、それらのディスク上の実体は共有されており、実際には ファイル1つ分のディスク領域しか消費しない。
(参照カウントが 3 のファイルが、1つ存在する状態) - しかし、Windows上の一般的なツール (エクスプローラ他) は、NTFS上のハードリンクの参照カウントを考慮しない。
(上記の3回バックアップの例の場合ならば、同じサイズのファイルがディスク上に3つとも存在し、ファイル3つ分のディスク領域を消費しているかのように報告する) - なお、本家(unix、linux環境) の
du
コマンドは、ハードリンクの参照カウントを考慮しているようである。
(参考: ハードリンクがある場合の du によるディスク消費量表示の注意 - 学習する機械、学習しない人間) - いわゆる Win32 port の
du
コマンド をいくつか試してみたが、ハードリンクの参照カウントを考慮してしているものは、ほとんどなかった。
冒頭で掲示した Sysinternals版 のdu
コマンド は、数少ない例外である。
補足
上記の 「Sysinternals版 の du
コマンド」は、「Size」と「Size on disk」(= ディスク上のサイズ) の両方をレポートしてくれるが、
「空のディレクトリ」の「Size on disk」については
1ディレクトリあたり「4,096 bytes」
とレポートしているように見える。
※「4,096 bytes」というのは、対象NTFSボリュームの クラスタサイズ (アロケーションユニットサイズ) だと思われる。
NTFSの内部構造については詳しくないのだが、空ディレクトリ1つ 4KB は大きすぎる気がする(*1) ので、別途調査予定。
*1 … MFT (Master File Table) の1レコード分である、1KB で収まるのではないか?
0 件のコメント :
コメントを投稿