第6章 iSCSI の使用

Red Hat Enterprise Linux 8 では、targetcli シェルをコマンドラインインターフェースとして使用し、以下の操作を実行します。

  • iSCSI ハードウェアを使用できるように iSCSI ストレージ相互接続を追加、削除、表示、監視します。
  • ファイル、ボリューム、ローカル SCSI デバイス、またはリモートシステムへの RAM ディスクで対応しているローカルストレージリソースをエクスポートします。

targetcli ツールには、組み込みタブ補完、自動補完サポート、インラインドキュメントなどのツリーベースのレイアウトがあります。

6.1. iSCSI ターゲットの作成

システム管理者は、targetcli ツールを使用して iSCSI ターゲットを追加できます。

6.1.1. targetcli のインストール

targetcli ツールをインストールして、iSCSI ストレージの相互接続を追加、監視、削除します。

手順

  1. targetcli をインストールします。

    # yum install targetcli
  2. ターゲットサービスを起動します。

    # systemctl start target
  3. システムの起動時にターゲットサービスが起動するように設定するには、次のコマンドを実行します。

    # systemctl enable target
  4. ファイアウォールの 3260 ポートを開き、ファイアウォール設定を再読み込みします。

    # firewall-cmd --permanent --add-port=3260/tcp
    Success
    
    # firewall-cmd --reload
    Success
  5. targetcli レイアウトを表示します。

    # targetcli
    /> ls
    o- /........................................[...]
      o- backstores.............................[...]
      | o- block.................[Storage Objects: 0]
      | o- fileio................[Storage Objects: 0]
      | o- pscsi.................[Storage Objects: 0]
      | o- ramdisk...............[Storage Objects: 0]
      o- iscsi...........................[Targets: 0]
      o- loopback........................[Targets: 0]

関連情報

  • man ページの targetcli

6.1.2. iSCSI ターゲットの作成

iSCSI ターゲットを作成すると、クライアントの iSCSI イニシエーターが、サーバーのストレージデバイスにアクセスできるようになります。ターゲットとイニシエーターにはどちらも一意の識別名があります。

前提条件

手順

  1. iSCSI ディレクトリーに移動します。

    /> iscsi/
    注記

    cd コマンドは、ディレクトリーを変更したり、移動するパスの一覧を表示するために使用されます。

  2. iSCSI ターゲットを作成するには、以下のいずれかのオプションを使用します。

    1. デフォルトのターゲット名を使用した iSCSI ターゲットの作成:

      /iscsi> create
      
      Created target
      iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.78b473f296ff
      Created TPG1
    2. 特定の名前を使用した iSCSI ターゲットの作成:

      /iscsi> create iqn.2006-04.com.example:444
      
      Created target iqn.2006-04.com.example:444
      Created TPG1
      Here iqn.2006-04.com.example:444 is target_iqn_name

      iqn.2006-04.com.example:444 を、特定のターゲット名に置き換えます。

  3. 新たに作成されたターゲットを確認します。

    /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]

関連情報

  • man ページの targetcli

6.1.3. iSCSI バックストア

iSCSI バックストアは、エクスポートした LUN のデータをローカルマシンに保存するさまざまな方法に対応します。ストレージオブジェクトを作成して、バックストアが使用するリソースを定義します。管理者は、LIO (Linux-IO) が対応する以下のバックストアデバイスのいずれかを選択できます。

  • fileio バックストア - ローカルファイルシステム上の通常のファイルをディスクイメージとして使用する場合は、fileio ストレージオブジェクトを作成します。fileio バックストアを作成する方法は、「fileio ストレージオブジェクトの作成」を参照してください。
  • block バックストア - ローカルのブロックデバイスおよび論理デバイスを使用している場合には、ブロック ストレージオブジェクトを作成します。ブロック バックストアを作成する方法は、「ブロックストレージオブジェクトの作成」を参照してください。
  • pscsi バックストア - ストレージ オブジェクトが SCSI コマンドの直接パススルーに対応している場合は、PSCSI ストレージオブジェクトを作成します。pscsi バックストアを作成する方法は、「pscsi ストレージオブジェクトの作成」を参照してください。
  • ramdisk バックストア - 一時的な RAM 対応デバイスを作成する場合は、ramdisk ストレージオブジェクトを作成します。ramdisk バックストアを作成する方法は、「メモリーコピーの RAM ディスクストレージオブジェクトの作成」を参照してください。

