ブロックのサイズ

ブロックのサイズ

私はフラッシュドライブを持っていて、から出力されるそのプロパティを理解したいですfdisk。それを挿入してチェックしたところ、次dmesgのようにマウントされていることがわかりました。そこで、実行して何が報告されているかを確認しました。/dev/sdb1fdisk/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」から始まります (おそらく、FTL の一部では 0 ~ 31 が使用されています)。

「セクター」のサイズは 512 バイトで、セクターは 249,856 個 (合計 122 MB) あります。

シリンダ、ヘッド、セクター/トラック数について混乱しています。シリンダ/ヘッドは磁気ディスク ストレージ タイプに関係していることは知っています。フラッシュ デバイスの場合、これらに意味はあるのでしょうか。それとも、これは単に「残った」情報であり、fdisk非磁気ストレージ メディアにはまったく意味がないのでしょうか。後者の場合、なぜ値を指定するのでしょうか。

2 番目の質問、ブロックの「サイズ」とは何ですか? :

Blocks
 124911+

+ブロックカウント後の意味は何ですか?

答え1

ブロックのサイズ

3 次元トラック (すべてのディスク上の同じトラック) はシリンダと呼ばれます。各トラックは 63 のセクターに分割されます。各セクターには 512 バイトのデータが含まれます。したがって、パーティション テーブルのブロック サイズは、64 ヘッド * 63 セクター * 512 バイト (つまり 1024 で割った値) になります。:-)

ソース:fdisk によるパーティション分割

Linuxがブロックサイズについて言及するときは、ほとんどの場合1024バイトです。- Linux は、バッファ キャッシュなどすべての基本単位として 1024 バイトのブロックを使用します。ファイルシステム固有のドライバーでは、一部のファイルシステムが他の粒度を使用しているため、これが使用されないのは例外です (たとえば、通常サイズの ext3 ファイルシステムでは、ファイルシステムのブロック サイズは通常 4096 バイトです)。ただし、ファイルシステムのブロック サイズを確認する機会はほとんどありません。実際に確認できるのは、カーネル ハッカーになるか、dumpe2fs などのプログラムを実行する場合がほとんどです。

これの問題は、覚えておかなければならない 4 つの異なる単位があることです。さらに悪いことに、これらの単位のうち 2 つは同じ名前を持っています。これらは異なる単位です。

  1. ハードウェア ブロック サイズ、「セクター サイズ」
  2. ファイルシステムのブロックサイズ、「ブロックサイズ」
  3. カーネル バッファ キャッシュ ブロック サイズ、「ブロック サイズ」
  4. パーティション テーブル ブロック サイズ、「シリンダ サイズ」

ファイルシステム ブロック サイズとバッファ キャッシュ ブロック サイズを区別するために、FAT の用語に従い、ファイルシステム ブロック サイズに「クラスター サイズ」を使用します。

セクター サイズは、ハードウェアが処理する単位です。これはハードウェアの種類によって異なりますが、ほとんどの PC スタイルのハードウェア (フロッピー、IDE ディスクなど) では 512 バイトのセクターが使用されます。

クラスタサイズはファイルシステムが使用する割り当て単位であり、断片化の原因となります。これはご存じだと思います。中程度のサイズの ext3 ファイルシステムでは、これは通常 4096 バイトですが、 で確認できますdumpe2fs。これらは通常「ブロック「私はそれらをクラスターここで、クラスター サイズはst_blksize、プログラムがファイルの実際のディスク使用量を計算できるようにするために、統計バッファーに返されるものです。

ブロック サイズは、カーネルがストレージ デバイスから読み取ったセクターをキャッシュするときに内部的に使用するバッファーのサイズです (そのため、「ブロック デバイス」と呼ばれます)。これはカーネル内の最も原始的なストレージ形式であるため、すべてのファイル システム クラスター サイズはこの倍数でなければなりません。このブロック サイズは、ユーザー空間プログラムによってほぼ常に参照されるサイズでもあります。たとえば、 du-h または -H オプションなしで実行すると、ファイルが占めるこれらのブロックの数を返します。dfまた、これらのブロックのサイズも報告され、出力の「ブロック」列はfdisk -lこのタイプになります。これは、最も一般的に「ブロック」と呼ばれるものです。各ブロックには 2 つのディスク セクターが収まります。

シリンダー サイズはパーティション テーブルと BIOS でのみ使用されます (BIOS は Linux では使用されません)。

ソース:Linux ディスク ブロック サイズ... 助けてください

セクター0-31

最初の 32 セクターについての質問にお答えすると、フラッシュ ドライブは FAT 形式のデバイスであるため、FAT ファイル システムの定義を見ると、FAT ファイル システムは 4 つの異なるセクションで構成されていることがわかります。

a) 予約済みセクター、
b) ファイル アロケーション テーブル (FAT) 領域、
c) ルート ディレクトリ領域、および
d) データ領域。

脂肪の概要

予約セクター一番先頭にあるのは、(この場合は)セクター 0 ~ 31 です。

