フラッシュドライブを持っていますが、fdisk
から出力されるフラッシュドライブのプロパティを理解したいと思います。それを挿入してdmesg
を確認すると、/dev/sdb1
としてマウントされていることがわかりました。そこで、fdisk
を実行して、/dev/sdb
のレポートを確認しました。
mike@mike-Qosmio-X770:~$ Sudo fdisk -l
[Sudo] password for mike:
Disk /dev/sdb: 127 MB, 127926272 bytes
16 heads, 32 sectors/track, 488 cylinders, total 249856 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6b3ee723
Device Boot Start End Blocks Id System
/dev/sdb1 * 32 249854 124911+ b W95 FAT32
私の知る限り、ドライブは128MBのFAT32フォーマットのフラッシュドライブであり、パーティションは1つしかありません。それは「32」で始まります(おそらく0-31はいくつかのFTLに使用されます)。
「セクター」のサイズは512バイトで、249,856セクター(合計122MB)があると報告されています。
今、私はシリンダー、ヘッド、セクター/トラック数について混乱しています。シリンダー/ヘッドは磁気ディスクストレージタイプと関係があることを私は知っています。フラッシュデバイスに関して、これらに何か意味はありますか?それとも、これはfdisk
からの「残された」情報であり、非磁気記憶媒体には実際には意味がありませんか?後者の場合、なぜ値を与えるのですか?
2番目の質問、ブロックの「サイズ」は何ですか? :
Blocks
124911+
そして、ブロックカウント後の+
の意味は何ですか?
3次元トラック(すべてのディスクで同じトラック)はシリンダーと呼ばれます。各トラックは63のセクターに分かれています。各セクターには512バイトのデータが含まれています。したがって、パーティションテーブルのブロックサイズは64ヘッド* 63セクター* 512バイトer ...を1024で割ったものです... :-)
ソース: fdiskでパーティション化
Linuxがブロックサイズを参照するときはいつでも、ほとんどの場合1024バイトです-Linuxは1024バイトを使用します一部のファイルシステムは他の粒度を使用するため(たとえば、通常サイズのext3ファイルシステムでは、ファイルシステムのブロックサイズは通常4096です)、バッファキャッシュおよびすべてのプリミティブユニットとしてのブロックは、ファイルシステム固有のドライバにのみ存在します。バイト)。ただし、ファイルシステムのブロックサイズを確認することはほとんどありません。実際にそれを確認するほとんどの方法は、カーネルハッカーであるか、dumpe2fsのようなプログラムを実行することです。
これに伴う問題は、覚えておく必要のある4つの異なるユニットがあることです。さらに悪いことに、これらのユニットのうちの2つは同じ名前を持っています。これらは異なる単位です:
- ハードウェアブロックサイズ、「セクターサイズ」
- ファイルシステムのブロックサイズ、「ブロックサイズ」
- カーネルバッファキャッシュのブロックサイズ、「ブロックサイズ」
- パーティションテーブルのブロックサイズ、「シリンダーサイズ」
ファイルシステムのブロックサイズとバッファキャッシュのブロックサイズを区別するために、FATの用語に従い、ファイルシステムのブロックサイズに「クラスタサイズ」を使用します。
セクターサイズは、ハードウェアが処理する単位です。これはさまざまなハードウェアタイプの範囲ですが、ほとんどのPCスタイルのハードウェア(フロッピー、IDEディスクなど)は512バイトのセクターを使用します。
クラスタサイズは、ファイルシステムが使用するアロケーションユニットであり、断片化の原因になります。これについてはご存知だと思います。中程度のサイズのext3ファイルシステムでは、これは通常4096バイトですが、
dumpe2fs
で確認できます。これらは通常「ブロック」とも呼ばれることを覚えておいてください。ここではそれらをクラスターと呼んでいます。クラスタサイズは、プログラムがファイルの実際のディスク使用量を計算できるようにするために、統計バッファのst_blksize
に返されるものです。ブロックサイズは、カーネルがストレージデバイスから読み取られたセクターをキャッシュするときに内部的に使用するバッファーのサイズです(したがって、「ブロックデバイス」という名前が付けられています)。これはカーネル内の最も原始的な形式のストレージであるため、すべてのファイルシステムクラスターサイズはこれの倍数である必要があります。このブロックサイズは、ほとんどの場合、ユーザースペースプログラムによって参照されるものでもあります。たとえば、-hまたは-Hオプションを指定せずに
du
を実行すると、ファイルが占めるこれらのブロックの数が返されます。df
はこれらのブロックのサイズも報告し、fdisk -l
出力の「Blocks」列はこのタイプであるなどです。これは、最も一般的に「ブロック」と呼ばれるものです。 2つのディスクセクターが各ブロックに収まります。シリンダーサイズは、パーティションテーブルとBIOSでのみ使用されます(BIOSはLinuxでは使用されません)。
ソース: Linuxディスクブロックサイズ...助けてください
最初の32セクターに関する質問に答えると、フラッシュドライブはFATフォーマットのデバイスであり、FATファイルシステムの定義を見ると、FATファイルシステムは4つの異なるセクションで構成されていることがわかります。
a)予約セクター;
b)ファイルアロケーションテーブル(FAT)リージョン。
c)ルートディレクトリリージョン、および;
d)データ領域。
最初にある予約済みセクターは、(この場合)セクター0-31です:
最初の予約済みセクター(論理セクター0)は、ブートセクター(別名ボリュームブートレコード(VBR))です。これには、BIOSパラメータブロックと呼ばれる領域(いくつかの基本的なファイルシステム情報、特にそのタイプ、および他のセクションの場所へのポインタが含まれます)が含まれ、通常はオペレーティングシステムのブートローダーコード。
ブートセクタからの重要な情報は、DOSおよびOS/2のドライブパラメータブロック(DPB)と呼ばれるオペレーティングシステム構造を介してアクセスできます。
予約済みセクターの総数は、ブートセクター内のフィールドで示され、FAT32ファイルシステムでは通常32です。
FAT32ファイルシステムの場合、予約済みセクターには、論理セクター1のファイルシステム情報セクターと論理セクターのバックアップブートセクターが含まれます。 6.6。
他の多くのベンダーは、bootstrapローダーに単一セクターのセットアップ(論理セクター0のみ)を採用し続けていますが、Microsoftのブートセクターコードは、導入以来、論理セクター0および2に生成されるように成長しています。 FAT32の場合、論理セクター0は論理セクター2のサブルーチンに依存します。バックアップブートセクター領域は、3つの論理セクター6、7、および8で構成されます。場合によっては、Microsoftは予約セクター領域のセクター12も使用します。拡張ブートローダーの場合。
FATリージョンはセクター32になります:
これには通常、冗長性チェックのためにファイルアロケーションテーブルの2つのコピー(異なる場合があります)が含まれますが、ディスク修復ユーティリティによっても使用されることはめったにありません。
これらはデータ領域のマップであり、ファイルとディレクトリで使用されているクラスターを示しています。 FAT12およびFAT16では、予約済みセクターの直後に続きます。
通常、追加のコピーは書き込み時に緊密に同期され、読み取り時に最初のFATでエラーが発生した場合にのみ使用されます。 FAT32では、デフォルトの動作から切り替えて、診断目的で使用できるFATから1つのFATを選択することができます。
マップの最初の2つのクラスター(クラスター0と1)には、特別な値が含まれています。
ルートディレクトリ領域:
これは、ルートディレクトリにあるファイルとディレクトリに関する情報を格納するディレクトリテーブルです。これはFAT12およびFAT16でのみ使用され、このボリュームの作成時に事前に割り当てられた固定の最大サイズをルートディレクトリに課します。 FAT32は、ルートディレクトリをファイルやその他のディレクトリとともにデータ領域に格納するため、このような制約なしにルートディレクトリを拡張できます。したがって、FAT32の場合、データ領域はここから始まります。
データ領域:
これは、実際のファイルとディレクトリのデータが保存され、パーティションの大部分を占める場所です。従来、データ領域の未使用部分は、IBM互換機でのフォーマット中にINT 1Ehのディスクパラメータテーブル(DPT)に従って、0xF6のフィラー値で初期化されますが、Atariポートフォリオでも使用されます。 8インチCP/Mフロッピーは通常、0xE5の値で事前フォーマットされています。 Digital Researchにより、この値はAtariST形式のフロッピーでも使用されました。アムストラッドは代わりに0xF4を使用しました。一部の最新のフォーマッタは、値が0x00のハードディスクをワイプしますが、プログラムされていないフラッシュブロックのデフォルト値である値0xFFは、摩耗を減らすためにフラッシュディスクで使用されます。後者の値は通常、ROMディスクでも使用されます(一部の高度なフォーマットツールでは、フォーマットフィラーバイトを構成できます)。
FAT内のファイルのチェーンにリンクを追加するだけで、ファイルとサブディレクトリのサイズを任意に増やすことができます(空きクラスターがある限り)。ただし、ファイルはクラスター単位で割り当てられるため、1KiBファイルが32KiBクラスターに存在する場合、31KiBが無駄になることに注意してください。
FAT32は通常、クラスター番号2のルートディレクトリテーブルを開始します。データ領域の最初のクラスターです。
セクター1〜31は、ブート情報とパーティションテーブル情報用に予約されていると思います。パーティション/ dev/sdb1は、ブロック/セクター32から始まり、249854に移動します。これは、物理ディスク上の論理パーティションです。
124911+は、32から249854までのブロック数を提供します。
ディスクジオメトリについては、ここにman fdsik
それについて言う:
可能であれば、fdiskはディスクジオメトリを自動的に取得します。これは必ずしも物理ディスクジオメトリではありません(実際、最近のディスクには物理ジオメトリのようなものはなく、単純なCylinders/Heads/Sectors形式で記述できるものではありません)が、MS-DOSのディスクジオメトリです。パーティションテーブルに使用します。
通常、デフォルトではすべてうまくいき、Linuxがディスク上の唯一のシステムであれば問題はありません。ただし、ディスクを他のオペレーティングシステムと共有する必要がある場合は、別のオペレーティングシステムのfdiskに少なくとも1つのパーティションを作成させることをお勧めします。 Linuxが起動すると、パーティションテーブルを調べて、他のシステムとの良好な連携に必要な(偽の)ジオメトリを推測しようとします。