関連情報

  • man ページの targetcli

6.1.4. fileio ストレージオブジェクトの作成

fileio ストレージオブジェクトは、write_back 操作または write_ thru 操作のいずれかに対応します。write_back 操作では、ローカルファイルシステムキャッシュが有効になります。これにより、パフォーマンスが向上しますが、データの損失のリスクが高まります。write_thru 操作を優先させるために、write_back=false を使用して write_back 操作を無効にすることが推奨されます。

前提条件

手順

  1. バックストアディレクトリーへ移動します。

    /> backstores/
  2. fileio ストレージオブジェクトを作成します。

    /> backstores/fileio create file1 /tmp/disk1.img 200M write_back=false
    
    Created fileio file1 with size 209715200
  3. 作成された fileio ストレージオブジェクトを確認します。

    /backstores> ls

関連情報

  • man ページの targetcli

6.1.5. ブロックストレージオブジェクトの作成

ブロックドライバーを使用すると、/sys/block/ ディレクトリーにあるブロックデバイスを LIO (Linux-IO) で使用できます。これには物理デバイス (HDD、SSD、CD、DVD など) および論理デバイス (ソフトウェアまたはハードウェアの RAID ボリューム、LVM ボリュームなど) が含まれます。

前提条件

手順

  1. バックストアディレクトリーへ移動します。

    /> backstores/
  2. ブロック バックストアを作成します。

    /> backstores/block create name=block_backend dev=/dev/sdb
    
    Generating a wwn serial.
    Created block storage object block_backend using /dev/vdb.
  3. 作成された ブロック ストレージオブジェクトを確認します。

    /backstores> ls
    注記

    ブロックバックストアは、論理ボリュームにも作成できます。

関連情報

  • man ページの targetcli

6.1.6. pscsi ストレージオブジェクトの作成

SCSI エミュレーションなしで SCSI コマンドの直接パススルーに対応するストレージオブジェクト、および /proc/scsi/scsilsscsi とともに表示される基盤の SCSI デバイス (SAS ハードドライブなど) で SCSI コマンドの直接パススルーに対応するストレージオブジェクトは、バックストアとして設定できます。このサブシステムでは、SCSI-3 以降に対応しています。

警告

pscsi は、上級ユーザーのみが使用してください。非対称論理ユニット割り当て (ALUA) や永続予約 (VMware ESX や vSphere で使用される永続予約など) は、通常はデバイスのファームウェアに実装されず、誤作動やクラッシュが発生する原因となることがあります。確信が持てない場合は、実稼働の設定に ブロック バックストアを使用してください。

前提条件

手順

  1. バックストアディレクトリーへ移動します。

    /> backstores/
  2. この例では、/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
  3. 作成した pscsi ストレージオブジェクトを確認します。

    /backstores> ls

関連情報

  • man ページの targetcli

6.1.7. メモリーコピーの RAM ディスクストレージオブジェクトの作成

メモリーコピー RAM ディスク (ramdisk) は、完全な SCSI エミュレーションと、イニシエーターのメモリーコピーを使用した個別のメモリーマッピングが含まれる RAM ディスクを提供します。これにより、マルチセッションの機能を利用できます。これは、特に実稼働環境での高速で不揮発性の大容量ストレージで有用です。

前提条件

手順

  1. バックストアディレクトリーへ移動します。

    /> backstores/
  2. 1GB RAM ディスクバックストアを作成します。

    /> backstores/ramdisk/ create name=rd_backend size=1GB
    
    Generating a wwn serial.
    Created rd_mcp ramdisk rd_backend with size 1GB.
  3. 作成した ramdisk ストレージオブジェクトを確認します。

    /backstores> ls

関連情報

  • man ページの targetcli

6.1.8. iSCSI ポータルの作成

iSCSI ポータルを作成すると、ターゲットの有効性を維持するターゲットに IP アドレスとポートが追加されます。

前提条件

