コンパクトフラッシュを見るとき、fdiskのStartとEndの値はどういう意味ですか?

コンパクトフラッシュを見るとき、fdiskのStartとEndの値はどういう意味ですか?

私はコンパクトフラッシュを分析し、それをCFマスターブートレコードのパーティションテーブルの内容と比較するためにfdiskを使用しています。 「開始」および「終了」列の意味を理解できません。私が読んだいくつかのドキュメントでは、これはパーティションの開始と終了のセクタを意味していると述べていますが、fdisk出力をMBRパーティションテーブルのパーティションアドレスと比較すると結果が一致しないようです。

Fdisk -lは、最初のパーティションが3から始まりますが、2241で終わっていることを報告します。

ここに画像の説明を入力してください。

ただし、MBR内のパーティションテーブルの16進ダンプを見ると、パーティションはLBAアドレスに基づいて0x800セクタで始まるように見えます。 CHS アドレスはシリンダ 1、ヘッド 1、セクタ 3 で示されます。

ここに画像の説明を入力してください。

では、fdiskのStart 3とEnd 2241はどういう意味ですか?

ベストアンサー1

CentOS 6では、fdiskパーティションテーブルを表示するときにシリンダをデフォルトの単位として使用します。 zevzekが述べたように、これは廃止予定であり、fdisk -u=sectors -l最新のストレージデバイスの現実とそれ以降のバージョンがデフォルトfdiskで表示される方法とよりよく一致するように使用する必要があります。

実際に分割された表のCHS値は、かなり厳しい最大値を持ちます。

  • これシリンダーフィールド幅は10ビットにすぎません(=値0〜1023)。
  • これフィールド幅は8ビットです(=値0〜255)。
  • これ部門フィールド幅は6ビットです(=値0〜63)。

したがって、パーティション表から始まるCHS(3バイト)は、H = 1、S = 3、C = 1で始まり、0x1bfの位置で始まります。これは間違っているようです。

位置0x1c2はパーティションタイプ(0x83)で、位置0x1c3の後に終了CHS値(3バイト)が続きます。

16進ダンプの2番目の赤いボックスは正しい位置を指していません。 0x1c3の値は終了H値(0x14 = 20)です。

0x1c4の値は、下位6ビットに終了セクタ値を指定し、上位2ビットに終了シリンダ値の最上位2ビットを指定します。したがって、2 進数 0xe8 = 11 101000 なので、終点 S は 40 です。最後のC値の最初の2桁は16進数3を表します。

0x1c5 の値は、終了 C 値の下位バイトを指定します。前のバイトの上位2ビットと一緒に、エンドシリンダー値は0x3b4 = 948です。

この値は約378 MBのパーティションのみを表しているため、パーティションテーブルの最後のCHS値は、パーティションテーブルの後ろの4バイトのパーティションサイズ値と比較して完全に言うべきではありません。)

ただし、どのように分割しても、結果として7.87GiB / 8.45GBの制限が発生します。それ。

IDEディスクコントローラの仕様により、状況がさらに複雑になりました。その他CHS制限設定:IDEコントローラは最大65536シリンダ(0-65535)および255(1-255)セクタまでCHS値を受け入れることができますが、ヘッドは最大16(0-15)までしか許可されません。 CHS値をそのまま使用すると、MBR制限とともに504MiB / 528.4MBの制限が発生します。

したがって、1994年7月からCHS値を現在のユースケースに合わせて調整するための幾何学変換規則が登場しました。そのため、2242個のシリンダ、21個のヘッド、40個のセクタをハードウェアが実際のジオメトリと呼ぶことになり、パーティションテーブルに使用される値は変換されたことを基準にして、徐々に進む最も古い BIOS システムコールのパーティションテーブルとフィールドに値を合わせるジオメトリです。この変換には、通常、数値Nを選択し、物理C値をNで除算し、物理H値にNを乗算することが含まれます。 Nの値は通常2、4、8または15です。 (はい、16ではなく15はMS-DOS、以前のバージョンのWindows、およびいくつかの古いBIOSのバグを修正します。)

8.45 GB を超えると、CHS 値はとにかく役に立たないため、最新のオペレーティングシステムは通常すぐに上がります。CHS値を無視代わりに、パーティションの最初のブロックのLBA番号とパーティション内のブロックの総数の4バイト値を使用して、実際にパーティションの位置とサイズを定義します。これらの4バイト値は常に正確で明確でなければなりません。

既存の512バイトセクタサイズを使用する場合、これらの4バイト値は最大(2 ^ 32 - 1)ブロック、つまり2TiBまたは2.19 TB未満のディスクサイズに十分です。

パーティションの場合、16進ダンプの2番目の赤いボックスは、実際にはパーティションの最初のブロックのLBA#である0x1c6以上の場所を指します。リトルエンディアン形式で表示されるため、値は16進数で10 0x800です。または10進数で2048です。これは、ディスクの先頭から正確に1MiB離れた場所で最初のパーティションを開始する最新の標準ルールに従います。

パーティションの長さはオフセット0x1caから始まります。つまり、0x1cb000 = 1880064ブロックまたは918MiB / 940MBです。

ハードウェアによって報告されたCHS構造図は、21 heads, 40 sectors/track, 2242 cylinders2242 * 40 * 21 = 1 883 280セクターまたは1883 280 * 512 = 964 249 360バイトにすぎませんが、実際のディスク容量は964として報告されていることがわかります。583 424バイト。

これは、CHS「ジオメトリ」が以前のデバイスとオペレーティングシステムの近似値にすぎず、正確な容量が変化することを再び示します。

ちょうどLBA表現を使ってやってみたいfdisk、パーティションの始まりと終わりの値をシリンダーで表示しようとしたら、ただLBAの位置とサイズの値に基づいて計算し、開始/終了CHS値は完全に無視したいです。パーティションテーブルから。繰り返しますが、このBlocks列は実際にはパーティションサイズを2KB単位で表示しているようです。

おすすめ記事