第24章 オンラインストレージ管理

オペレーティングシステムを稼動させたまま再起動せずにストレージデバイスの追加、削除、またはサイズ変更を実行したい場合がよくあります。本章では、 Red Hat Enterprise Linux 7 のホストシステムを稼動させたままでシステム上のストレージデバイスを再設定する手順について簡単に説明しています。さらに、本章では iSCSI およびファイバーチャネルのストレージ相互接続について扱います。他のタイプについての詳細は今後追加していく予定です。
本章では、ストレージデバイスの追加、削除、変更、モニターを中心に説明します。ファイバーチャネルおよび iSCSI プロトコルについては詳細に説明しません。プロトコルについては他のドキュメントを参照してください。
さまざまな sysfs オブジェクトを参照しますが、このオブジェクトの名前やディレクトリー構成は Red Hat Enterprise Linux の主要なリリースごとに変更されます。これは、アップストリームとなる Linux カーネルで安定した内部 API が提供されていないためです。移行が可能な方法で sysfs オブジェクトを参照する方法についてのガイドラインは、カーネルソースツリーにある /usr/share/doc/kernel-doc-version/Documentation/sysfs-rules.txt を参照してください。

警告

オンラインでのストレージの再設定は慎重に行ってください。プロセス中のシステム障害や中断は予期しない結果を招く恐れがあります。変更の操作を行っている間は、エクステントが最大となるようシステム負荷をできるだけ軽減させることをお勧めします。これにより、設定変更の途中で入出力エラーやメモリー不足によるエラーなどが発生する可能性が低減します。次のセクションでは、これに関してさらに詳しく説明します。
また、オンラインストレージの再設定を行う前にすべてのデータのバックアップを取ることを推奨します。

24.1. ターゲットの設定

Red Hat Enterprise Linux 7 では、targetcli シェルを、Linux-IO ターゲットの設定を表示、編集、および保存するためのフロンドエンドとして使用するため、カーネルターゲットの設定ファイルを直接操作する必要はありません。targetcli ツールはコマンドラインインターフェースで、管理者はこれを使用してファイル、ボリューム、ローカル SCSI デバイス、または RAM ディスクに関連付けられたローカルストレージリソースをリモートにエクスポートできます。targetcli ツールははツリーベースのレイアウトと、組み込みのタブ補完が含まれ、完全な自動補完サポートとインラインドキュメントを提供します。
targetcli の階層は、カーネルのインターフェースに常に一致するとは限りません。これは、targetcli が可能な限り簡素化されているためです。

重要

targetcli の変更内容を永続化するには、ターゲットサービスを開始し、有効にします。
# systemctl start target
# systemctl enable target

24.1.1. targetcli のインストールおよび実行

targetcli をインストールするには、以下を実行します。
# yum install targetcli
target を開始するには、以下を実行します。
# systemctl start target
target サービスがブート時に起動するように設定するには、以下を実行します。
# systemctl enable target
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 からは、エラーステータスコードが出力されるようになったため、shell スクリプトで targetcli が使いやすくなりました。

24.1.2. バックストアの作成

バックストアは、ローカルマシンにエクスポートされた LUN のデータを保存するさまざまな方法に対応します。ストレージオブジェクトを作成して、バックストアが使用するリソースを定義します。

注記

Red Hat Enterprise Linux 6 では、作成されたマッピングを「バッキングストア」と呼びました。他の意味で使用される「バッキングストア」と混合しないように、Red Hat Enterprise Linux 7 では、作成されたマッピングを「ストレージオブジェクト」と呼び、別のバッキングデバイスを示す場合は「バックストア」と呼んでいます。
LIO がサポートするバックストアデバイスは次のとおりです。
FILEIO (Linux ファイルと関連付けられたストレージ)
FILEIO ストレージオブジェクトは、write_back または write_thru 操作のいずれかをサポートします。write_back はローカルファイルシステムキャッシュを有効にします。これにより、パフォーマンスが向上しますが、データ損失のリスクが大きくなります。write_back=false を使用して write_back を無効にし、 write_thru を利用することが推奨されます。
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 バックストアは最良のパフォーマンスを提供します。
/dev/sdb ブロックデバイスを使用して BLOCK バックストアを作成するには、以下のコマンドを実行します。
/> /backstores/block create name=block_backend dev=/dev/sdb
Generating a wwn serial.
Created block storage object block_backend using /dev/sdb.
PSCSI (Linux パススルー SCSI デバイス)
SCSI エミュレーションなしで SCSI コマンドの直接パススルーをサポートするストレージオブジェクト、および /proc/scsi/scsi に lsscsi とともに表示される基盤の SCSI デバイスで SCSI コマンドの直接パススルーをサポートするストレージオブジェクトは、バックストアとして設定できます。SCSI-3 以上がこのサブシステムによってサポートされます。

