第25章 オンラインストレージ管理
多くの場合、オペレーティングシステムの実行中に、再起動せずにストレージデバイスを追加、削除、またはサイズ変更することが望ましいです。本章では、システムの実行中に、Red Hat Enterprise Linux 7 ホストシステムでストレージデバイスを再設定するために使用できる手順を概説します。これは、iSCSI およびファイバーチャネルストレージの相互接続を対象としています。その他の相互接続タイプは、今後追加される可能性があります。
本章では、ストレージデバイスの追加、削除、変更、および監視を中心に説明します。ファイバーチャネルまたは iSCSI プロトコルの詳細は説明されていません。これらのプロトコルに関する詳細は、他のドキュメントを参照してください。
本章では、さまざまな sysfs オブジェクトを参照します。Red Hat は、sysfs オブジェクト名とディレクトリー構造が、Red Hat Enterprise Linux のメジャーリリースで変更される可能性があることを推奨しています。これは、アップストリームの Linux カーネルでは安定した内部 API が提供されていないためです。転送可能な方法で sysfs オブジェクトを参照する方法は、カーネルソースツリーのドキュメント
/usr/share/doc/kernel-doc-version/Documentation/sysfs-rules.txt
を参照してください。
警告
オンラインストレージの再設定は慎重に行う必要があります。プロセス中にシステムに障害が発生したり、中断したりすると、予期しない結果になることがあります。Red Hat では、変更操作時にシステムへの負荷を可能な限り低減することを推奨しています。これにより、設定変更中に I/O エラー、メモリー不足エラー、または同様のエラーが発生する可能性が低くなります。以下のセクションでは、これに関するより具体的なガイドラインを説明します。
また、Red Hat では、オンラインストレージを再設定する前にすべてのデータのバックアップを作成することを推奨しています。
25.1. ターゲットの設定
Red Hat Enterprise Linux 7 は、カーネルターゲットの設定ファイルを直接操作することなく、Linux-IO ターゲットの設定を表示、編集、および保存するためのフロントエンドとして targetcli シェルを使用します。targetcli ツールは、管理者がローカルストレージリソースをエクスポートできるコマンドラインインターフェイスです。ローカルストレージリソースは、ファイル、ボリューム、ローカル SCSI デバイス、または RAM ディスクのいずれかによってバッキングされます。targetcli ツールにはツリーベースのレイアウトがあり、組み込みのタブ補完が含まれており、完全なオートコンプリートサポートとインラインドキュメントが提供されます。
targetcli は可能な限り簡素化されているため、targetcli の階層は、常にカーネルインターフェイスと完全に一致するわけではありません。
重要
targetcli で加えられた変更を永続化するには、ターゲットサービスを起動して有効にします。
#
systemctl start target#
systemctl enable target
25.1.1. targetcli のインストールおよび実行
targetcli をインストールするには、以下を使用します。
#
yum install targetcli
ターゲット
サービスを起動します。
#
systemctl start target
システムの起動時に
ターゲット
が開始するように設定します。
#
systemctl enable target
ファイアウォールでポート
3260
を開き、ファイアウォール設定を再読み込みします。
#
firewall-cmd --permanent --add-port=3260/tcp Success#
firewall-cmd --reload Success
targetcli コマンドを使用してから、ツリーインターフェイスのレイアウトに ls コマンドを使用します。
#
targetcli
:
/> ls
o- /........................................[...]
o- backstores.............................[...]
| o- block.................[Storage Objects: 0]
| o- fileio................[Storage Objects: 0]
| o- pscsi.................[Storage Objects: 0]
| o- ramdisk...............[Storage Ojbects: 0]
o- iscsi...........................[Targets: 0]
o- loopback........................[Targets: 0]
注記
Red Hat Enterprise Linux 7.0 では、Bash から targetcli コマンド( targetcli iscsi/ create など)を使用しても機能せず、エラーが返されません。Red Hat Enterprise Linux 7.1 より、シェルスクリプトで targetcli を使用することがより有用なエラーステータスコードが提供されています。
25.1.2. バックストアの作成
バックストアを使用すると、エクスポートされた LUN のデータをローカルマシンに保存するさまざまな方法をサポートできます。ストレージオブジェクトを作成すると、バックストアが使用するリソースが定義されます。
注記
Red Hat Enterprise Linux 6 では、バッキングストアという用語は、作成されたマッピングを指すために使用されます。ただし、バックストアのさまざまな使用方法の混同を避けるため、Red Hat Enterprise Linux 7 ではストレージオブジェクトは作成されたマッピングを参照し、バックストアはさまざまなタイプのバッキングデバイスを説明するために使用されます。
LIO がサポートするバックストアデバイスは次のとおりです。
- FILEIO (Linux ファイルバッキングストレージ)
- FILEIO ストレージオブジェクトは、write_back 操作または write_thru 操作のいずれかをサポートできます。write_back は、ローカルファイルシステムキャッシュを有効にします。これにより、パフォーマンスが向上しますが、データの損失のリスクが高まります。write_thru を優先して write_back を無効にするには、write_back=false を使用することが推奨されます。fileio ストレージオブジェクトを作成するには、/backstores/fileio create file_name file_location file_size write_back=false コマンドを実行します。以下に例を示します。
/> /backstores/fileio create file1 /tmp/disk1.img 200M write_back=false Created fileio file1 with size 209715200
- BLOCK (Linux BLOCK デバイス)
- ブロックドライバーを使用すると、
/sys/block
に表示されるブロックデバイスを LIO で使用できます。これには物理デバイス (HDD、SSD、CD、DVD など) および論理デバイス (ソフトウェアまたはハードウェアの RAID ボリューム、LVM ボリュームなど) が含まれます。注記BLOCK バックストアは通常、最高のパフォーマンスを提供します。任意のブロックデバイスを使用して BLOCK バックストアを作成する場合は、以下のコマンドを使用します。#
fdisk/dev/vdb
Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x39dc48fb. Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): *Enter* Using default response p Partition number (1-4, default 1): *Enter* First sector (2048-2097151, default 2048): *Enter* Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +250M Partition 1 of type Linux and of size 250 MiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks./> /backstores/block create name=block_backend dev=/dev/vdb Generating a wwn serial. Created block storage object block_backend using /dev/vdb.
注記論理ボリューム上に BLOCK バックストアを作成することもできます。 - PSCSI (Linux パススルー SCSI デバイス)
- SCSI エミュレーションなしで SCSI コマンドの直接パススルーをサポートするストレージオブジェクト、および
/proc/scsi/scsi
(SAS ハードドライブなど)の lsscsi とともに表示される基礎となる SCSI デバイスを持つストレージオブジェクトは、バックストアとして設定できます。このサブシステムでは、SCSI-3 以降に対応しています。警告PSCSI は、上級ユーザーのみが使用してください。非対称論理ユニット割り当て (ALUA) や永続予約 (VMware ESX や vSphere で使用される永続予約など) は、通常はデバイスのファームウェアに実装されず、誤作動やクラッシュが発生する原因となることがあります。疑わしい場合は、代わりに BLOCK を使用して実稼働環境のセットアップを行います。物理 SCSI デバイス(この例では/dev/sr0
を使用する TYPE_ROM デバイス)用の PSCSI バックストアを作成するには、次のコマンドを実行します。/> backstores/pscsi/ create name=pscsi_backend dev=/dev/sr0 Generating a wwn serial. Created pscsi storage object pscsi_backend using /dev/sr0
- メモリーコピー RAM ディスク (Linux RAMDISK_MCP)
- メモリーコピー RAM ディスク(ramdisk)は、完全な SCSI エミュレーションと、イニシエーターのメモリーコピーを使用した個別のメモリーマッピングを持つ RAM ディスクを提供します。これにより、マルチセッションの機能を利用できます。これは、特に実稼働環境での高速で不揮発性の大容量ストレージで有用です。1GB の RAM ディスクバックストアを作成するには、次のコマンドを使用します。
/> backstores/ramdisk/ create name=rd_backend size=1GB Generating a wwn serial. Created rd_mcp ramdisk rd_backend with size 1GB.
25.1.3. iSCSI ターゲットの作成
iSCSI ターゲットを作成するには、次のコマンドを実行します。
手順25.1 iSCSI ターゲットの作成
- targetcli を実行します。
- iSCSI 設定パスに移動します。
/> iscsi/
注記cd コマンドは、ディレクトリーの変更も許可され、移動先のパスを一覧表示するだけです。 - デフォルトのターゲット名を使用して iSCSI ターゲットを作成します。
/iscsi> create Created target iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.78b473f296ff Created TPG1
または、指定した名前を使用して iSCSI ターゲットを作成します。/iscsi > create iqn.2006-04.com.example:444 Created target iqn.2006-04.com.example:444 Created TPG1
- ls を使用してターゲットが一覧表示されるときに、新しく作成されたターゲットが表示されていることを確認します。
/iscsi > ls o- iscsi.......................................[1 Target] o- iqn.2006-04.com.example:444................[1 TPG] o- tpg1...........................[enabled, auth] o- acls...............................[0 ACL] o- luns...............................[0 LUN] o- portals.........................[0 Portal]
注記
Red Hat Enterprise Linux 7.1 以降では、ターゲットを作成するたびに、デフォルトのポータルも作成されます。
25.1.4. iSCSI ポータルの設定
iSCSI ポータルを設定するには、iSCSI ターゲットを作成し、それを TPG に関連付ける必要があります。手順は、「iSCSI ターゲットの作成」 を参照してください。
注記
Red Hat Enterprise Linux 7.1 以降では、iSCSI ターゲットを作成すると、デフォルトのポータルも作成されます。このポータルは、デフォルトのポート番号 (0.0.0.0:3260) を持つすべての IP アドレスをリッスンするように設定されています。これを削除し、指定されたポータルのみを追加するには、/iscsi/iqn-name/tpg1/portals delete ip_address=0.0.0.0 ip_port=3260 を使用し、必要な情報で新しいポータルを作成します。
手順25.2 iSCSI ポータルの作成
- TPG に移動します。
/iscsi> iqn.2006-04.example:444/tpg1/
- ポータルを作成する方法は、デフォルトのポータルを作成する方法と、リッスンする IP アドレスを指定するポータルを作成する方法の 2 つがあります。デフォルトのポータルを作成すると、デフォルトの iSCSI ポート 3260 が使用され、ターゲットがそのポートのすべての IP アドレスをリッスンできるようになります。
/iscsi/iqn.20...mple:444/tpg1> portals/ create Using default IP port 3260 Binding to INADDR_Any (0.0.0.0) Created network portal 0.0.0.0:3260
リッスンする IP アドレスを指定するポータルを作成するには、次のコマンドを使用します。/iscsi/iqn.20...mple:444/tpg1> portals/ create 192.168.122.137 Using default IP port 3260 Created network portal 192.168.122.137:3260
- 新しく作成したポータルが ls コマンドで表示されていることを確認します。
/iscsi/iqn.20...mple:444/tpg1> ls o- tpg.................................. [enambled, auth] o- acls ......................................[0 ACL] o- luns ......................................[0 LUN] o- portals ................................[1 Portal] o- 192.168.122.137:3260......................[OK]
25.1.5. LUN の設定
LUN を設定するには、最初にストレージオブジェクトを作成します。詳細は、「バックストアの作成」 を参照してください。
手順25.3 LUN の設定
- 作成したストレージオブジェクトの LUN を作成します。
/iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/ramdisk/rd_backend Created LUN 0. /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/block/block_backend Created LUN 1. /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/fileio/file1 Created LUN 2.
- 変更を表示します。
/iscsi/iqn.20...mple:444/tpg1> ls o- tpg.................................. [enambled, auth] o- acls ......................................[0 ACL] o- luns .....................................[3 LUNs] | o- lun0.........................[ramdisk/ramdisk1] | o- lun1.................[block/block1 (/dev/vdb1)] | o- lun2...................[fileio/file1 (/foo.img)] o- portals ................................[1 Portal] o- 192.168.122.137:3260......................[OK]
注記デフォルトの LUN 名は 0 で始まります。これは、Red Hat Enterprise Linux 6 で tgtd を使用する場合にあった 1 とは対照的です。 - ACL を設定します。詳細は、「ACL の設定」 を参照してください。
重要
デフォルトでは、読み書きパーミッションを持つ LUN が作成されます。ACL を作成してから新しい LUN を追加すると、その LUN は、利用可能なすべての ACL に自動的にマッピングされます。セキュリティーリスクが発生する可能性があります。以下の手順に従って、読み取り専用として LUN を作成します。
手順25.4 読み取り専用 LUN の作成
- 読み取り専用権限で LUN を作成するには、最初に次のコマンドを使用します。
/> set global auto_add_mapped_luns=false Parameter auto_add_mapped_luns is now 'false'.
これにより、LUN が既存の ACL へ自動的にマッピングされないようになり、LUN を手動でマッピングできるようになります。 - 次に、iscsi/target_iqn_name/tpg1/acls/initiator_iqn_name/ create mapped_lun=next_sequential_LUN_number tpg_lun_or_backstore=backstore write_protect=1 コマンドを使用して、LUN を手動で作成します。
/> iscsi/iqn.2015-06.com.redhat:target/tpg1/acls/iqn.2015-06.com.redhat:initiator/ create mapped_lun=1 tpg_lun_or_backstore=/backstores/block/block2 write_protect=1 Created LUN 1. Created Mapped LUN 1. /> ls o- / ...................................................... [...] o- backstores ........................................... [...] <snip> o- iscsi ......................................... [Targets: 1] | o- iqn.2015-06.com.redhat:target .................. [TPGs: 1] | o- tpg1 ............................ [no-gen-acls, no-auth] | o- acls ....................................... [ACLs: 2] | | o- iqn.2015-06.com.redhat:initiator .. [Mapped LUNs: 2] | | | o- mapped_lun0 .............. [lun0 block/disk1 (rw)] | | | o- mapped_lun1 .............. [lun1 block/disk2 (ro)] | o- luns ....................................... [LUNs: 2] | | o- lun0 ...................... [block/disk1 (/dev/vdb)] | | o- lun1 ...................... [block/disk2 (/dev/vdc)] <snip>
(mapped_lun0 の (rw) とは異なり) mapped_lun1 行の最後に (ro) が表示されますが、これは、読み取り専用であることを表しています。 - ACL を設定します。詳細は、「ACL の設定」 を参照してください。
25.1.6. ACL の設定
接続する各イニシエーターに ACL を作成します。これにより、イニシエーターが接続する際に認証が強制され、各イニシエーターに公開できるのは LUN のみとなります。通常、各イニシエーターは LUN への排他的アクセス権を持っています。ターゲットとイニシエーターにはどちらも一意の識別名があります。ACL を設定するには、イニシエーターの一意の名前がわかっている必要があります。open-iscsi イニシエーターの場合は、
/etc/iscsi/initiatorname.iscsi
にあります。
手順25.5 ACL の設定
- acls ディレクトリーに移動します。
/iscsi/iqn.20...mple:444/tpg1> acls/
- ACL を作成します。イニシエーターの
/etc/iscsi/initiatorname.iscsi
にあるイニシエーター名を使用するか、覚えやすい名前を使用する場合は、「iSCSI イニシエーターの作成」 を参照して、ACL がイニシエーターと一致するようにします。以下に例を示します。/iscsi/iqn.20...444/tpg1/acls> create iqn.2006-04.com.example.foo:888 Created Node ACL for iqn.2006-04.com.example.foo:888 Created mapped LUN 2. Created mapped LUN 1. Created mapped LUN 0.
注記指定した例の動作は、使用される設定によって異なります。この場合、グローバル設定 auto_add_mapped_luns が使用されます。これにより、作成された ACL に LUN が自動的にマッピングされます。ターゲットサーバーの TPG ノードに、ユーザーが作成した ACL を設定します。/iscsi/iqn.20...scsi:444/tpg1>
set attribute generate_node_acls=1 - 変更を表示します。
/iscsi/iqn.20...444/tpg1/acls> ls o- acls .................................................[1 ACL] o- iqn.2006-04.com.example.foo:888 ....[3 Mapped LUNs, auth] o- mapped_lun0 .............[lun0 ramdisk/ramdisk1 (rw)] o- mapped_lun1 .................[lun1 block/block1 (rw)] o- mapped_lun2 .................[lun2 fileio/file1 (rw)]
25.1.7. ファイバーチャネルオーバーイーサネット (FCoE) ターゲットの設定
「ファイバーチャネルオーバーイーサネットインターフェイスの設定」 で説明されているように、FCoE 経由で LUN をマウントする以外にも、targetcli を使用して FCoE 経由で他のマシンに LUN をエクスポートすることもできます。
重要
続行する前に、「ファイバーチャネルオーバーイーサネットインターフェイスの設定」 を参照して、基本的な FCoE 設定が完了し、fcoeadm -i が設定した FCoE インターフェイスを表示することを確認します。
手順25.6 FCoE ターゲットの設定
- FCoE ターゲットを設定するには、
targetcli
パッケージとその依存関係をインストールする必要があります。targetcli の基本および設定に関する詳細は、「ターゲットの設定」 を参照してください。 - FCoE インターフェイスに FCoE ターゲットインスタンスを作成します。
/> tcm_fc/ create 00:11:22:33:44:55:66:77
FCoE インターフェイスがシステムに存在する場合は、create の後にタブ補完を実行すると、利用可能なインターフェイスが一覧表示されます。そうでない場合は、fcoeadm -i
が有効なインターフェイスを表示していることを確認します。 - バックストアをターゲットインスタンスにマッピングします。
例25.1 ターゲットインスタンスへのバックストアのマッピングの例
/> tcm_fc/00:11:22:33:44:55:66:77
/> luns/ create /backstores/fileio/example2
- FCoE イニシエーターから LUN へのアクセスを許可します。
/> acls/ create 00:99:88:77:66:55:44:33
これにより、そのイニシエーターが LUN にアクセスできるようになります。 - 再起動後も変更を永続化するには、saveconfig コマンドを使用し、プロンプトが表示されたら yes と入力します。これを行わないと、システムの再起動後に設定が失われます。
- exit を入力するか、または ctrl+D を入力して targetcli を終了します。
25.1.8. targetcliを使用したオブジェクトの削除
バックストアを削除するには、次のコマンドを実行します。
/> /backstores/backstore-type/backstore-name
ACL などの iSCSI ターゲットの一部を削除する場合は、次のコマンドを使用します。
/> /iscsi/iqn-name/tpg/acls/ delete iqn-name
すべての ACL、LUN、およびポータルを含むターゲット全体を削除するには、次のコマンドを使用します。
/> /iscsi delete iqn-name
25.1.9. targetcli リファレンス
targetcli の詳細は、以下の資料を参照してください。
- man targetcli
- man ページの targetcliこれには、サンプルウォークスルーが含まれます。
- Linux SCSI ターゲット Wiki
- Andy Grover によるスクリーンキャスト
- 注記これは、2012 年 2 月 28 日にアップロードされました。そのため、サービス名が targetcli から ターゲット に変更されました。