数週間前、データドライブの古いバックアップを慎重に削除していました。古いバックアップとライブコピーの間で重複ファイルチェックを行い、古いコピーをごみ箱に削除しました。予想どおり順調に進んでいたのですが、突然何も削除できなくなりました。ファイルを削除しようとすると、どれでも古いバックアップからファイルを復元すると失敗します。
ごみ箱を調べてみると、単にファイルが多すぎるゴミ箱に捨てる。サイズ、 しかし番号ファイルの数。状況に関するいくつかの事実を以下に示します。
- これはWindows XPシステムです
- 古いバックアップのボリュームはFAT32です
- 古いバックアップのボリュームには302MBの空き容量がありました
- 問題は、ビンに31,594個のファイルがあったときに発生した。
- リサイクルされたファイルは236MB使用されました
- ファイル
INFO2
(リサイクルされたファイルの元のファイル名を追跡する)は24MBを超えています - ファイルを1つでも削除しようとしても機能しません大きさに関係なく
- ごみ箱はすべてのドライブで制限がないように設定されています
調べてみたのですが、私が見つけられる最も近いものの制限に関する情報ですサイズごみ箱については何も書かれていないファイル数。
これについて聞いたことある人いますか?制限があるかどうか確認できる人はいますか?幾つかファイルを保存できますか?
答え1
FAT32 ディレクトリには 65,536 個のディレクトリ エントリを含めることができます。
各ファイルとサブディレクトリには、名前の長さに応じて 2 ~ 13 個のエントリが含まれます。
したがって、最も楽観的な状況では、すべてのファイル名が 8.3 の範囲であれば、ごみ箱には 65,536 / 2 = 32768 個のファイルとディレクトリを保存できます。(短い名前)
31594 個のファイルと 53 個のディレクトリが制限に達したようです。
ファイル名が長いため、2 つ以上のエントリを必要とするファイルがいくつかある可能性があります。
編集:
FAT32 仕様はここから入手できます:
http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx
ディレクトリ構造や、長いファイル名 (LFN) がディレクトリに格納される方法など、あらゆる詳細が説明されています。基本的に、ファイル名の短いバージョン (8.3) を常に保持するディレクトリ エントリが 1 つあります。また、Windows では長いファイル名 (LFN) の大文字と小文字を区別する必要があるため、LFN 用に別のディレクトリ エントリ (13 文字を超える場合は複数) が必要です。
アクセスの局所性と透明性の目標を達成するために、長いディレクトリ エントリは、特別な属性を持つ短いディレクトリ エントリとして定義されます。
編集#2:
Windows XP と FAT32 ドライブ (ごみ箱を最大に設定) を搭載した VM でいくつかテストを行いました。
ディレクトリ内にdata
サブディレクトリを作成し、test
その後このバッチファイルを実行します。
@echo off
if "%1"=="####" goto %1
for %%a in (0 1 2 3 4 5 6 7 8 9 A B C D E F) do call %0 #%1 %2 %3 %4 %%a
goto EOF
:####
echo %2%3%4%5
echo test > test\%2%3%4%5
:EOF
結果は 65534 個のファイル (短い名前のみ) になります。予想どおり、 2 つのディレクトリ エントリ (および)があるため、最後の 2 つのファイル (FFFE
および) を追加できませんでした。したがって、および は 2 つのエントリのみを取得します。これは後で知っておくと便利です)FFFF
.
..
.
..
次に、45000 個以上のファイルを選択し、エクスプローラーで削除しました
(削除する前に情報を収集するのに少し時間がかかりました :)
ごみ箱内のファイル名はDe1
、De2
などであるため、これらは長いファイル名です (大文字と小文字が混在するため)。エクスプローラーは、32765 個のファイルを削除した後にエラーを返しました。
32767個のファイルと2つのディレクトリがdir /a/x
できました。32765
個のユーザーファイル(LFN)、INFO2
およびdesktop.ini
(どちらも LFN なし)。
(32765 * 2) = 65530 + 2 (LFNなし) + 2ディレクトリエントリ = 65534
うーん、まだ 2 つ足りない ;)
65534 では、さらに 1 (LFN 付き) を追加できるはずです。したがって、Windows では一時ファイル用の追加の空きエントリが必要になる可能性があると思います。
しかし、ご覧の通り制限は65530ディレクトリエントリです各ファイルは2を占めます。
(つまり32765 ファイル結果のファイル名は大文字と小文字が混在するためそしてさらに拡張子が 3 より大きい場合)。
これをテストしたところ、ファイル名はすべてDe1
、De2
などでした (元のファイルはすべて拡張子なし)。ファイル名には拡張子があります。拡張子が長い場合 (>3)、Windows は拡張子をごみ箱に保存するため、より多くのエントリが必要になる可能性があります。
しかし、(元の)ファイル名は .dmg に保存されるはずなので、Microsoft がごみ箱に短い名前だけを保存しないのは実に奇妙ですINFO2
。
編集#3:
Windowsの削除メカニズムを確認しました必要ありません追加のディレクトリエントリ。
ごみ箱がいっぱいになったxcopy e:\recycled\*.* e:\test\ /e/s/h
状態で、ごみ箱内のすべてのファイル (32767 個) をテスト ディレクトリにコピーしました。
De_test1.txt
に 1 つのファイル (LFN)を作成することはできましたe:\test
。作成中にDe_test2.txt
エラーが発生しました。
したがって、「Windows 削除」ではさらに 1 つの (LFN) ファイルを作成するのに十分なはずですが、内部的な問題によりそれができません。
だから通常のフォルダ制限は65536 -2で.
、 = 65534エントリ です..
。
ごみ箱.
65536 -2および..
および -2ですdesktop.ini
。INFO2
そして-2 temp.file (?) = 65530 エントリ
で、65530 エントリの場合、最大 32765 ファイルになります (そして少ない拡張子が 3 より大きい場合)。