手順

  1. TPG ディレクトリーに移動します。

    /iscsi> iqn.2006-04.example:444/tpg1/
  2. iSCSI ポータルを作成するには、以下のいずれかのオプションを使用します。

    1. デフォルトポータルを作成するには、デフォルトの 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
      注記

      iSCSI ターゲットが作成されると、デフォルトのポータルも作成されます。このポータルは、デフォルトのポート番号 0.0.0.0:3260 ですべての IP アドレスをリッスンするように設定されます。

      デフォルトポータルを削除するには、次のコマンドを実行します。

      /iscsi/iqn-name/tpg1/portals delete ip_address=0.0.0.0 ip_port=3260

    2. 特定の 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. 新たに作成されたポータルを確認します。

    /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]

関連情報

  • man ページの targetcli

6.1.9. iSCSI LUN の作成

論理ユニット番号 (LUN) は、iSCSI バックストアで対応している物理デバイスです。各 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. 作成した LUN を確認します。

    /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 から始まります。

    重要

    デフォルトでは、読み書きパーミッションを持つ LUN が作成されます。ACL の作成後に新しい LUN が追加されると、LUN は自動的に利用可能なすべての ACL にマッピングされ、セキュリティー上のリスクが発生します。読み取り専用パーミッションで LUN を作成するには、「読み取り専用の iSCSI LUN の作成」を参照してください。

関連情報

  • man ページの targetcli

6.1.10. 読み取り専用の iSCSI LUN の作成

デフォルトでは、読み書きパーミッションを持つ LUN が作成されます。この手順では、読み取り専用の LUN を作成する方法を説明します。

前提条件

手順

  1. 読み取り専用パーミッションを設定します。

    /> set global auto_add_mapped_luns=false
    
    Parameter auto_add_mapped_luns is now 'false'.

    これにより、LUN が既存の ACL へ自動的にマッピングされないようになり、LUN を手動でマッピングできるようになります。

  2. 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

    例:

    /> iscsi/iqn.2006-04.example:444/tpg1/acls/2006-04.com.example.foo:888/ create mapped_lun=1 tpg_lun_or_backstore=/backstores/block/block2 write_protect=1
    
    Created LUN 1.
    Created Mapped LUN 1.
  3. 作成した LUN を確認します。

    /> ls
    
    o- / ...................................................... [...]
      o- backstores ........................................... [...]
      <snip>
      o- iscsi ......................................... [Targets: 1]
      | o- iqn.2006-04.example:444 .................. [TPGs: 1]
      |   o- tpg1 ............................ [no-gen-acls, no-auth]
      |     o- acls ....................................... [ACLs: 2]
      |     | o- 2006-04.com.example.foo:888 .. [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) が表示されますが、これは、読み取り専用であることを表しています。

関連情報

  • man ページの targetcli

6.1.11. iSCSI ACL の作成

targetcli では、アクセス制御リスト (ACL) は、アクセスルールの定義に使用され、各イニシエーターは LUN への排他的なアクセスを持ちます。ターゲットとイニシエーターにはどちらも一意の識別名があります。ACL を設定するには、イニシエーターの一意の名前を知っている必要があります。iSCSI イニシエーターは /etc/iscsi/initiatorname.iscsi ファイルで確認できます。

前提条件

手順

  1. acls ディレクトリーへ移動

    /iscsi/iqn.20...mple:444/tpg1> acls/
  2. ACL を作成するには、以下のいずれかのオプションを指定します。

    1. イニシエーターの /etc/iscsi/initiatorname.iscsi ファイルからのイニシエーター名の使用。
    2. 覚えやすい名前を使用します。ACL がイニシエーターと一致するようにするには、「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 は、作成した ACL に自動的にマッピングします。

      ターゲットサーバーの TPG ノードに、ユーザーが作成した ACL を設定します。

      /iscsi/iqn.20...scsi:444/tpg1> set attribute generate_node_acls=1
  3. 作成した ACL を確認します。

    /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)]

関連情報

  • man ページの targetcli

6.1.12. iSCSI イニシエーターの作成

iSCSI イニシエーターは iSCSI ターゲットに接続するセッションを形成します。iSCSI ターゲットの詳細は、「iSCSI ターゲットの作成」を参照してください。デフォルトでは、iSCSI サービスは起動に 時間がかかりiscsiadm コマンドの実行後にサービスが起動します。root が iSCSI デバイスにない場合や、node.startup = automatic でマークされたノードがない場合は、iscsiadm コマンドが実行するまで iSCSI サービスが起動しなくなります。これには、カーネルモジュール iscsid または iscsi の起動が必要になります。

