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 エラー、メモリー不足のエラー、または設定変更の midst に含まれる同様のエラーが発生する可能性が低くなります。以下のセクションでは、これに関する具体的なガイドラインを説明します。
さらに、Red Hat では、オンラインストレージを再設定する前に、すべてのデータのバックアップを作成することを推奨します。 

25.1. ターゲットのセットアップ

Red Hat Enterprise Linux 7 では、targetcli シェルをフロントエンドとして使用し、カーネルターゲットの設定ファイルを操作せずに Linux-IO ターゲットの設定を表示、編集、および保存します。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 では、targetcli iscsi/ create などの Bash からの targetcli コマンドを使用しても機能せず、エラーを返しません。Red Hat Enterprise Linux 7.1 以降、シェルスクリプトを含む targetcli を使用してより有用なエラーステータスコードが提供されます。

25.1.2. バックストアの作成

バックストアは、エクスポートした LUN のデータをローカルマシンに保存するさまざまな方法に対応します。ストレージオブジェクトを作成して、バックストアが使用するリソースを定義します。
注記
Red Hat Enterprise Linux 6 では、作成したマッピングを参照するには「backing-store」という用語を使用します。ただし、Red Hat Enterprise Linux 7 では、さまざまな方法の「バックストア」との混乱を避けるため、ストレージオブジェクト という用語は、作成したマッピングと「バックストア」という用語を使用して、バッキングデバイスの各種タイプを記述します。
LIO がサポートするバックストアデバイスは以下のとおりです。
FILEIO(Linux ファイルでサポートされるストレージ)
FILEIO ストレージオブジェクトは、write_back 操作または write_thru 操作のいずれかに対応しますwrite_back は、ローカルファイルシステムのキャッシュを有効にします。これにより、パフォーマンスが向上しますが、データの損失のリスクが高まります。 write_thru が優先されるため、write_back=false を使用して write_back を無効にすることが推奨されます。
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 は上級ユーザーのみが使用する必要があります。Aysmmetric Logical Unit Assignment(ALUA)や永続予約(VMware ESX や vSphere など)などの高度な SCSI コマンドは、通常はデバイスのファームウェアに実装されず、誤作動やクラッシュが生じる可能性があります。疑わしい場合は、実稼働の設定に 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 ターゲットの作成」
注記
iSCSI ターゲットが作成されると、Red Hat Enterprise Linux 7.1 ではデフォルトのポータルも作成されます。このポータルは、デフォルトのポート番号(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 アドレスを指定するポータルを作成します。
    デフォルトポータルを作成するには、デフォルトの 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/mapped_lun= next_lun=next_sequential_LUN_number tpg_lun_or_backstore = Backstorewrite_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 のみを公開できます。通常、各 initator は 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 イニシエーターの作成」 がイニシエーターと一致するようにします。以下に例を示します。
    /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 に自動的にマッピングされます。
    ターゲットサーバーの 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(Fibre Channel over Ethernet)ターゲットの設定

「FCoE を使用した他のマシンへの LUN 「Fibre Channel over Ethernet インターフェースの設定」 の aid にも対応しています。
重要
次に進む前に、基本的な FCoE 「Fibre Channel over Ethernet インターフェースの設定」 で、設定した FCoE インターフェースが表示されます。

手順25.6 FCoE ターゲットの設定

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

    例25.1 Backstore をターゲットインスタンスにマッピングする例

    /> 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 と入力して targetcli を終了するか、ctrl+D を入力します

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 References

targetcli の詳細は、以下のリソースを参照してください。
man targetcli
man ページの targetcliこれにはウォークスルーの例が含まれます。
Linux SCSI ターゲット Wiki
Andy Grover によるスクリーンキャスト
注記
これは 2012 年 2 月 28 日にアップロードされました。そのため、サービス名が targetcli から target に変更されました。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。