オペレーティング システムは、パーティションが使用しているファイル システムをどのように認識しますか? つまり、FAT16/32、NTFS、ext2/3 などはどのように区別されるのでしょうか。
7 に答える
Windows で Win32 API を使用している場合は、GetVolumeInformation ( http://msdn.microsoft.com/en-us/library/aa364993.aspx ) を呼び出して、マウントされた特定のボリュームに存在するファイル システムの種類を確認できます。
たとえば、D: に存在するファイル システムを検出しようとしている場合は、次のように呼び出すことができます。
WCHAR FSType[512];
if (GetVolumeInformationW(L"D:\\", NULL, 0, NULL, NULL, NULL, FSType, ARRAYSIZE(FSType))) {
wprintf(L"FS type = %s\n", FSType);
}
ただし、これは、実行中のオペレーティング システムによってファイル システムが「認識」され、「マウント可能」である場合にのみ機能します。
ハードウェアの種類に応じて、いくつかの方法があります。
ハードディスクには、マスター ブート レコードとそれに続くパーティション テーブルがあります。PTには、このドライブのパーティションのリストが含まれています。そのリストの各エントリには、(とりわけ)パーティションのファイル システムを指定する数値システム IDフィールドが含まれています。
フロッピー ディスクとほとんどの USB スティックには PT がありません。ここでは、パーティション自体を調べる必要があります。最初のパーティション セクタ (ブート セクタと呼ばれる) には、通常、PT のシステム ID とはまったく異なる形式のシステム ID が含まれています。また、セクタ内の ID の場所は、ファイル システムによって異なる場合があります。
すべてのファイルシステムには、「スーパーブロック」と呼ばれるヘッダー情報があります。スーパーブロックには、ファイルシステムの種類に関するマジック ナンバーやその他の情報が含まれています。
MBR パーティション テーブルには、パーティション タイプを表す 8 ビット値も格納されます。
まず、パーティション テーブルには、パーティションの種類を指定するバイトがあります。第 2 に、すべてのパーティションには異なるヘッダーと構造があるため、少し分析すればかなり正確に判断できます。
ファイルシステムのセットアップやマウントを処理する OS ツールは、さまざまなヒューリスティックを使用してファイルシステムを検出しようとします (機能を探すなど)。たとえば、マウントするパーティションのファイルシステム タイプが「マウント」ツールに通知されない場合、「man」ページに記載されているとおりに実行されます。
If no -t option is given, or if the auto type is specified, mount will
try to guess the desired type. Mount uses the blkid library for guessing
the filesystem type; if that does not turn up anything that looks familiar,
mount will try to read the file /etc/filesystems, or, if that does
not exist, /proc/filesystems. All of the filesystem types listed there
will be tried, except for those that are labeled "nodev" (e.g., devpts,
proc and nfs). If /etc/filesystems ends in a line with a single * only,
mount will read /proc/filesystems afterwards.
blkid ライブラリと 'disktype' ツールは、ディスク ブロック デバイス (/dev/sda など) またはパーティション ブロック デバイス (/dev/sda1 など) を指定すると、ヒューリスティックと知識に基づいた推測を使用して、その上に何が存在するかを判断します。デバイス。非常に便利なツールです。特に、ディスクがなく仮想パーティションしかない xen 環境では、マスター ブート レコードを照会することはできません。
Ubuntu のような新しい Linux ベースのシステムをセットアップする場合、同様のツールを使用してファイルシステムを検出します。
Linux では、ファイルシステムをマウントするときに -t ext3/ext3 などを渡すことができます。/etc/fstab (または同等のもの) を見ると、各ドライブの fs タイプがリストされている可能性があります。
次に、それを自動的に行うために、スーパーブロック/同等のものがあります(Windowsのタイプはそれを別のものと呼んでいると思います)...
これを参照してください:
スーパーブロック
各ファイル システムは異なり、ext2、ext3 などのタイプがあります。さらに、各ファイル システムには、5 GB、10 GB などのサイズと、マウント ステータスなどのステータスがあります。つまり、各ファイル システムには、次のようなファイル システムに関する情報を含むスーパーブロックがあります。
* File system type * Size * Status * Information about other metadata structures
出典:
http://www.cyberciti.biz/tips/understanding-unixlinux-filesystem-superblock.html