付録A デバイスマッパー
			デバイスマッパーとは、ボリューム管理用のフレームワークを提供するカーネルドライバーです。これは論理ボリュームとして使用可能な、マップされたデバイスを作成する一般的な方法を提供します。デバイスマッパーは、ボリュームグループやメタデータ形式をとくに認識する訳ではありません。
		
			デバイスマッパーは多くの高度な技術のための土台を提供します。LVM に加えて、Device-Mapper マルチパスおよび dmraid コマンドはデバイスマッパーを使用します。デバイスマッパーへのアプリケーションインターフェイスは ioctl システムコールです。ユーザーインターフェイスは dmsetup コマンドです。
		
			LVM 論理ボリュームは、デバイスマッパーを使用してアクティブにされます。それぞれの論理ボリュームは、マッピングされたデバイスに変換されます。それぞれのセグメントが、そのデバイスを記述するマッピングテーブルの行に変換されます。デバイスマッパーは、リニアマッピング、ストライプ化マッピング、エラーマッピングを含む各種のマッピングターゲットをサポートします。たとえば、2 つのディスクを 1 つの論理ボリュームとして連結することができます。LVM がボリュームを作成すると、dmsetup コマンドでクエリーできる基礎となるデバイスマッパーデバイスが作成されます。マッピングテーブルのデバイスの形式に関する情報は、「デバイステーブルのマッピング」 を参照してください。デバイスをクエリーする dmsetup コマンドの使用方法については、「dmsetup コマンド」 を参照してください。
		
A.1. デバイステーブルのマッピング リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
				マップされたデバイスは、サポートされているデバイステーブルのマッピングを使用してデバイスの論理セクターの各範囲をマップする方法を指定するテーブルによって定義されます。マップされたデバイスのテーブルは以下の形式の行のリストから作成されます。
			
start length mapping [mapping_parameters...]
start length mapping [mapping_parameters...]
				デバイスマッパーテーブルの最初の行では、
