多くのハードリンクがあるNTFSディレクトリで使用されている実際のサイズを確認するにはどうすればよいですか?


14

Win7 NTFSボリュームでは、-link-destを正しくサポートするcwrsyncを使用して、「スナップショット」タイプのバックアップを作成しています。ので、私は持っています:

z:\backups\2010-11-28\cygdrive\c\Users\...
z:\backups\2010-12-02\cygdrive\c\Users\...

2010-12-02のコンテンツは、主に2010-11-28ディレクトリ内のファイルへのハードリンクですが、2010-12-02にのみ新しいファイルまたは変更されたファイルがいくつかあります。Linuxの場合、「du」ユーティリティは、各増分スナップショットによって取得された実際のサイズを教えてくれます。Windowsでは、explorerとcygwinの下のduはどちらもハードリンクにだまされており、2010-12-02が2010-11-28よりも少し多くのスペースを占有していることを示しています。

実際に使用されている正しいスペースを表示するWindowsユーティリティはありますか?


これに対処するツールは、/ winsxsフォルダーが非常に大きくなる理由を正確に把握するのに非常に役立ちますが、小さくすることはできますか?および
マットウィルキー

これは、通常のディスク使用に関するデファクターの質問と回答のようです。Windowsでファイルシステムの使用を視覚化するにはどうすればよいですか。
マットウィルキー

回答:


11

Sysinternals Disk Usage(またはとして知られているdu)を使用してみてください。具体的に-uand -vフラグを使用すると、一意の発生のみがカウントされ、各フォルダーの使用状況が表示されます。

私の知る限り、ファイルシステムは元のファイルとハードリンク(実際にはハードリンクのポイント)の違いを示していないため、フォルダーごとに割引することはできませんが、これを比較的行う必要があります。

テストするために、6つのファイルを含むランダムなフォルダーを作成しました。全部を複製しました。次に、最初のフォルダー内にいくつかのハードリンクとソフトリンクを作成して、最初のフォルダー内の他のファイルと、2番目のフォルダー内のいくつかのファイルも参照します。

実行du -u -v testFld結果(フォルダーの横の値はKiBにあることに注意してください):

       104  <path>\testFld\A
        54  <path>\testFld\B
       149  <path>\testFld

Totals:
Files:        12
Directories:  2
Size:         162,794 bytes
Size on disk: 162,794 bytes

実行du -u -v testFld\a結果:

104  <path>\testFld\a
...

実行du -u -v testFld\b結果:

74   <path>\testFld\b
...

不一致に気づきましたか?
Bのファイルを参照するAのシンボリックリンクは、「フル」実行中にのみAに対してカウントされ、Bは54のみを返します(ファイルが元はBにあり、Aからハードリンクされていたとしても)。Bを個別に測定する場合(または、-u一意のフラグを使用しない場合)、74の「フル」測定をカウントします。


1
おかげで、sysinternals duについては知りませんでした。cygwinだけです。どうやらcygwin duは私がしたいことをしているようで、賞金を始める前に試してみようとは思わなかった。
kbyrd

この答えは、-uフラグの機能を混乱させます。あなたが得る「完全な」措置をあなたがいる場合に使用-uフラグ。それなしでは、ハードリンクされたファイルのインスタンスを1つだけカウントします。docs.microsoft.com/en-gb/sysinternals/downloads/duでドキュメントでそう述べており、テストで検証しています。
martixy

2

PowerShell 5はオプションかもしれません。Windows 7で使用できますが、これは2015年4月のプレビュー版の Server 2012 R2でのみテストしました

PowerShell 5のファイルシステムプロバイダーには、2つの新しいプロパティがLinkTypeありTargetます。

ls taskmgr.exe | fl LinkType,Target

これは返します:

LinkType : HardLink
Target   : C:\Windows\WinSxS\amd64_microsoft-windows-advancedtaskmanager_..._6.3.9600.17..2\Taskmgr.exe

そのため、ハードリンクではないsystem32内のすべてのファイルのみを表示できます。

cd $env:SystemRoot\System32
ls -Recurse -File -force -ErrorAction SilentlyContinue | ? LinkType -ne HardLink | Measure-Object -Property Length -Sum

これは返します:

Count    : 844
Sum      : 502,486,831

これをすべてのファイルと比較できます。

ls -Recurse -File -force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum

Count    : 14092
Sum      : 2,538,256,262

2GB以上の13,000以上のファイルはハードリンクです


1

TreeSize Professional(約55ドル、30日間の試用)は、NTFSハードリンクディスク領域を区別すると主張しています。簡単なトライアルがこれを裏付けているようです。

ハードリンクサポートはすぐに有効になりません。[ツール]> [オプション]> [スキャン]に移動し、再スキャンしてからとを使用Ctrl-1Ctrl-2て[ サイズ]と[ 割り当てられたスペース] を切り替えます。割り当てられるのは実際に使用されるスペースであり、サイズは他のプログラムによって通常報告される統計です。

ハードリンクサポートを有効にするとパフォーマンスが低下します(必要な場合はシンボリックリンクとマウントも有効になります)。カラーパレットは私の好みには派手ですが、それはこのジャンルのコースには並みそうです。また、ボックスチャート領域内をクリックするときは注意してください。フォルダを展開するだけの場合、誤ってドラッグアンドドロップして誤ってフォルダを移動してしまいがちです。


1

ここでいくつかの事実を設定する必要があると思います。

すべてのファイルは実際にはディスク上の多数のバイトへのハードリンクであるため、Windowsはハードリンクを「検出」できません。

デュ・ツールは、重複を検出するが、Aは、ファイルが含まれており、BはAのみのファイルへのハードリンクを含むフォルダ場合、Aデュので、それは、あまりにも偽である同じ答えを返しますBのデュ-ファイルのサイズは、もともと来てAからですが、これらのファイルは現在Bにもあります。

これは実際には正しいです。たとえば、Aを削除した場合、そのファイルはまだBによって参照されているため、ディスク上で削除されないためです。非常にarbitrary意的で無意味です。

duなどの製品は、重複を割引しながらディレクトリをリストします。これは、すべてのファイルとハードリンクが1つのディレクトリに含まれている場合にのみ機能します。多くのフォルダリスト製品がそうしています。

結論:ハードリンクでは、「NTFSディレクトリで使用される実際のサイズ」の問題は無意味です。


1

私もこの質問についていくつかの研究をしています。これが私が発見した結果です。

NTFSのハードリンクファイルを含むフォルダーサイズは、3つの異なる意味で考慮される場合があります。

  1. すべてのハードリンクファイルのサイズを含むサイズ(WEで表示)。
  2. 現在のフォルダに関してのみの一意のファイルのサイズ。
  3. ディスク全体の観点から見た一意のファイルのサイズ。

番号2は、オプション "NTFSハードリンクの追跡"が有効になっている場合、TreeSize Professionalの[詳細]タブの[割り当て済み]列に表示されるものです。

winsxsフォルダーの例(10に対して7.5Gb):

画像

数字3の値を受け取ることは、私にとってまだ疑問です。NL_InfoプラグインでTotal Commanderを使用することで下限を取得できましたが。私が持っているのは、1つのハードリンクしか持たないファイル(一意のファイル)が占めるサイズです。特定の例では約5Gbでした。

それで、harrymcの答えを拡大するか、言い換えれば言います。


0

ln.exeを使用して、ディレクトリツリーの「実際のサイズ」を表示できます。

ln.exe --truesize z:\backups\.

その開始フォルダーの下のハードリンクのみを検出します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.