23.4. I/O パラメーターのスタッキング
Linux I/O スタックのすべてのレイヤーは、さまざまな I/O パラメーターをスタックに伝播するように設計されています。レイヤーが属性を使用するか、多くのデバイスを集約する場合、レイヤーは適切な I/O パラメーターを公開して、上位レイヤーのデバイスまたはツールが変換時にストレージを正確に表示できるようにする必要があります。実用例を以下に示します。
- I/O スタックの 1 つのレイヤーのみがゼロ以外の alignment_offset について調整する必要があります。レイヤーがそれに応じて調整されると、alignment_offset がゼロのデバイスがエクスポートされます。
- LVM で作成されたストライプ化デバイスマッパー(DM)デバイスは、ストライプ数(ディスク数)とユーザー提供のチャンクサイズを基準にして minimum_io_size と optimal_io_size をエクスポートする必要があります。
Red Hat Enterprise Linux 7 では、デバイスマッパーおよび Software Raid (MD) デバイスドライバーを使用して、異なる I/O パラメーターを持つデバイスを任意に組み合わせることができます。カーネルのブロック層は、個々のデバイスの I/O パラメーターを合理的に組み合わせようとします。カーネルは、異種デバイスの組み合わせを妨げません。ただし、そうすることに伴うリスクに注意してください。
たとえば、512 バイトのデバイスと 4K デバイスは、logical_block_size が 4K の単一の論理 DM デバイスに統合できます。このようなハイブリッドデバイスに階層化されたファイルシステムは、4K がアトミックに書き込まれることを想定していますが、実際には、512 バイトのデバイスに発行されると 8 つの論理ブロックアドレスにまたがることになります。高レベルの DM デバイスに 4K logical_block_size を使用すると、システムクラッシュが発生した場合に 512 バイトのデバイスへの部分的な書き込みが可能になります。
複数のデバイスの I/O パラメーターを組み合わせて競合が発生すると、ブロック層が、デバイスが部分的な書き込みの影響を受けやすく、かつ/またはアラインが正しくないという警告を発することがあります。