5 iSCSIデバイスの操作

警告:

Oracle Linux 7は現在延長サポート中です。詳細は、Oracle Linux拡張サポートおよびOracleオープン・ソース・サポート・ポリシーを参照してください。

できるだけ早くアプリケーションとデータをOracle Linux 8またはOracle Linux 9に移行してください。

この章では、データ・ストレージでのiSCSIデバイスの使用について説明します。

Linux-IOストレージ構成について

UEKおよびRHCKの両方を含むOracle Linux 7では、Linux-IOターゲット(LIO)を使用して、FCoE、iSCSIおよびMellanox InfiniBand (iSERおよびSRP)のブロック・ストレージSCSIターゲットが提供されます。LIOはtargetcliパッケージで提供されるtargetcliシェルを使用して管理できます。Mellanox InfiniBandはUEKでのみサポートされています。

Fibre Channel over Ethernet (FCoE)はファイバ・チャネル・パケットをEthernetフレームにカプセル化し、Ethernetネットワーク上でパケットを送信できるようにします。FCoEストレージを構成するには、fcoemonサービスおよびfcoeadmコマンドを提供するfcoe-utilsパッケージをインストールする必要もあります。

Internet Small Computer System Interface (iSCSI)は、ストレージ・デバイスを接続するためのIPベースの標準です。iSCSIはSCSIコマンドをIPネットワーク・パケットにカプセル化し、クライアント・システムによる長距離データ転送とストレージの共有を可能にします。iSCSIは既存のIPインフラストラクチャを使用するため、ファイバ・チャネル(FC)ストレージ・エリア・ネットワークの実装に必要な光ファイバ・ケーブルを購入して配線する必要がありません。

クライアント・システム(iSCSIイニシエータ)は、IPネットワークを介してストレージ・サーバー(iSCSIターゲット)にアクセスします。iSCSIイニシエータには、ストレージがローカルにアタッチされているように見えます。

通常、iSCSIターゲットはネットワークで接続された専用のストレージ・デバイスですが、汎用コンピュータを使用することもできます。

図5-1は、iSCSIターゲットにアタッチされた共有ストレージに複数のiSCSIイニシエータがアクセスする単純なネットワークを示しています。

図5-1 IPベース・ネットワーク経由で接続されたiSCSIイニシエータとiSCSIターゲット


この図は、iSCSIターゲットにアタッチされた共有ストレージに複数のiSCSIイニシエータがアクセスする単純なイーサネット・ネットワークを示しています。

ハードウェアベースのiSCSIイニシエータは専用のiSCSI HBAを使用します。Oracle Linuxでは、iSCSIイニシエータ機能をソフトウェアでサポートしています。カーネルに常駐するデバイス・ドライバで既存のネットワーク・インタフェース・カード(NIC)およびネットワーク・スタックを使用して、ハードウェアiSCSIイニシエータをエミュレートします。iSCSIイニシエータ機能は、システムBIOSレベルでは使用できないため、iSCSIストレージからOracle Linuxシステムをブートすることはできません。

パフォーマンスを向上するために、ネットワーク・カードの中にはハードウェアでiSCSIのTCPフレームを作成できるTCP/IPオフロード・エンジン(TOE)を実装しているものがあります。Oracle LinuxではTOEをサポートしていませんが、一部のカード・ベンダーから適切なドライバを直接入手できます。

LIOの詳細は、http://linux-iscsi.org/wiki/Main_Pageを参照してください。

iSCSIターゲットの構成

次の手順では、ブロック・ストレージ・バックエンドを使用してOracle Linuxシステムで基本的なiSCSIターゲットを設定する方法について説明します。他のストレージ・バックエンド・タイプを使用してiSCSIターゲットを設定できることに注意してください。

