web-dev-qa-db-ja.com

ファイルメタデータはWindowsにどのように保存されますか?

(私はWindowsを使用していますXPですが、最近のすべてのバージョンのWindowsでも同じだと思います。)

たとえば、新しいemptyテキストドキュメントを作成すると、そのプロパティでサイズが0バイトであることがわかります。 0バイトは情報なしを意味します。データなし。
それでも、ファイルには名前があり、最終アクセス、変更、作成の日付を保持できます。隠しファイルかどうか、読み取り専用かどうかなどの情報が含まれています...

すべてのメタデータはどこに保存されていますか?

13
Jeyekomon

ハードディスクにはファイルが含まれていると教えられましたが、それだけではありません。実際には、ハードドライブには、多くのシングルビットで表現される非常に大きな数字が1つ含まれています。しかし、この解釈はあなたにとってもあなたのコンピュータにとっても意味がありません。単一の大きな数を処理することはあまり一般的ではないからです(そして私は本当に巨大な数について話しているのです)。代わりに、コンピューターはそれをより小さな「ワード」(8ビット、16ビット、32ビットなど)に分割し、そのように使用します。それでも、それは単なる単語の束です(8ビットの単語、つまりバイトを想定しましょう)。

これで、そのドライブはパーティション化されました。 この答え でパーティショニングが良いアイデアである理由を説明しました:

一般的に言って、ドライブはパーティショニングなしで使用できます。ほとんどのペンドライブはそのように動作します。ただし、パーティションの使用には多くの利点があります。

  • 2つのOSを同じハードドライブに配置して、互いに干渉しないようにすることができます。それぞれがそのパーティションを論理ドライブとして扱い、指示しない限り他のものと干渉しません。
  • データを論理的に分離できます。何らかの理由で1つのパーティションが破損した場合、他のパーティションはそのままの状態に保たれます。
  • パーティションを使用する方が、複数の小さなハードドライブを使用するよりも優れています。これは、システムがより静かになり、エネルギー消費が少なくなり、サイズ変更、削除、移動などができるためです。
  • ハードドライブの一部を特別な目的に使用できます。

現在、各パーティションには独自のファイルシステムがあります。 Windowsの最新バージョンは[〜#〜] ntfs [〜#〜]を使用しますが、[〜#〜] fat [〜#〜]FAT32およびexFATは、外部メディアまたはレガシーパーティションでサポートされます。日常的に使用するLinuxのインストールでは、通常extファイルシステムが使用され、ext4が最新のものです。

ファイルシステムは、ファイルがディスク上に物理的に配置される方法を定義します。次のように考えることができます。章、ページ番号、または改行のない10000ページの本がある場合、その使用は非常に困難です。もちろん、ページ番号と章のタイトルはページの一部を占めますが、それらを使用すると、本をより簡単かつ迅速に使用できます。チャプターにジャンプしたい場合は、たとえば、42と入力します。目次でそれを検索するだけです。次に、必要な章が見つかるまで本を読み進めます。あなたのファイルは章であり、あなたのファイルシステムは本です。ファイル境界、ファイル名などのファイルシステムメタデータもスペースを占有しますが、これは比較的少量のスペースであり、処理速度を大幅に向上させます。

「章」が空の場合でも、見出しやページ番号が表示されることがありますよね?空のファイルには0バイトのデータが含まれています。メタデータはスペースを占有しますが、それはファイルの一部ではなく、ファイルシステムの一部です。そうしないと、テキストファイル内にファイル名が表示されますか?

ちなみに、それが初期のバージョンのDOSが8.3の名前しか受け入れなかった理由です。ファイル名用に予約されているスペースは非常に限られていたのです。 NTFSは、255文字の長さのファイル名を許可します[1]


コメントにもう1つWordを追加します。

以前は、PC内のいくつかのファイルを何らかの方法で破損させて、サイズが約100GBに見えるようなウイルスを使用していました。それらのそれぞれ。私の40 GBのハードディスク。だから何らかの魔法があったに違いない... :-D

sparse files と呼ばれる機能のおかげで、validファイルをハードドライブより大きくすることは完全に可能です。 Hennesは この質問 に関するコメントでこれらの優れた説明をしています:

100ページを保持できるバインダーを想像してみてください。そのバインダーを通常のファイルとして使用する場合、100ページを挿入できます。 100をすべて読み取ることができます。100に書き込むことができます。次に、疎なバインダーを想像してみてください。 「ページ1:コンテンツA」と書いた最初のページを挿入します。次に、「page 9999:content b:」と書いた2番目のページを挿入します。ページを読み込もうとするたびに、ページが存在するかどうかを確認します。そうでない場合、あなたの答えはこれは空のページです。存在する場合は、ページのコンテンツを返します。バインダーにまだ存在しないページに書き込むたびに、新しい用紙を追加します。

11
gronostaj

今日、Windows代替データストリーム(ADS)について学びました。これは、ファイルに添付される非表示のリソースフォークです。 Windows NT 3.1以降、NTFSの一部となっています。

たとえば、空のテキストファイルがあり、ファイルのプロパティタグにいくつかの概要情報を入力すると、非表示のADSファイルが作成され、テキストファイルに添付されます。 Windowsのほとんどのバージョンでは、元のファイルのサイズを報告するときにADSファイルのサイズは含まれません。

コマンドプロンプトからADSファイルを作成および表示できます。

echo "ABCDE" > test.txt:hidden.txt

hidden.txtと呼ばれるADSファイルを含むtest.txtファイルを作成します

このコマンドを使用してファイルを編集できます。

notepad test.txt:hidden.txt

こちら より詳細に説明された読みやすい記事。

7
HighTechGeek

検索を行ったところ、Stack Overflowで同様の質問がありました。

これは基本的に、ファイルが作成され、数バイトまたはハードドライブのクラスターなどを占有することを示しています。これは、ハードドライブやファイルシステムの粒度などに依存します。

彼らはここでそれについて議論します: https://stackoverflow.com/questions/4954991/are-0-bytes-files-really-0-bytes

さらなる研究のための追加リンク付き。

2
HighTechGeek

NTFSボリュームでは、この情報はメタファイルに保存されます。特に、ファイル名とタイムスタンプは$ MFTと呼ばれるメタファイルに保存されます。メタファイルは、エクスプローラやコマンドプロンプトなどの通常のWindowsメソッドではアクセスできません。

詳細については:

http://ntfs.com/ntfs-system-files.htm

http://en.wikipedia.org/wiki/NTFS

2
David Marshall