4

オペレーティング システムは、パーティションが使用しているファイル システムをどのように認識しますか? つまり、FAT16/32、NTFS、ext2/3 などはどのように区別されるのでしょうか。

4

7 に答える 7

4

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);    
}

ただし、これは、実行中のオペレーティング システムによってファイル システムが「認識」され、「マウント可能」である場合にのみ機能します。

于 2008-12-19T09:34:34.487 に答える
2

ハードウェアの種類に応じて、いくつかの方法があります。

ハードディスクには、マスター ブート レコードとそれに続くパーティション テーブルがあります。PTには、このドライブのパーティションのリストが含まれています。そのリストの各エントリには、(とりわけ)パーティションのファイル システムを指定する数値システム IDフィールドが含まれています。

フロッピー ディスクとほとんどの USB スティックには PT がありません。ここでは、パーティション自体を調べる必要があります。最初のパーティション セクタ (ブート セクタと呼ばれる) には、通常、PT のシステム ID とはまったく異なる形式のシステム ID が含まれています。また、セクタ内の ID の場所は、ファイル システムによって異なる場合があります。

于 2008-12-19T09:58:26.873 に答える
2

すべてのファイルシステムには、「スーパーブロック」と呼ばれるヘッダー情報があります。スーパーブロックには、ファイルシステムの種類に関するマジック ナンバーやその他の情報が含まれています。

MBR パーティション テーブルには、パーティション タイプを表す 8 ビット値も格納されます。

于 2008-12-19T09:24:15.833 に答える
1

まず、パーティション テーブルには、パーティションの種類を指定するバイトがあります。第 2 に、すべてのパーティションには異なるヘッダーと構造があるため、少し分析すればかなり正確に判断できます。

于 2008-12-19T09:23:14.480 に答える
1

MBRがあるとすると、4 つのプライマリ パーティションに関する詳細は 0x01BE にあります。パーティションを記述する 16 バイトの 1 つはタイプ識別子です。

ID 0x06 はfat16、 0x0B は FAT32 、 0x07 はNTFS、 0x82 は Linux パーティションです。

それを超えて、ファイルシステムには、検出可能なパーティション内の特定の場所に構造があります。

于 2008-12-19T09:26:13.413 に答える
1

ファイルシステムのセットアップやマウントを処理する 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 ベースのシステムをセットアップする場合、同様のツールを使用してファイルシステムを検出します。

于 2012-10-10T07:13:19.563 に答える
0

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

于 2008-12-19T09:25:51.790 に答える