Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第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
target サービスを起動します。
# systemctl start target
起動時に開始するように 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 で lsscsi とともに表示される基盤の SCSI デバイス (SAS ハードドライブなど) は、バックストアとして設定できます。このサブシステムでは、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 ターゲットの作成

  1. targetcli を実行します。
  2. iSCSI 設定パスに移動します。
    /> iscsi/
    注記
    cd コマンドは、ディレクトリーを変更する場合や、移動先のパスを一覧表示する場合にも使用できます。
  3. デフォルトのターゲット名を使用して 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
  4. ターゲットが 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 ポータルの作成

  1. TPG に移動します。
    /iscsi> iqn.2006-04.example:444/tpg1/
  2. ポータルを作成する方法は、デフォルトのポータルを作成する方法と、リッスンする 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
    
  3. 新しく作成したポータルが 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 の設定

  1. 作成したストレージオブジェクトの 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.
    
  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 だった点とは異なることに注意してください。
  3. ACL を設定します。詳細は、「ACL の設定」 を参照してください。
重要
デフォルトでは、読み書きパーミッションを持つ LUN が作成されます。ACL を作成してから新しい LUN を追加すると、その LUN は、利用可能なすべての ACL に自動的にマッピングされます。セキュリティーリスクが発生する可能性があります。以下の手順に従って、読み取り専用として LUN を作成します。

手順25.4 読み取り専用 LUN の作成

  1. 読み取り専用権限で LUN を作成するには、最初に次のコマンドを使用します。
    /> set global auto_add_mapped_luns=false
    Parameter auto_add_mapped_luns is now 'false'.
    
    これにより、LUN が既存の ACL へ自動的にマッピングされないようになり、LUN を手動でマッピングできるようになります。
  2. 次に、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) が表示されますが、これは、読み取り専用であることを表しています。
  3. ACL を設定します。詳細は、「ACL の設定」 を参照してください。

25.1.6. ACL の設定

接続する各イニシエーターに ACL を作成します。これにより、イニシエーターが接続する際に認証が強制され、各イニシエーターに公開できるのは LUN のみとなります。通常、各イニシエーターは LUN への排他的アクセス権を持っています。ターゲットとイニシエーターにはどちらも一意の識別名があります。ACL を設定するには、イニシエーターの一意の名前がわかっている必要があります。open-iscsi イニシエーターの場合は、/etc/iscsi/initiatorname.iscsi にあります。

手順25.5 ACL の設定

  1. acls ディレクトリーに移動します。
    /iscsi/iqn.20...mple:444/tpg1> acls/
  2. 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
  3. 変更を表示します。
    /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 ターゲットの設定

  1. FCoE ターゲットを設定するには、targetcli パッケージとその依存関係をインストールする必要があります。targetcli の基本および設定に関する詳細は、「ターゲットの設定」 を参照してください。
  2. FCoE インターフェースに FCoE ターゲットインスタンスを作成します。
    /> tcm_fc/ create 00:11:22:33:44:55:66:77
    FCoE インターフェースがシステムに存在する場合は、create の後にタブ補完を実行すると、利用可能なインターフェースが一覧表示されます。そうでない場合は、fcoeadm -i が有効なインターフェースを表示していることを確認します。
  3. バックストアをターゲットインスタンスにマッピングします。

    例25.1 ターゲットインスタンスへのバックストアのマッピングの例

    /> tcm_fc/00:11:22:33:44:55:66:77
    /> luns/ create /backstores/fileio/example2
  4. FCoE イニシエーターから LUN へのアクセスを許可します。
    /> acls/ create 00:99:88:77:66:55:44:33
    これにより、そのイニシエーターが LUN にアクセスできるようになります。
  5. システムの再起動後も変更を持続させるには、saveconfig コマンドを使用して、プロンプトが表示されたら yes と入力します。これを行わないと、システムの再起動後に設定が失われます。
  6. 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 から target に変更になりました。