iscsid デーモンを強制的に実行して、iSCSI カーネルモジュールを読み込むには、次のコマンドを実行します。

# systemctl start iscsid.service

前提条件

手順

  1. クライアントマシンに iscsi-initiator-utils をインストールします。

    # yum install iscsi-initiator-utils
  2. イニシエーター名を確認します。

    # cat /etc/iscsi/initiatorname.iscsi
    
    InitiatorName=2006-04.com.example.foo:888
  3. 「iSCSI ACL の作成」の ACL にカスタム名を付けた場合は、それに応じて /etc/iscsi/initiatorname.iscsi ファイルを変更します。

    # vi /etc/iscsi/initiatorname.iscsi
  4. ターゲットを検出し、表示されたターゲット IQN でターゲットにログインします。

    # iscsiadm -m discovery -t st -p 10.64.24.179
        10.64.24.179:3260,1 iqn.2006-04.example:444
    
    # iscsiadm -m node -T iqn.2006-04.example:444 -l
        Logging in to [iface: default, target: iqn.2006-04.example:444, portal: 10.64.24.179,3260] (multiple)
        Login to [iface: default, target: iqn.2006-04.example:444, portal: 10.64.24.179,3260] successful.

    10.64.24.179 を、target-ip-address に置き換えます。

    この手順では、「iSCSI ACL の作成」の説明に従ってイニシエーター名を ACL に追加していけば、同じターゲットに接続しているイニシエーターをいくつでも作成できます。

  5. iSCSI ディスク名を確認して、この iSCSI ディスクにファイルシステムを作成します。

    # grep "Attached SCSI" /var/log/messages
    
    # mkfs.ext4 /dev/disk_name

    disk_name を、/var/log/messages ファイルに記載されている iSCSI ディスク名に置き換えます。

  6. ファイルシステムをマウントします。

    # mkdir /mount/point
    
    # mount /dev/disk_name /mount/point

    /mount/point を、パーティションのマウントポイントに置き換えます。

  7. システムの起動時にファイルシステムを自動的にマウントするように /etc/fstab を編集します。

    # vi /etc/fstab
    
    /dev/disk_name /mount/point ext4 _netdev 0 0

    disk_name を iSCSI ディスク名に置き換え、/mount/point を、パーティションのマウントポイントに置き換えます。

関連情報

  • man ページの targetcli
  • man ページの iscsiadm

6.1.13. ターゲットのチャレンジハンドシェイク認証プロトコルの設定

ユーザーは、チャレンジハンドシェイク認証プロトコル (CHAP) を使用して、パスワードでターゲットを保護できます。イニシエーターは、このパスワードでターゲットに接続できることを認識している必要があります。

前提条件

手順

  1. 属性認証を設定します。

    /iscsi/iqn.20...mple:444/tpg1> set attribute authentication=1
    
    Parameter authentication is now '1'.
  2. ユーザー IDパスワード を設定します。

    /tpg1> set auth userid=redhat
    Parameter userid is now 'redhat'.
    
    /iscsi/iqn.20...689dcbb3/tpg1> set auth password=redhat_passwd
    Parameter password is now 'redhat_passwd'.

関連情報

  • man ページの targetcli

6.1.14. イニシエーター用のチャレンジハンドシェイク認証プロトコルの設定

ユーザーは、チャレンジハンドシェイク認証プロトコル (CHAP) を使用して、パスワードでターゲットを保護できます。イニシエーターは、このパスワードでターゲットに接続できることを認識している必要があります。

前提条件

手順

  1. iscsid.conf ファイルで CHAP 認証を有効にします。

    # vi /etc/iscsi/iscsid.conf
    
    node.session.auth.authmethod = CHAP

    デフォルトでは、node.session.auth.authmethodNone に設定されています。

  2. ターゲットの ユーザー名パスワードiscsid.conf ファイルに追加します。

    node.session.auth.username = redhat
    node.session.auth.password = redhat_passwd
  3. iscsid デーモンを起動します。

    # systemctl start iscsid.service

関連情報

  • man ページの iscsiadm