警告

PSCSI は上級ユーザーのみが使用するようにしてください。非対称論理ユニット割り当て (ALUA) や永続予約 ( VMware ESX や vSphere によって使用される永続予約など) は、通常はデバイスのファームウェアに実装されず、誤作動やクラッシュが発生する原因となることがあります。確信が持てない場合、実稼働の設定には BLOCK を使用してください。
この例の /dev/sr0 を使用して物理 SCSI デバイスである 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 ディスクを提供します。メモリーコピー RAM ディスクはマルチセッションの機能を提供し、実稼働を目的とした高速で不安定なマスストレージでは特に便利です。
1 GB の RAM ディスクバックストアを作成するには、以下のコマンドを実行します。
/> backstores/ramdisk/ create name=rd_backend size=1GB
Generating a wwn serial.
Created rd_mcp ramdisk rd_backend with size 1GB.

24.1.3. iSCSI ターゲットの作成

iSCSI ターゲットを作成するには、以下の手順に従います。

手順24.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 では、ターゲットが作成されるとデフォルトのポータルも作成されます。

24.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 を使用し、必要な情報で新しいポータルを作成します。

手順24.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]

24.1.5. LUN の設定

LUN を設定するには、最初にストレージオブジェクトを作成します。詳細は 「バックストアの作成」 を参照してください。

手順24.3 LUN の設定

  1. 作成済みのストレージオブジェクトの LUN を作成します。
    /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/ramdisk/ramdisk1
    Created LUN 0.
    
    /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/block/block1
    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 で始まっていました。

重要

デフォルトでは、 読み書きパーミッションを持つ LUN が作成されます。ACL が作成された後に新しい LUN が追加された場合、その LUN は利用可能なすべての ACL に自動的にマップされます。これはセキュリティー上のリスクとなります。以下の手順に従って、読み取り専用の LUN を作成します。

手順24.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) が表示されますが、これは、読み取り専用であることを表しています。

24.1.6. ACL の設定

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

手順24.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 が使用されます。これは、LUN を作成された ACL に自動的にマップします。
  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)]

24.1.7. ファイバーチャネルオーバーイーサネット (FCoE) ターゲットの設定

targetcli を使用すると、「ファイバーチャネルオーバーイーサネットインターフェースの設定」 で説明した FCoE における LUN のマウントの他に、FCoE の他のマシンへ LUN をエクスポートすることもサポートされます。

重要

次に進む前に、「ファイバーチャネルオーバーイーサネットインターフェースの設定」 を参照して、基本的な FCoE 設定が完了しており、fcoeadm -i を実行すると、設定した FCoE インターフェースが表示されることを確認してください。

手順24.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. バックストアをターゲットインスタンスにマッピングします。

    例24.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 を終了します。

24.1.8. targetcli を使用したオブジェクトの削除

バックストアを削除するには、以下のコマンドを使用します。
/> /backstores/backstore-type/backstore-name
ACL などの iSCSI ターゲットの一部を削除するには、以下のコマンドを使用します。
/> /iscsi/iqn-name/tpg/acls/ delete iqn-name
(ACL、LUN、およびポータルのすべてを含む) ターゲット全体を削除するには、以下のコマンドを使用します。
/> /iscsi delete iqn-name

24.1.9. targetcli のリファレンス

targetcli の詳細については、次のリソースを参照してください。
man targetcli
targetcli の man ページ。ウォークスルーの例が含まれています。
Linux SCSI Target Wiki
Andy Grover によるスクリーンキャスト

注記

この動画は 2012 年 2 月 28 日にアップロードされたため、サービス名が targetcli から target に変更されています。