web-dev-qa-db-ja.com

ディレクトリはどのくらいのスペースを消費しますか?

空のディレクトリにはどのくらいのスペースが必要ですか?

WindowsおよびNTFSファイルシステムでは、「0バイト」と表示されますが、これは不可能です。

ディレクトリによって実際にどれだけ使用されていますか?ファイルシステムやオペレーティングシステムに依存しますか?

13
ShadowHero

技術的には、プロパティウィンドウに表示されるのはフォルダの内容です。空の場合、ディスクの0バイトを占有します。

あなたの質問は、フォルダー構造がファイルシステム上で占有するスペースを扱います。これは明らかにファイルシステムに依存しています。 FAT32で保存する必要があるのは、いくつかのフラグ(非表示、アーカイブ済み)と名前とパスだけです。 NTFSでは、アクセス許可などを格納する必要もあります。全体として、そのスペースはほとんど無視できます。

空のディレクトリ構造が占めるスペースは、名前とフォルダパスによって異なります。例として、すべてのフォルダをルートドライブ(たとえばC :)に配置し、26文字すべてを使用するとします。 10億の一意の名前を使用すると、log_26(1.000.000.000)=約7(6.3065)文字長のフォルダー名を使用できます。したがって、7バイト* 1.000.000.000は約7 GBの容量に相当します。

これは、構造で使用する必要があるスペース名の量のみに基づく最小値です。これから説明するように、ファイルシステムはファイル名以外の多くの情報をファイル構造に格納します。

すべてのドライブに約100万のフォルダとファイルがあるため、実際にはその価値にさえ到達しないと思います。これは非常に大まかな見積もりであることを忘れないでください。


現時点で最も使用されているファイルシステムは、(間違いなく)FAT(ファイルアロケーションテーブル)およびNTFS(新技術ファイルシステム)と見なすことができます。 [〜#〜] fat [〜#〜] Windows 95がFAT32とともにリリースされた1996年以来、使用されていることがわかっています。 NFTS(Windows)、HFS +(OSX)、ext3(Linux)など、他のより弾力性のあるファイルシステムに置き換えられましたが、ほとんどのOSで十分にサポートされているため、ハンドヘルドデバイスやメモリカード、フラッシュドライブで広く使用されていますそして何よりも、それは簡単です。

今重要なのは。 FATパーティション内のファイルとディレクトリは、それらに何も含まれていない場合でも、名前、場所、特定の属性などがあり、ディレクトリテーブルと呼ばれるゾーンに格納されます。

ディレクトリテーブルは特別なファイルです(つまり、OSと特定のアプリケーションのみが直接アクセスできるように、通常の使用からは隠されています)。これはディレクトリ(別名フォルダ)を表し、その中に格納されているファイルまたはフォルダには、テーブルに32バイトのエントリがあります。 ディレクトリテーブルはファイルであるため、1つ以上のクラスター(つまり、ディスク内に事前設定されたサイズのボックスがあり、1つのファイル(または1つのファイル)のみ)を占有します。適合)。

したがって、最近のドライブ(> 512 MB)のフォルダまたはディレクトリには、少なくとも4 KBのオーバーヘッドがあり、テーブルを格納します。 (ソース)。ただし、これは、128個の異なるファイル(4 * 1024 B/32 B = 128)を同じフォルダーに保存できることを意味し、レコードを保存するオーバーヘッドは以前と同じ4KBのままです。

最初の例に便乗すると、これは、10億個のフォルダーに32 GBのオーバーヘッドがあることを意味します。これらの32 GBのストアには、ショートネーム(8 ASCII characters))だけでなく、属性、フラグ、アクセス、作成、変更日、およびその他のレガシー属性も格納されます。

これをすべて読んだとすると、次のような疑問が生じる可能性があります。「これで問題ありませんが、Wabbajackなどの長い名前や、 e4d909c290d0fb1ca068ffaddf22cbd0、保存されていますか? "

Windows 95のMicrosoftは、ユーザーエクスペリエンスを強化するためにその機能を追加することを決定しました。 「標準に近い」システムの破壊を避けるために、彼らはVFAT(仮想FAT)と呼ばれるきちんとした回避策を使用しました。基本的に、長いファイル名をファイルに収めるために、実際のファイルレコードの前に追加のレコードが書き込まれました(以前のシステムでは見られないように、いくつかの特別な属性が付いています)。長いファイル名システムでは、最大255文字のUTF-16(Unicode)文字が許可されます (ソース)(ソース)

すべてのフォルダーが9文字になるように最初の例を変更すると、長い名前を格納するためにもう1つのレコードを書き込む必要があるため、オーバーヘッドは32 GBから64 GBに2倍になります。


NTFSに関する Wikipedia の記事によると、すべての権限はマスターファイルテーブルに格納されています。 here に示されているように、この領域はディスクデフラグツールから明らかに確認できます。

MFTレコードがフォルダーまたはファイルの両方から占めるサイズは、 here で説明されています。

ファイルとフォルダーのレコードはそれぞれ1 KBであり、MFTに格納され、その属性はMFTの割り当てられたスペースに書き込まれます。ファイル属性に加えて、各ファイルレコードには、MFT内のファイルレコードの位置に関する情報が含まれています。

ファイルの属性がそのファイルのMFTファイルレコードに収まる場合、それらは常駐属性と呼ばれます。ファイル名やタイムスタンプなどの属性は常に常駐しています。ファイルの情報量がMFTファイルレコードに収まらない場合、一部のファイル属性がnonresident非常駐属性には、ディスク領域のクラスタが1つ以上割り当てられます。非常駐属性の一部はMFTに残り、外部クラスターを指します。 NTFSは、すべての属性レコードの場所を説明する属性リスト属性を作成します。表NTFSファイル属性タイプには、現在NTFSで定義されているファイル属性がリストされています。

したがって、NTFSでは、非常に長い引数とアクセス許可のリストがない限り、フォルダは少なくとも1 KBの領域を占有します。その時点で、MFTレコードはパーティション内の追加のクラスターを占有します。そのサイズは、フォーマット方法によって異なりますが、その投稿の2GBを超えるMicrosoftでは4KBのクラスターを推奨しています。

16

実世界の例では、空きスペースを記録した後、大きなディレクトリ構造を作成し、新しい空き容量を差し引いて、使用されているスペースの量を求めました。私は、曜日ごとにディレクトリ0〜6を作成し、次に、時間内にディレクトリ0〜23を作成し、次に時間内に0〜59を作成しました。合計で10,080のディレクトリ。ディスクの使用量が6,926,336バイト変更されました。ディレクトリごとに687バイトになります。気にする場合は、1TBドライブの0.0006%にもなります(1TBを1024 ^ 4として計算した場合)。

3
andy

Windows 10で1,000,000個の空のフォルダーを作成しました。Pythonの getsize 関数によると、200540160バイトのスペースが必要でした。これは、フォルダーあたり平均200.54016バイトです。

0
Shmuel Kamensky