最初の予約セクター(論理セクター0)はブートセクター(別名 ボリューム ブート レコード (VBR))と呼ばれるエリアが含まれます。BIOS パラメータ ブロック(基本的なファイル システム情報、特にそのタイプと他のセクションの場所へのポインターが含まれます)、通常はオペレーティング システムのブート ローダー コードが含まれます。

ブートセクタの重要な情報は、オペレーティングシステムの構造を介してアクセス可能であり、ドライブパラメータブロック (DPB)DOS および OS/2 で。

予約セクターの総数はブートセクター内のフィールドで示されます。FAT32ファイルシステムでは通常32である。

FAT32ファイルシステムの場合、予約セクターにはファイルシステム情報セクター論理セクター1とバックアップブートセクター論理セクター6。

他の多くのベンダーは、ブートストラップ ローダーに単一セクター セットアップ (論理セクター 0 のみ) を採用し続けています。一方、Microsoft のブート セクター コードは、FAT32 の導入以降、論理セクター 0 と 2 にまたがるように拡大しており、論理セクター 0 は論理セクター 2 のサブルーチンに依存しています。バックアップ ブート セクター領域も、3 つの論理セクター 6、7、8 で構成されています。場合によっては、Microsoft は、予約済みセクター領域のセクター 12 を拡張ブート ローダーに使用します。


単なる追加情報であり、OPの質問とは関係ありません

FAT地域はセクター32にあります:

これには通常、冗長性チェックのためにファイル アロケーション テーブルのコピーが 2 つ (異なる場合があります) 含まれていますが、ディスク修復ユーティリティでもほとんど使用されません。

これらはデータ領域のマップであり、ファイルとディレクトリによって使用されるクラスターを示します。FAT12 および FAT16 では、これらは予約済みセクターの直後に続きます。

通常、追加のコピーは書き込み時に厳密に同期され、読み取り時には最初の FAT でエラーが発生した場合にのみ使用されます。FAT32 では、デフォルトの動作から切り替えて、診断目的で使用する利用可能な FAT から 1 つの FAT を選択できます。

マップの最初の 2 つのクラスター (クラスター 0 と 1) には特別な値が含まれます。

ルートディレクトリ領域:

これは、ルート ディレクトリにあるファイルとディレクトリに関する情報を保存するディレクトリ テーブルです。これは FAT12 と FAT16 でのみ使用され、このボリュームの作成時に事前に割り当てられる固定の最大サイズをルート ディレクトリに課します。FAT32 では、ルート ディレクトリはファイルや他のディレクトリとともにデータ領域に保存されるため、このような制約なしに拡張できます。したがって、FAT32 では、データ領域はここから始まります。

データ領域:

ここには実際のファイルとディレクトリのデータが保存され、パーティションの大部分を占めます。従来、データ領域の未使用部分は、IBM 互換機でのフォーマット時に INT 1Eh のディスク パラメータ テーブル (DPT) に従って 0xF6 のフィラー値で初期化されますが、Atari Portfolio でも使用されています。8 インチ CP/M フロッピーは通常、0xE5 の値でフォーマット済みで出荷されました。Digital Research 経由で、この値は Atari ST フォーマットのフロッピーでも使用されました。Amstrad は代わりに 0xF4 を使用しました。最近のフォーマッタの中には、ハード ディスクを 0x00 の値で消去するものもありますが、フラッシュ ディスクでは、摩耗を減らすために、プログラムされていないフラッシュ ブロックのデフォルト値である 0xFF の値が使用されます。後者の値は、通常、ROM ディスクでも使用されます (一部の高度なフォーマット ツールでは、フォーマット フィラー バイトを構成できます)。

ファイルとサブディレクトリのサイズは、FAT 内のファイル チェーンにリンクを追加するだけで、(空きクラスターがある限り) 任意に増やすことができます。ただし、ファイルはクラスター単位で割り当てられるため、1 KiB のファイルが 32 KiB のクラスターに存在する場合、31 KiB が無駄になります。

FAT32 では通常、データ領域の最初のクラスターであるクラスター番号 2 でルート ディレクトリ テーブルが開始されます。

ソース:Wikipedia - ファイルアロケーションテーブル

答え2

セクター 1 ~ 31 はブート情報とパーティション テーブル情報用に予約されていると推測します。パーティション /dev/sdb1 はブロック/セクター 32 から始まり、249854 まで続きます。これは物理ディスク上の論理パーティションです。

124911+ は、32 から 249854 までのブロックの数を示します。

ディスク ジオメトリについては、man fdsik次のように説明されています。

可能であれば、fdisk はディスク ジオメトリを自動的に取得します。これは必ずしも物理ディスク ジオメトリではありません (実際、最近のディスクには物理ジオメトリのようなものは存在せず、単純なシリンダ/ヘッド/セクターの形式で説明できるようなものではありません)。これは、MS-DOS がパーティション テーブルに使用するディスク ジオメトリです。

通常、デフォルトですべてうまくいき、ディスク上のシステムが Linux のみであれば問題はありません。ただし、ディスクを他のオペレーティング システムと共有する必要がある場合は、別のオペレーティング システムの fdisk で少なくとも 1 つのパーティションを作成することをお勧めします。Linux は起動時にパーティション テーブルを参照し、他のシステムとの連携に必要な (偽の) ジオメトリを推測しようとします。

関連情報