Show Table of Contents
付録A デバイスマッパー
デバイスマッパーとは、ボリューム管理用のフレームワークを提供するカーネルドライバーです。これは論理ボリュームとして使用可能な、マップされたデバイスを作成する一般的な方法を提供します。デバイスマッパーは、ボリュームグループやメタデータ形式をとくに認識する訳ではありません。
デバイスマッパーは多くの高度な技術のための土台を提供します。LVM のほかにも、デバイスマッパーマルチパスと
dmraid コマンドがデバイスマッパーを使用します。デバイスマッパーに対するアプリケーションインターフェースは ioctl システムコールになり、ユーザーインターフェースは dmsetup コマンドになります。
LVM 論理ボリュームは、デバイスマッパーを使用してアクティブにされます。それぞれの論理ボリュームは、マッピングされたデバイスに変換され、それぞれのセグメントが、そのデバイスを記述するマッピングテーブルの行に変換されます。デバイスマッパーは、リニアマッピング、ストライプ化マッピング、エラーマッピングを含む各種のマッピングターゲットをサポートします。たとえば、2 つのディスクを 1 つの論理ボリュームとして連結することができます。これは、各ディスクに対してそれぞれ一対のリニアマッピングを 1 つ維持することで行います。LVM がボリュームを作成する場合は、
dmsetup コマンドでクエリー可能な、配下のデバイスマッパーデバイスを作成します。マッピングテーブルのデバイスの形式に関する情報は、「デバイステーブルのマッピング」 を参照してください。デバイスをクエリーする dmsetup コマンドの使用方法については、「dmsetup コマンド」 を参照してください。
A.1. デバイステーブルのマッピング
マップされたデバイスは、サポートされているデバイステーブルのマッピングを使用してデバイスの論理セクターの各範囲をマップする方法を指定するテーブルによって定義されます。マップされたデバイスのテーブルは以下の形式の行の一覧から作成されます。
start length mapping[mapping_parameters...]
デバイスマッパーテーブルの最初の行では、
start パラメーターはゼロ (0) でなければなりません。1 行にある start + length のパラメーター群は、次の行の start と同じでなければなりません。マッピングテーブルの行に指定されるマッピングパラメーターの種類は、その行に指定される mapping のタイプによって決まります。
デバイスマッパー内のサイズは常にセクターで指定されます (512 バイト)。
1 つのデバイスがデバイスマッパー内でマッピングパラメーターとして指定される場合、そのデバイスはファイルシステム内のデバイス名で参照されるか (例:
/dev/hda)、または major:minor の形式でメジャー番号とマイナー番号で参照されます。major:minor の形式は、パス名ルックアップを回避するので推奨されます。
デバイスのマッピングテーブルの例を以下に示します。このテーブルには 4 つのリニアターゲットがあります。
0 35258368 linear 8:48 65920 35258368 35258368 linear 8:32 65920 70516736 17694720 linear 8:16 17694976 88211456 17694720 linear 8:16 256
各行の最初の 2 つのパラメーターはセグメントの始点ブロックとセグメントの長さです。次のキーワードはマッピングターゲットであり、この例ではすべて
linear になっています。行のその他の部分は linear ターゲットのパラメーターで構成されています。
以下のセクションでは以下のマッピングの形式について説明しています。
- linear
- striped
- mirror
- snapshot and snapshot-origin
- error
- zero
- multipath
- crypt
A.1.1. リニアマッピングターゲット
リニアマッピングターゲットは連続範囲のブロックを別のブロックデバイスにマップします。リニアターゲットの形式は以下のようになります。
start lengthlineardevice offset
start- 仮想デバイス内の始点ブロック
length- このセグメントの長さ
device- ブロックデバイス。ファイルシステム内のデバイス名で参照、または
major:minorの形式のメジャー番号とマイナー番号で参照されます。 offset- デバイス上のマッピングの始点オフセット
以下の例は、仮想デバイスの始点ブロックが 0 、セグメントの長さが 1638400、メジャー/ マイナー番号ペアが 8:2、デバイスの始点オフセットが 41146992 であるリニアターゲットを示しています。
0 16384000 linear 8:2 41156992
以下の例は、デバイスパラメーターがデバイス
/dev/hda として指定されたリニアターゲットを示しています。
0 20971520 linear /dev/hda 384
A.1.2. ストライプ化マッピングターゲット
ストライプ化マッピングターゲットは物理デバイス全体でのストライピングをサポートします。これは、ストライプの数、ストライプのチャンクサイズ、およびデバイス名とセクターのペアの一覧を引数として受け取ります。ストライプ化ターゲットの形式は以下のようになります。
start lengthstriped#stripes chunk_size device1 offset1 ... deviceN offsetN
それぞれのストライプについて
device と offset のパラメーターの 1 つのセットが指定されます。
start- 仮想デバイス内の始点ブロック
length- このセグメントの長さ
#stripes- 仮想デバイスのストライプの数
chunk_size- 次にスイッチするまでに各ストライプに書き込まれるセクターの数。2 の累乗であり、最低でもカーネルページサイズの大きさでなければなりません。
device- ブロックデバイス。ファイルシステム内のデバイス名で参照されるか、または
major:minorの形式でメジャー番号とマイナーの番号で参照されます。 offset- デバイス上のマッピングの始点オフセット
以下の例は、3 つのストライプと、チャンクサイズ 128 を持つストライプ化ターゲットを示しています。
0 73728 striped 3 128 8:9 384 8:8 384 8:7 9789824
- 0
- 仮想デバイス内の始点ブロック
- 73728
- このセグメントの長さ
- striped 3 128
- チャンクサイズが 128 ブロックの 3 つのデバイスにわたるストライプ
- 8:9
- 最初のデバイスのメジャー番号:マイナー番号
- 384
- 最初のデバイス上のマッピングの始点オフセット
- 8:8
- 2 つ目のデバイスのメジャー番号:マイナー番号
- 384
- 2 つ目のデバイスのマッピングの始点オフセット
- 8:7
- 3 つ目のデバイスのメジャー番号:マイナー番号
- 9789824
- 3 つ目のデバイス上のマッピングの始点オフセット
以下の例は、2 つのストライプ、256 KiB のチャンク、およびメジャー番号とマイナー番号の代わりにファイルシステム内のデバイス名で指定されたデバイスパラメーターを持つストライプ化ターゲットを示しています。
0 65536 striped 2 512 /dev/hda 0 /dev/hdb 0
A.1.3. ミラーマッピングターゲット
ミラーマッピングターゲットはミラー化した論理デバイスのマッピングをサポートします。ミラー化ターゲットの形式は次のようになります。
start lengthmirrorlog_type #logargs logarg1 ... logargN #devs device1 offset1 ... deviceN offsetN
start- 仮想デバイス内の始点ブロック
length- このセグメントの長さ
log_type- 使用可能なログタイプとそれらの引数は以下のようになります。
core- ミラーはローカルであり、ミラーログはコアメモリーに保持されます。このログタイプは 1 - 3 の引数を取ります。regionsize [[
no]sync] [block_on_error] disk- ミラーはローカルであり、ミラーログはディスクに保持されます。ログタイプは 2 - 4 の引数を取ります。logdevice regionsize [[
no]sync] [block_on_error] clustered_core- ミラーはクラスター化されており、ミラーログはコアメモリーに保持されます。このログタイプは 2 - 4 の引数を取ります。regionsize UUID [[
no]sync] [block_on_error] clustered_disk- ミラーはクラスター化されており、ミラーログはディスクに保持されます。このログタイプは 3 - 5 の引数を取ります。logdevice regionsize UUID [[
no]sync] [block_on_error]
LVM は、どのリージョンがミラー (ミラー群) と同期しているかを追跡するのに使用する小さなログを維持します。regionsize 引数は、それらのリージョンのサイズを指定します。クラスター環境では、UUID 引数はミラーログデバイスに関連付けられた一意の識別子であるため、ログの状態はクラスター全体で維持することができます。オプションの[no]sync引数を使用して、ミラーを "in-sync" か "out-of-sync" として指定することができます。block_on_error引数はミラーに対して、エラーを無視するのではなくエラーに対応するように指示するために使用されます。 #log_args- マッピング内で指定されるログ引数の数
logargs- ミラー用のログ引数。提供されるログ引数の数は
#log-argsパラメーターで指定され、有効なログ引数はlog_typeパラメーターで決定されます。 #devs- ミラー内のレッグ数。デバイスとオフセットが各レッグに指定されます。
device- それぞれのレッグ用のブロックデバイス。ファイルシステム内のデバイス名で参照されるか、または
major:minorの形式でメジャーとマイナーの番号で参照されます。#devsパラメーターに示されるように、ブロックデバイスとオフセットは各ミラーレッグに指定されます。 offset- デバイス上のマッピングの始点オフセット。ブロックデバイスとオフセットは
#devsで示されるようにそれぞれのミラーレッグ用に指定されます。
以下の例は、ミラーログがディスク上に保持されたクラスター化されたミラー用のミラーマッピングターゲットを示しています。
0 52428800 mirror clustered_disk 4 253:2 1024 UUID block_on_error 3 253:3 0 253:4 0 253:5 0
- 0
- 仮想デバイス内の始点ブロック
- 52428800
- このセグメントの長さ
- mirror clustered_disk
- ミラーがクラスター化されており、ディスク上でミラーログを維持することを指定するログタイプが指定されたミラーターゲット
- 4
- 4 つのミラーログ引数が続きます。
- 253:2
- ログデバイスのメジャー番号:マイナー番号
- 1024
- 何が同期しているかを追跡記録するためにミラーログが使用するリージョンのサイズ
UUID- クラスター全域でログ情報を維持するためのミラーログデバイスの UUID
block_on_error- ミラーはエラーに対応する必要があります。
- 3
- ミラー内のレッグ数
- 253:3 0 253:4 0 253:5 0
- ミラーの各レッグを構成しているデバイス用のメジャー番号:マイナー番号およびオフセット
A.1.4. スナップショットとスナップショット複製元のマッピングターゲット
ボリュームの最初の LVM スナップショットを作成する場合に、4 つのデバイスマッパーデバイスが使用されます。
linearマッピングを持つデバイス。ソースボリュームの元のマッピングテーブルが含まれます。- ソースボリューム用の COW (copy-on-write) デバイスとして使用される
linearマッピングを持つデバイス。書き込みを行うたびに、元のデータは各スナップショットの COW デバイス内に保存され、その可視コンテンツはそのまま維持されます (COW デバイスが満杯になるまで)。 - 上記の 1 と 2 を組み合わせた
snapshotマッピングを持つデバイス。これは可視スナップショットボリュームです。 - 「元」のボリューム (これは、元のソースボリュームで使用されるデバイス番号を使用します)。このテーブルはデバイス #1 からの「snapshot-origin」マッピングに置き換えられます。
これらのデバイスを作成するには固定された命名スキームが使用されます。たとえば、以下のようなコマンドを使用して
base という名前の LVM ボリュームを作成し、snap という名前のスナップショットボリュームをそのボリューム上に作成することができます。
#lvcreate -L 1G -n base volumeGroup#lvcreate -L 100M --snapshot -n snap volumeGroup/base
これによって 4 つのデバイスが作成され、以下のコマンドで表示できます。
#dmsetup table|grep volumeGroupvolumeGroup-base-real: 0 2097152 linear 8:19 384 volumeGroup-snap-cow: 0 204800 linear 8:19 2097536 volumeGroup-snap: 0 2097152 snapshot 254:11 254:12 P 16 volumeGroup-base: 0 2097152 snapshot-origin 254:11 #ls -lL /dev/mapper/volumeGroup-*brw------- 1 root root 254, 11 29 ago 18:15 /dev/mapper/volumeGroup-base-real brw------- 1 root root 254, 12 29 ago 18:15 /dev/mapper/volumeGroup-snap-cow brw------- 1 root root 254, 13 29 ago 18:15 /dev/mapper/volumeGroup-snap brw------- 1 root root 254, 10 29 ago 18:14 /dev/mapper/volumeGroup-base
snapshot-origin ターゲットの形式は以下のようになります。
start lengthsnapshot-originorigin
start- 仮想デバイス内の始点ブロック
length- このセグメントの長さ
origin- スナップショットのベースボリューム
snapshot-origin には通常、それをベースにした1つまたは複数のスナップショットがあります。読み取りは直接バッキングデバイスにマップされます。それぞれの書き込みには、元のデータが各スナップショットの COW デバイス内に保存されて、COW デバイスが満杯になるまでその可視コンテンツをそのまま維持します。
snapshot ターゲットの形式は以下のようになります。
start lengthsnapshotorigin COW-deviceP|Nchunksize
start- 仮想デバイス内の始点ブロック
length- このセグメントの長さ
origin- スナップショットのベースボリューム
COW-device- 変更したデータチャンクが保存されるデバイス
- P|N
- P (Persistent) または N (Not persistent) は、スナップショットが再起動後に維持されるかどうかを示します。一時的なスナップショット (N) では、ディスクに保存できるメタデータが少なくなり、代わりに、カーネルがメモリーに保持します。
chunksize- COW デバイスに保存されるデータにおける、変更したチャンクのセクターサイズ
次の例では、複製元デバイスが 254:11 の
snapshot-origin ターゲットを示しています。
0 2097152 snapshot-origin 254:11
以下の例では、複製元デバイスが 254:11 で、COW デバイスが 254:12 の
snapshot ターゲットを示しています。このスナップショットデバイスは再起動後にも永続し、COW デバイス上に保存されるデータのチャンクサイズは 16 セクターです。
0 2097152 snapshot 254:11 254:12 P 16
A.1.5. エラーマッピングターゲット
エラーマッピングターゲットを使用すると、マッピングされたセクターへの I/O オペレーションはいずれも失敗します。
エラーマッピングターゲットはテスト用に使用できます。障害時にデバイスがどのように動作するかをテストするには、1 つのデバイスの中に不良セクターがあるデバイスマッピングを 1 つ作成するか、またはミラーレッグをスワップアウトして、そのレッグをエラーターゲットに置き換えます。
エラーターゲットは、実際のデバイス上でのタイムアウトおよび再試行を回避する方法として、障害のあるデバイスの代わりに使用することができます。エラーターゲットは、障害時に LVM メタデータを再配置している間に中間ターゲットとして機能します。
error マッピングターゲットは、start と length のパラメーター以外には追加のパラメーターを取りません。
以下の例は、
error ターゲットを示しています。
0 65536 error
A.1.6. ゼロマッピングターゲット
zero マッピングターゲットは、/dev/zero と同等のブロックデバイスです。このマッピングの読み取り操作はゼロのブロックを返します。このマッピングに書き込まれたデータは破棄されますが、書き込みは正常に実行されます。zero マッピングターゲットは start と length パラメーター以外には追加のパラメーターは取りません。
以下の例は、16Tb デバイス用の
zero ターゲットを示しています。
0 65536 zero
A.1.7. マルチパスマッピングターゲット
マルチパスマッピングターゲットはマルチパス化したデバイスのマッピングをサポートします。
multipath ターゲットの形式は以下のようになります。
start lengthmultipath#features [feature1 ... featureN] #handlerargs [handlerarg1 ... handlerargN] #pathgroups pathgroup pathgroupargs1 ... pathgroupargsN
それぞれのパスグループ用に 1 つのセットの
pathgroupargs パラメーター群があります。
start- 仮想デバイス内の始点ブロック
length- このセグメントの長さ
#features- マルチパス機能の数。その後にそれらの機能が続きます。このパラメーターがゼロであれば、
featureパラメーターは存在せず、次のデバイスマッピングパラメーターは#handlerargsとなります。現在、multipath.confファイルのfeatures属性で設定できるqueue_if_no_pathというサポートされている機能が 1 つあります。これは、利用可能なパスがない場合には、マルチパス化したデバイスが I/O 操作をキューに登録するよう現在設定されていることを示します。以下の例では、multipath.confファイルのno_path_retry属性が設定されています。これは、パスを使用する試行が所定回数行われた後にすべてのパスが失敗 (failed) とマークされるまで I/O 操作をキューに登録するために設定されます。この場合、すべてのパスチェッカーによるチェックが所定回数失敗するまでマッピングは以下のように表示されます。0 71014400 multipath 1 queue_if_no_path 0 2 1 round-robin 0 2 1 66:128 \ 1000 65:64 1000 round-robin 0 2 1 8:0 1000 67:192 1000
すべてのパスチェッカーがチェックに所定回数失敗した後には、マッピングは以下のように表示されます。0 71014400 multipath 0 0 2 1 round-robin 0 2 1 66:128 1000 65:64 1000 \ round-robin 0 2 1 8:0 1000 67:192 1000
#handlerargs- ハードウェアハンドラー引数の数です。それらの引数がその後に続きます。ハードウェアハンドラーは、パスグループを切り替える場合か、または I/O エラーを処理する場合に、ハードウェア固有のアクションを実行するために使用されるモジュールを指定します。これがゼロに設定されている場合は、次のパラメーターは
#pathgroupsとなります。 #pathgroups- パスグループの数です。バスグループとは、マルチパス化したデバイスがロードバランシングを行うパスのセットのことです。それぞれのパスグループに 1 つのセットの
pathgroupargsパラメーターがあります。 pathgroup- 試行する次のパスグループ
pathgroupsargs- 各パスグループは以下の引数で構成されます。
pathselector #selectorargs #paths #pathargs device1 ioreqs1 ... deviceN ioreqsNパスグループ内の各パス用にパス引数の 1 つのセットがあります。pathselector- 次の I/O 操作で使用するための、このパスグループ内のパスを決定するために使用するアルゴリズムを指定します。
#selectorargs- マルチパスマッピングでこの引数に続くパスセレクター引数の数。現在、この引数の値は常に 0 (ゼロ) です。
#paths- このパスグループ内のパスの数。
#pathargs- このグループ内の各パスに指定されたパス引数の数。現在、この数は 常に 1 で
ioreqs引数になります。 device- パスのブロックデバイス数。
major:minorの形式で、メジャー番号とマイナー番号によって参照されます。 ioreqs- 現在のグループ内の次のパスへ切り替えるまでこのパスにルーティングする I/O 要求数。
図A.1「マルチパスマッピングターゲット」 は、2つのパスグループを持つマルチパスターゲットの形式を示しています。

