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 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)
マニュアル・ページを参照してください。
-
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]
-
次のように、
/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インスタンスのディスク構成によって異なります。
-
/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]
-
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.
-
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
-
次のいずれかのコマンドを実行して、TCPポート3260を有効にします。
sudo firewall-cmd --permanent --add-port=3260/tcp
sudo firewall-cmd --permanent --add-service iscsi-target
-
ここで、構成されたブロック・ストレージ・オブジェクトと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]
-
イニシエータがログインするためのアクセス権を構成します。たとえば、認証の必要がないデモ・モードを構成するには、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を参照してください。
-
root
ディレクトリに変更し、構成を保存します。/iscsi/iqn.20...14f87344/tpg1> cd / /> saveconfig Last 10 configs saved in /etc/target/backup. Configuration saved to /etc/target/saveconfig.json
-
ターゲット・サービスを有効にします。
# 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イニシエータとして構成するには:
-
iscsi-initiator-utils
パッケージをインストールします。sudo yum install iscsi-initiator-utils
-
検出メソッドを使用して、指定した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
-
-
次のコマンドを実行して、検出データベースに現在格納されているターゲットに関する情報を表示します。
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
-
セッションを確立し、特定のターゲットにログインします。
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.
-
セッションがアクティブであることを確認し、使用可能な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)
マニュアル・ページを参照してください。