targetcliコマンドを使用すると、現在の構成はJSON形式ファイル/etc/target/saveconfig.jsonに保存されます。詳細は、targetcli(8)マニュアル・ページを参照してください。

  1. targetcli対話型シェルを実行します。

    sudo targetcli
    targetcli shell version 2.1.fb31
    Copyright 2011-2013 by Datera, Inc and others.
    For help on commands, type 'help'. 
    
    />

    対話型シェル・プロンプトで、最初に空のオブジェクト階層をリストします。

    /> 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]
  2. 次のように、/backstores/blockディレクトリに移動し、LUNとして提供するディスク・パーティションにブロック・ストレージ・オブジェクトを作成します。

    /> cd /backstores/block
    /backstores/block> create name=LUN_0 dev=/dev/sdb
    Created block storage object LUN_0 using /dev/sdb.
    /backstores/block> create name=LUN_1 dev=/dev/sdc
    Created block storage object LUN_1 using /dev/sdc.

    ストレージ・オブジェクトに割り当てる名前は任意です。

    ノート:

    デバイス・パスは、Oracle Linuxインスタンスのディスク構成によって異なります。

  3. /iscsiディレクトリに移動し、iSCSIターゲットを作成します。

    /> cd /iscsi
    /iscsi> create
    Created target iqn.2013-01.com.mydom.host01.x8664:sn.ef8e14f87344.
    Created TPG 1.

    最初は空のターゲット・ポータル・グループ(TPG)階層をリストします。

    /iscsi> ls
    o- iscsi .......................................................... [Targets: 1]
      o- iqn.2013-01.com.mydom.host01.x8664:sn.ef8e14f87344 .............. [TPGs: 1]
        o- tpg1 ............................................. [no-gen-acls, no-auth]
          o- acls ........................................................ [ACLs: 0]
          o- luns ........................................................ [LUNs: 0]
          o- portals .................................................. [Portals: 0]
  4. TPGディレクトリ階層のlunsサブディレクトリに移動し、LUNをターゲット・ポータル・グループに追加します。

    /iscsi> cd iqn.2013-01.com.mydom.host01.x8664:sn.ef8e14f87344/tpg1/luns 
    /iscsi/iqn.20...344/tpg1/luns> create /backstores/block/LUN_0
    Created LUN 0.
    /iscsi/iqn.20...344/tpg1/luns> create /backstores/block/LUN_1
    Created LUN 1.
  5. TPGディレクトリ階層のportalsサブディレクトリに移動し、iSCSIエンドポイントのIPアドレスとTCPポートを指定します。

    /iscsi/iqn.20...344/tpg1/luns> cd ../portals
    /iscsi/iqn.20.../tpg1/portals> create 10.150.30.72 3260
    Using default IP port 3260
    Created network portal 10.150.30.72:3260.

    TCPポート番号を省略した場合、デフォルト値は3260です。

    ノート:

    ポータルの作成に失敗し、次のようなメッセージが表示された場合は、デフォルトのポータルが以前に作成されたことが原因と考えられます。
    Could not create NetworkPortal in configFS

    この場合、最初にデフォルトのポータルを削除してから、ステップ5を繰り返して新しいポータルを作成します。

    /iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 ip_port=3260
  6. 次のいずれかのコマンドを実行して、TCPポート3260を有効にします。

    sudo firewall-cmd --permanent --add-port=3260/tcp
    sudo firewall-cmd --permanent --add-service iscsi-target
  7. ここで、構成されたブロック・ストレージ・オブジェクトとTPGを示すオブジェクト階層をリストします。

    /iscsi/iqn.20.../tpg1/portals> ls /
    o- / ..................................................................... [...]
      o- backstores .......................................................... [...]
      | o- block .............................................. [Storage Objects: 1]
      | | o- LUN_0 ....................... [/dev/sdb (10.0GiB) write-thru activated]
      | | o- LUN_1 ....................... [/dev/sdc (10.0GiB) write-thru activated]
      | o- fileio ............................................. [Storage Objects: 0]
      | o- pscsi .............................................. [Storage Objects: 0]
      | o- ramdisk ............................................ [Storage Objects: 0]
      o- iscsi ........................................................ [Targets: 1]
      | o- iqn.2013-01.com.mydom.host01.x8664:sn.ef8e14f87344 ............ [TPGs: 1]
      |   o- tpg1 ........................................... [no-gen-acls, no-auth]
      |     o- acls ...................................................... [ACLs: 0]
      |     o- luns ...................................................... [LUNs: 1]
      |     | o- lun0 ..................................... [block/LUN_0 (/dev/sdb)]
      |     | o- lun1 ..................................... [block/LUN_1 (/dev/sdc)]
      |     o- portals ................................................ [Portals: 1]
      |       o- 10.150.30.72:3260 ............................................ [OK]
      o- loopback ..................................................... [Targets: 0]
  8. イニシエータがログインするためのアクセス権を構成します。たとえば、認証の必要がないデモ・モードを構成するには、TGPディレクトリに移動し、authenticationおよびdemo_mode_write_protect属性の値を0に設定し、generate_node_acls cache_dynamic_aclsの値を1に設定します。

    /iscsi/iqn.20.../tpg1/portals> cd ..
    /iscsi/iqn.20...14f87344/tpg1> set attribute authentication=0 demo_mode_write_protect=0
                            generate_node_acls=1 cache_dynamic_acls=1
    Parameter authentication is now '0'.
    Parameter demo_mode_write_protect is now '0'.
    Parameter generate_node_acls is now '1'.
    Parameter cache_dynamic_acls is now '1'.

    注意:

    デモ・モードは本質的に安全ではありません。安全な認証モード構成の詳細は、http://linux-iscsi.org/wiki/ISCSI#Define_access_rightsを参照してください。

  9. rootディレクトリに変更し、構成を保存します。

    /iscsi/iqn.20...14f87344/tpg1> cd /
    /> saveconfig
    Last 10 configs saved in /etc/target/backup.
    Configuration saved to /etc/target/saveconfig.json
  10. ターゲット・サービスを有効にします。

    # systemctl enable target.service