図A.1 マルチパスマッピングターゲット
以下の例は、同じマルチパスデバイスのための純粋なフェイルオーバーターゲットの定義を示しています。このターゲットには、4 つのパスグループがあります。マルチパス化したデバイスが 1 度に 1 つのパスのみを使用するように、パスグループごとに1 つのパスのみが開いています。
0 71014400 multipath 0 0 4 1 round-robin 0 1 1 66:112 1000 \ round-robin 0 1 1 67:176 1000 round-robin 0 1 1 68:240 1000 \ round-robin 0 1 1 65:48 1000
次の例は、同じマルチパス化したデバイスを対象とする、完全に分散した (multibus) ターゲットの定義を示しています。このターゲットでは、パスグループが 1 つだけ存在し、そこにすべてのパスが含まれます。このセットアップでは、マルチパスが、負荷をすべてのパスに均等に分散します。
0 71014400 multipath 0 0 1 1 round-robin 0 4 1 66:112 1000 \ 67:176 1000 68:240 1000 65:48 1000
マルチパス化の詳細は、『DM マルチパス』 を参照してください。
A.1.8. 暗号マッピングターゲット
crypt ターゲットは、指定したデバイスを経由してデータパッシングを暗号化します。これは、kernel Crypto API を使用します。
crypt ターゲットの形式は以下のようになります。
start lengthcryptcipher key IV-offset device offset
start- 仮想デバイス内の始点ブロック
length- このセグメントの長さ
cipher- Cipher は、
cipher[-chainmode]-ivmode[:iv options]で構成されます。cipher- 利用できる Cipher は
/proc/crypto(例:aes) 内に一覧表示されています。 chainmode- 常に
cbcを使用します。ebcは 使用しません。これは初期ベクトル (IV) を使いません。 ivmode[:iv options]- IV は暗号化を変更するために使用する初期ベクトルです。IV モードは
plainまたはessiv:hashです。-plainのivmodeは、セクター番号 (および IV オフセット) を IV として使用します。-essivのivmodeはウォーターマークの弱点を回避するための機能強化です。
key- 暗号化キー (16 進数で指定)
IV-offset- 初期ベクトル (IV) オフセット
device- ブロックデバイス。ファイルシステム内のデバイス名で参照、または
major:minorの形式のメジャー番号とマイナー番号で参照されます。 offset- デバイス上のマッピングの始点オフセット
以下に
crypt ターゲットの例を示します。
0 2097152 crypt aes-plain 0123456789abcdef0123456789abcdef 0 /dev/hda 0

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.