block_deviceは物理ディスクまたはディスクのパーティションをマッピングしますか? [閉鎖]

block_deviceは物理ディスクまたはディスクのパーティションをマッピングしますか? [閉鎖]

ULK(Understanding Linux Kernel)という本では、著者は各ブロックデバイスに独自のドライバがあると言います。問題は、ここでブロックデバイスが物理ディスクを表すのか、それともディスクのパーティションを表すのかということです。

本では、struct block_deviceがパーティションまたはディスク(「bd_contains」属性で表される)になる可能性があることを記録します。ただし、struct gendisk はディスクを表すこともできます。混乱しています。 2つの構造「ディスク」が同じことを意味しますか?

ベストアンサー1

基本レベルでは、ブロックデバイスは固定ブロックサイズのN個のデータブロックのセットを表します。これらのブロックは連続して0..(N-1)に番号付けされます。

これは物理ディスク、パーティション、RAIDアレイです。多くの種類次を含むLVM論理ボリュームである物理ディスク1つ以上のディスクの一部、または暗号化層を介して上記の仮想ビューを表示できます。

ファイルシステムドライバは通常、物理的な詳細を気にしません。対応するブロック範囲を機能的なファイルシステムで表現する操作のみを処理します。低レベルドライバは、各ブロックがその番号に一意にアドレス指定できる限り、必要と思われる方法でブロック番号を変換できます。

  • パーティションドライバは単にブロック番号にオフセットを適用し、デフォルトのフルディスクデバイスを参照します。
  • LVM論理ボリュームドライバには、論理ブロック番号の範囲と対応する(デフォルトデバイス+オフセット)ペアのテーブルがあります。
  • RAIDドライバには複数の基本デバイスがあり、単一ブロックの要求は冗長性のために複数のデバイスの複数の基本ブロックにマッピングできます。単一の読み取り要求は、パフォーマンスを向上させるために同じコンテンツを持つ複数の基本デバイス間で分割できます。あるいは、1つの基本デバイスに障害が発生した場合は、別の基本デバイスから回復することができ、各基本デバイスで書き込み要求を実行する必要があります。 (RAID1の場合)および/またはそれに対するチェックサムを計算します(RAID5 / 6の場合)。
  • マルチパスドライバの場合一部接続されているすべての基本(パス)デバイス同じパスの遠隔端にあるストレージデバイス。ブロック番号は変更されませんが、必要に応じて複数のパスで同じ操作を再試行できます。
  • ディスク暗号化ドライバはブロック番号をマッピングしてもそうでなくても(実際のディスクアクセスパターンを難読化するために)、それらを通過するデータを確実に変更します。書き込まれるすべてのブロックは、要求をプライマリデバイスに転送する前に暗号化されます。基本機器から読み出したデータは復号化されます。

ブロックデバイスは、物理ディスク、パーティション、LVM LV、RAIDデバイス、またはその他のデバイスであるかどうかにかかわらず、本質的に同じインターフェイスを持つため、これらのマッピングドライバはすべて積み重ね可能:これらのマッピングレイヤを互いに自由に配置できます。もちろん、すべての組み合わせが合理的または有用であると保証されるわけではありません。

おすすめ記事