start パラメーターは 0 でなければなりません。1 つの行の start + length パラメーターは、次の行の start と等しくなければなりません。マッピングテーブルの行に指定されるマッピングパラメーターの種類は、その行に指定される マッピング タイプによって異なります。
			
				デバイスマッパー内のサイズは常にセクターで指定されます (512 バイト)。
			
				デバイスがデバイスマッパーでマッピングパラメーターとして指定される場合、そのデバイスはファイルシステム内のデバイス名で参照されるか(例: 
/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
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
 - striped
 - mirror
 - snapshot and snapshot-origin
 - error
 - zero
 - multipath
 - crypt
 
A.1.1. リニアマッピングターゲット リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
					リニアマッピングターゲットは連続範囲のブロックを別のブロックデバイスにマップします。リニアターゲットの形式は以下のようになります。
				
start length linear device offset
start length linear device offset
start- 仮想デバイス内の始点ブロック
 長さ- このセグメントの長さ
 device- ブロックデバイス。ファイルシステム内のデバイス名で参照、または
major:minor形式のメジャー番号とマイナー番号で参照されます。 offset- デバイス上のマッピングの始点オフセット
 
					以下の例は、仮想デバイスの始点ブロックが 0 、セグメントの長さが 1638400、メジャー/ マイナー番号ペアが 8:2、デバイスの始点オフセットが 41146992 であるリニアターゲットを示しています。
				
0 16384000 linear 8:2 41156992
0 16384000 linear 8:2 41156992
					次の例は、デバイスパラメーターがデバイス 
/dev/hda として指定されたリニアターゲットを示しています。
				0 20971520 linear /dev/hda 384
0 20971520 linear /dev/hda 384
A.1.2. ストライプ化マッピングターゲット リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
					ストライプ化マッピングターゲットは物理デバイス全体でのストライピングをサポートします。これは、ストライプの数、ストライプのチャンクサイズ、およびデバイス名とセクターのペアのリストを引数として受け取ります。ストライプ化ターゲットの形式は以下のようになります。
				
start length striped #stripes chunk_size device1 offset1 ... deviceN offsetN
start length striped #stripes chunk_size device1 offset1 ... deviceN offsetN
					ストライプごとに、
device パラメーターと offset パラメーターの 1 つのセットがあります。
				start- 仮想デバイス内の始点ブロック
 長さ- このセグメントの長さ
 #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 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
0 65536 striped 2 512 /dev/hda 0 /dev/hdb 0
A.1.3. ミラーマッピングターゲット リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
					ミラーマッピングターゲットはミラー化した論理デバイスのマッピングをサポートします。ミラー化ターゲットの形式は次のようになります。
				
start length mirror log_type #logargs logarg1 ... logargN #devs device1 offset1 ... deviceN offsetN
start length mirror log_type #logargs logarg1 ... logargN #devs device1 offset1 ... deviceN offsetN
start- 仮想デバイス内の始点ブロック
 長さ- このセグメントの長さ
 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 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 つのデバイスマッパーデバイスが使用されます。
				
- ソースボリュームの元のマッピングテーブルを含む
リニアマッピングを持つデバイス。 - ソースボリュームのコピーオンライト(COW)デバイスとして使用される
リニアマッピングを持つデバイス。書き込みごとに、元のデータは各スナップショットの COW デバイスに保存され、表示可能なコンテンツは変更されません(COW デバイスがいっぱいになることはありません)。 - 表示される
スナップショットボリュームである #1 と #2 を組み合わせたスナップショットマッピングを持つデバイス。 - 元のボリューム (これは、元のソースボリュームで使用されるデバイス番号を使用します)。このテーブルはデバイス #1 からの snapshot-origin マッピングに置き換えられます。
 
					これらのデバイスの作成には固定された命名スキームが使用されます。たとえば、以下のコマンドを使用して 
base という名前の LVM ボリュームを作成し、snap という名前のスナップショットボリュームをそのボリューム上に作成することができます。
				lvcreate -L 1G -n base volumeGroup lvcreate -L 100M --snapshot -n snap volumeGroup/base
# lvcreate -L 1G -n base volumeGroup
# lvcreate -L 100M --snapshot -n snap volumeGroup/base
					これによって 4 つのデバイスが作成され、以下のコマンドで表示できます。
				
snapshot-origin ターゲットの形式は以下のようになります。
				start length snapshot-origin origin
start length snapshot-origin origin
start- 仮想デバイス内の始点ブロック
 長さ- このセグメントの長さ
 origin- スナップショットのベースボリューム
 
snapshot-origin は通常、それをベースにした 1 つ以上のスナップショットを持ちます。読み取りは直接バッキングデバイスにマップされます。それぞれの書き込みには、元のデータが各スナップショットの COW デバイス内に保存されて、COW デバイスが満杯になるまでその可視コンテンツをそのまま維持します。
				snapshot ターゲットの形式は以下のようになります。
				start length snapshot origin COW-device P|N chunksize
start length snapshot origin COW-device P|N chunksize
start- 仮想デバイス内の始点ブロック
 長さ- このセグメントの長さ
 origin- スナップショットのベースボリューム
 COW-device- 変更したデータチャンクが保存されるデバイス
 - P|N
 - P (Persistent) または N (Not persistent) は、スナップショットが再起動後に維持されるかどうかを示します。一時的なスナップショット (N) では、ディスクに保存できるメタデータが少なくなり、代わりに、カーネルがメモリーに保持します。
 chunksize- COW デバイスに保存されるデータにおける、変更したチャンクのセクターサイズ
 
					以下の例は、作成元デバイスが 254:11 の 
snapshot-origin ターゲットを示しています。
				0 2097152 snapshot-origin 254:11
0 2097152 snapshot-origin 254:11
					次の例は、オリジンデバイスが 254:11 で COW デバイスが 254:12 の 
スナップショット ターゲットを示しています。このスナップショットデバイスは再起動後にも永続し、COW デバイス上に保存されるデータのチャンクサイズは 16 セクターです。
				0 2097152 snapshot 254:11 254:12 P 16
0 2097152 snapshot 254:11 254:12 P 16
A.1.5. エラーマッピングターゲット リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
					エラーマッピングターゲットを使用すると、マッピングされたセクターへの I/O オペレーションはいずれも失敗します。
				
					エラーマッピングターゲットはテスト用に使用できます。障害時にデバイスがどのように動作するかをテストするには、1 つのデバイスの中に不良セクターがあるデバイスマッピングを 1 つ作成するか、ミラーレッグをスワップアウトして、そのレッグをエラーターゲットに置き換えます。
				
					エラーターゲットは、実際のデバイス上でのタイムアウトおよび再試行を回避する方法として、障害のあるデバイスの代わりに使用することができます。エラーターゲットは、障害時に LVM メタデータを再配置している間に中間ターゲットとして機能します。
				
エラー マッピングターゲットは、start パラメーターと length パラメーター以外の追加パラメーターを取りません。
				
					以下の例は、
error ターゲットを示しています。
				0 65536 error
0 65536 error
A.1.6. ゼロマッピングターゲット リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
zero マッピングターゲットは、/dev/zero と同等のブロックデバイスです。このマッピングの読み取り操作はゼロのブロックを返します。このマッピングに書き込まれたデータは破棄されますが、書き込みは正常に実行されます。zero マッピングターゲットは、start パラメーターおよび length パラメーター以外のパラメーターを追加しません。
				
					以下の例は、16Tb デバイス用の 
zero ターゲットを示しています。
				0 65536 zero
0 65536 zero
A.1.7. マルチパスマッピングターゲット リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
					マルチパスマッピングターゲットはマルチパス化したデバイスのマッピングをサポートします。
multipath ターゲットの形式は以下のようになります。
				start length multipath #features [feature1 ... featureN] #handlerargs [handlerarg1 ... handlerargN] #pathgroups pathgroup pathgroupargs1 ... pathgroupargsN
start length  multipath  #features [feature1 ... featureN] #handlerargs [handlerarg1 ... handlerargN] #pathgroups pathgroup pathgroupargs1 ... pathgroupargsN
pathgroupargs パラメーターにはパスグループごとに 1 つのセットがあります。
				start- 仮想デバイス内の始点ブロック
 長さ- このセグメントの長さ
 #features- マルチパス機能の数。このパラメーターがゼロの場合、
featureパラメーターはありません。次のデバイスマッピングパラメーターは#handlerargsになります。現在、multipath.confファイルのfeatures属性で設定できる機能は 1 つあります(queue_if_no_path)。これは、利用可能なパスがない場合には、マルチパス化したデバイスが I/O 操作をキューに登録するよう現在設定されていることを示します。以下の例では、multipath.confファイルのno_path_retry属性が設定されています。これは、パスを使用する試行回数が設定された後にすべてのパスが失敗とマークされるまで、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 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 1000Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのパスチェッカーがチェックに所定回数失敗した後には、マッピングは以下のように表示されます。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
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 1000Copy to Clipboard Copied! Toggle word wrap Toggle overflow  #handlerargs- ハードウェアハンドラー引数の数です。それらの引数がその後に続きます。ハードウェアハンドラーは、パスグループの切り替えや I/O エラーの処理時に、ハードウェア固有の動作を行うのに使用するモジュールを指定します。これが 0 に設定されている場合、次のパラメーターは
#pathgroupsになります。 #pathgroups- パスグループの数です。バスグループとは、マルチパス化したデバイスがロードバランシングを行うパスのセットのことです。
pathgroupargsパラメーターにはパスグループごとに 1 つのセットがあります。 pathgroup- 試行する次のパスグループ
 pathgroupsargs- 各パスグループは以下の引数で設定されます。
pathselector #selectorargs #paths #pathargs device1 ioreqs1 ... deviceN ioreqsN
pathselector #selectorargs #paths #pathargs device1 ioreqs1 ... deviceN ioreqsNCopy to Clipboard Copied! Toggle word wrap Toggle overflow パスグループ内の各パス用にパス引数の 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
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
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 length crypt cipher key IV-offset device offset
start length crypt cipher key IV-offset device offset
start- 仮想デバイス内の始点ブロック
 長さ- このセグメントの長さ
 暗号化 (cipher)- 暗号は、
暗号 [-chainmode]-ivmode[:iv options]で設定されます。暗号化 (cipher)- 利用可能な暗号は
/proc/crypto(例:aes)に一覧表示されます。 chainmode- 常に
cbcを使用します。最初のベクター(IV)を使用せず、ebcを使用しないでください。 ivmode[:iv options]- IV は暗号化を変更するために使用する初期ベクトルです。IV モードは
plainまたはessiv:hashです。-plainのivmodeはセクター番号(プラス IV オフセット)を IV として使用します。-essパッティーは、ウォーターマークの脆弱性を回避する拡張機能です。ivの 
 鍵 (key)- 暗号化キー (16 進数で指定)
 IV-offset- 初期ベクトル (IV) オフセット
 device- ブロックデバイス。ファイルシステム内のデバイス名で参照、または
major:minor形式のメジャー番号とマイナー番号で参照されます。 offset- デバイス上のマッピングの始点オフセット
 
					以下は 
crypt ターゲットの例です。
				0 2097152 crypt aes-plain 0123456789abcdef0123456789abcdef 0 /dev/hda 0
0 2097152 crypt aes-plain 0123456789abcdef0123456789abcdef 0 /dev/hda 0