ノート:

構成を保存してターゲット・サービスを有効にすると、システムの再起動後も変更内容が保持されます。これらのコマンドの実行に失敗すると、空の構成になる場合があります。

iSCSIターゲットの保存された構成のリストア

iSCSIターゲットの保存された構成をリストアするには、targetcli対話型シェルを起動し、次のコマンドを実行します。

sudo targetcli
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/>

次の例のように、対話型シェルプロンプトで、適切なコマンドを入力します。

/> restoreconfig /etc/target/saveconfig.json

前の例では、/etc/target/saveconfig.jsonが最後に保存された構成です。

または、次のコマンドを実行して、以前のバージョンから保存された構成をリストアできます。

/> restoreconfig /etc/target/backup/saveconfig-20180516-18:53:29.json

iSCSIイニシエータの構成

Oracle LinuxシステムをiSCSIイニシエータとして構成するには:

  1. iscsi-initiator-utilsパッケージをインストールします。

    sudo yum install iscsi-initiator-utils
  2. 検出メソッドを使用して、指定したIPアドレスでiSCSIターゲットを検出します。

    SendTargetsまたはInternet Storage Name Service (iSNS)のいずれかの検出メソッドを使用できます。

    たとえば、次のようにSendTargets検出メソッドを使用します。

    # iscsiadm -m discovery -t sendtargets -p 10.150.30.72
    10.150.30.72:3260,1 iqn.2013-01.com.mydom.host01.x8664:sn.ef8e14f87344

    iscsidサービスがまだ実行されていない場合は、このコマンドによって開始されます。

    • ネットワーク接続に失敗した場合は、ネットワークのファイアウォール設定を調整してiSCSIターゲットと通信できるようにします。

      sudo iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited
      sudo iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
    • 次に、SendTargets検出メソッドを使用してコマンドを再実行します。

      sudo iscsiadm -m discovery -t sendtargets -p 10.150.30.72
      10.150.30.72:3260,1 iqn.2013-01.com.mydom.host01.x8664:sn.ef8e14f87344
  3. 次のコマンドを実行して、検出データベースに現在格納されているターゲットに関する情報を表示します。

    sudo iscsiadm -m discoverydb -t st -p 10.150.30.72
    # BEGIN RECORD 6.2.0.873-14
    discovery.startup = manual
    discovery.type = sendtargets
    discovery.sendtargets.address = 10.150.30.72
    discovery.sendtargets.port = 3260
    discovery.sendtargets.auth.authmethod = None
    discovery.sendtargets.auth.username = <empty>
    discovery.sendtargets.auth.password = <empty>
    discovery.sendtargets.auth.username_in = <empty>
    discovery.sendtargets.auth.password_in = <empty>
    discovery.sendtargets.timeo.login_timeout = 15
    discovery.sendtargets.use_discoveryd = No
    discovery.sendtargets.discoveryd_poll_inval = 30
    discovery.sendtargets.reopen_max = 5
    discovery.sendtargets.timeo.auth_timeout = 45
    discovery.sendtargets.timeo.active_timeout = 30
    discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
    # END RECORD
  4. セッションを確立し、特定のターゲットにログインします。

    sudo iscsiadm -m node -T iqn.2013-01.com.mydom.host01.x8664:sn.ef8e14f87344 -p 10.150.30.72:3260 -l
    Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.localhost.x8664:
    sn.ef8e14f87344, portal: 10.150.30.72,3260] successful.
  5. セッションがアクティブであることを確認し、使用可能なLUNを表示します。

    sudo iscsiadm -m session -P 3
    iSCSI Transport Class version 2.0-870
    version 6.2.0.873-14
    Target: iqn.2003-01.com.mydom.host01.x8664:sn.ef8e14f87344 (non-flash)
    	Current Portal: 10.0.0.2:3260,1
    	Persistent Portal: 10.0.0.2:3260,1
    		**********
    		Interface:
    		**********
    		Iface Name: default
    		Iface Transport: tcp
    		Iface Initiatorname: iqn.1994-05.com.mydom:ed7021225d52
    		Iface IPaddress: 10.0.0.2
    		Iface HWaddress: <empty>
    		Iface Netdev: <empty>
    		SID: 5
    		iSCSI Connection State: LOGGED IN
    		iSCSI Session State: LOGGED_IN
    		Internal iscsid Session State: NO CHANGE
    .
    .
    .
    		************************
    		Attached SCSI devices:
    		************************
    		Host Number: 8	State: running
    		scsi8 Channel 00 Id 0 Lun: 0
    			Attached scsi disk sdb		State: running
    		scsi8 Channel 00 Id 0 Lun: 1
    			Attached scsi disk sdc		State: running

    LUNはローカルの/devディレクトリのSCSIブロック・デバイス(sd*)として表されます。たとえば:

    sudo fdisk -l | grep /dev/sd[bc]
    Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
    Disk /dev/sdc: 10.7 GB, 10737418240 bytes, 20971520 sectors

    複数のターゲットLUNを区別するには、/dev/disk/by-pathの下のパスを調べてください。

    ls -l /dev/disk/by-path/
    lrwxrwxrwx  1 root root  9 May 15 21:05
      ip-10.150.30.72:3260-iscsi-iqn.2013-01.com.mydom.host01.x8664:
      sn.ef8e14f87344-lun-0 -> ../../sdb
    lrwxrwxrwx 1 root root  9 May 15 21:05
      ip-10.150.30.72:3260-iscsi-iqn.2013-01.com.mydom.host01.x8664:
      sn.ef8e14f87344-lun-1 -> ../../sdc

    次のように、/var/log/messagesファイルのLUNに対する初期化メッセージを表示できます。

    sudo grep sdb /var/log/messages
    ...
    May 18 14:19:36 localhost kernel: [12079.963376] sd 8:0:0:0: [sdb] Attached SCSI disk
    ...

    LUNは、LVM物理ボリューム、ファイル・システム、スワップ・パーティション、自動ストレージ管理(ASM)ディスク、RAWデバイスなど、その他の物理ストレージ・デバイスと同じ方法で構成および使用できます。

    /etc/fstabのiSCSI LUNのマウント・エントリを作成している場合は、_netdevオプションを指定します。たとえば:

    UUID=084591f8-6b8b-c857-f002-ecf8a3b387f3     /iscsi_mount_point     ext4     _netdev   0  0

    このオプションは、ネットワーク・アクセスを必要とするデバイス上にファイル・システムが存在することを意味し、ネットワークが有効になるまで、システムによるファイル・システムのマウントが防止されます。

    ノート:

    /etc/fstabのiSCSI LUNは、デバイス・パスではなく、UUID= UUIDを使用して指定してください。デバイス・パスは、ストレージを再接続したり、システムを再起動した後に変更される場合があります。ブロック・デバイスのUUIDを表示するには、blkidコマンドを使用できます。

    検出されたLUNは、ターゲットが引き続きそれらのLUNを処理する場合は、再起動後も有効であり、ターゲットからログオフされません。

詳細は、iscsiadm(8)およびiscsid(8)の各マニュアル・ページを参照してください。

検出データベースの更新

iSCSIターゲットで使用可能なLUNが変更された場合は、iSCSIイニシエータでiscsiadmコマンドを使用して、その検出データベースのエントリを更新できます。次の例は、ターゲットがSendTargets検出メソッドをサポートしていることを前提としています。

現在データベースにない新規レコードを追加するには:

sudo iscsiadm --mode discoverydb -type st -p 10.150.30.72 -o new --discover

データベースの既存のレコードを更新するには:

sudo iscsiadm -m discoverydb -t st -p 10.150.30.72 -o update --discover

ターゲットがすでにサポートしていないデータベースからレコードを削除するには:

sudo iscsiadm -m discoverydb -t st -p 10.150.30.72 -o delete --discover

詳細は、iscsiadm(8)マニュアル・ページを参照してください。