15 IPネットワークの大容量記憶域: iSCSI #
コンピュータセンターや、サーバをサポートするサイトの主要タスクの1つは、適切なディスク容量を提供することです。この用途には、多くの場合、ファイバチャネルが使用されます。iSCSI(Internet SCSI)ソリューションは、ファイバチャネルに対する低コストの代替であり、コモディティサーバおよびEthernetネットワーキング装置を活用することができます。Linux iSCSIは、iSCSIイニシエータおよびiSCSI LIOターゲットのソフトウェアの提供により、Linuxサーバを中央ストレージシステムに接続します。
LIO(http://linux-iscsi.org)は、Linux用の標準のオープンソースマルチプロトコルSCSIターゲットです。LIOは、Linuxカーネルのバージョン2.6.38以降において、Linuxにおける標準の統一ストレージターゲットとして、STGT (SCSI Target)フレームワークにとって代わりました。SUSE Linux Enterprise Server 12では、古いバージョンのiSCSIターゲットサーバにiSCSI LIOターゲットサーバに代わっています。
iSCSIは、ストレージネットワーキングプロトコルであり、ブロックストレージデバイスとサーバ間における、TCP/IPネットワーク上でのSCSIパケットのデータ転送を簡素化にします。iSCSIターゲットソフトウェアは、ターゲットサーバ上で実行され、論理ユニットをiSCSIターゲットデバイスとして定義します。iSCSIイニシエータソフトウェアは異なるサーバ上で実行され、ターゲットデバイスに接続して、そのサーバ上でストレージデバイスを使用できるようにします。
iSCSI LIOターゲットサーバおよびiSCSIイニシエータサーバは、LAN内のIPレベルでSCSIパケットを送信して通信します。イニシエータサーバ上のアプリケーションがiSCSI LIOターゲットデバイスに対する照会を開始すると、オペレーティングシステムが必要なSCSIコマンドを発行します。するとSCSIコマンドが、iSCSIイニシエータと呼ばれるソフトウェアによってIPパケットに組み込まれ、必要に応じて暗号化されます。パケットは内部IPネットワーク上で、「iSCSI LIOターゲットサーバ」または単に「iSCSIターゲット」と呼ばれる、対応するiSCSIリモートステーションに転送されます。
多くのストレージソリューションが、iSCSIによるアクセス手段を提供しています。また、LinuxサーバにiSCSIターゲットの役割をさせることもできます。この場合、Linuxサーバをファイルシステムサービス用に最適化しておくことが重要です。RAIDの詳細については、第7章 「ソフトウェアRAIDの設定」も参照してください。
15.1 iSCSI LIOターゲットサーバとiSCSIイニシエータのインストール #
iSCSIイニシエータはデフォルトでインストールされますが(open-iscsi
パッケージとyast2-iscsi-client
パッケージ)、iSCSI LIOターゲットパッケージは手動でインストールする必要があります。
同一システムでイニシエータとターゲットを実行することはできますが、このセットアップは推奨されません。
iSCSI LIOターゲットサーバをインストールするには、端末コンソールで次のコマンドを実行します。
tux >
sudo
zypper in yast2-iscsi-lio-server
iSCSIイニシエータまたはその依存関係をインストールする必要がある場合は、コマンドsudo zypper in yast2-iscsi-client
を実行します。
または、YaSTソフトウェア管理モジュールを使用してインストールします。
先に示したパッケージ以外の必要なパッケージは、インストーラによって自動的に組み込まれるか、またはそれぞれのYaSTモジュールの初回実行時にインストールされます。
15.2 iSCSI LIOターゲットサーバのセットアップ #
本項では、YaSTを使用してiSCSI LIOターゲットサーバを構成し、iSCSI LIOのターゲットデバイスを設定する方法について説明します。任意のiSCSIイニシエータソフトウェアを使用して、ターゲットデバイスにアクセスすることができます。
15.2.1 iSCSI LIOターゲットサービスの起動およびファイアウォールの設定 #
iSCSI LIOターゲットサービスは、マニュアルで開始するようデフォルトで設定されています。同サービスを、システムのブート時に自動的に開始するよう設定できます。サーバでファイアウォールを使用していて、iSCSI LIOターゲットをほかのコンピュータでも利用可能としたい場合は、ターゲットへのアクセスに使用する各アダプタ用に、ファイアウォール内のポートを開放する必要があります。TCPポート3260が、iSCSIプロトコル用のポート番号です。これは、IANA (Internet Assigned Numbers Authority)により定義されています。
YaSTを起動し、
› の順に起動します。起動時: サービスは、サーバの再起動時に自動的に開始します。
手動: (デフォルト)サーバの再起動後、
sudo systemctl start target
を実行して、手動でサービスを開始する必要があります。ターゲットデバイスは、サービスを開始するまで利用できません。
サーバでファイアウォールを使用していて、iSCSI LIOターゲットをほかのコンピュータでも利用可能としたい場合は、ターゲットへのアクセスに使用する各アダプタインタフェース用に、ファイアウォール内のポート3260を開放します。このポートがネットワークインタフェースのすべてに対してクローズしている場合、iSCSI LIOターゲットはほかのコンピュータでは利用できません。
サーバでファイアウォールを使用していない場合、ファイアウォール設定は無効です。この場合、次の手順をスキップして、
を使用して設定ダイアログから移動するか、別のタブに切り替えて設定を続行します。ないすべてのインタフェースを選択解除します。 をクリックして設定を保存します。
をクリックして、使用するネットワークインタフェースを確認または設定します。すべての利用可能なネットワークインタフェースが一覧表示され、デフォルトではすべてが選択されています。ポートを開く必要が
15.2.2 iSCSI LIOターゲットおよびイニシエータのディスカバリに対する認証の設定 #
iSCSI LIOターゲットサーバソフトウェアは、PPP-CHAP (Point-to-Point Protocol Challenge Handshake Authentication Protocol)をサポートしています。これは、Internet Engineering Task Force (IETF) RFC 1994 (https://tools.ietf.org/rfc/rfc1994.txt)で定義されている、3方向の認証方法です。サーバはこの認証方法を、ターゲット上のファイルへのアクセスにではなく、iSCSI LIOのターゲットとイニシエータのディスカバリ用に使用します。ディスカバリへのアクセスを制限しない場合は、 を選択します。デフォルトでは オプションが有効になっています。このサーバ上のすべてのiSCSI LIOターゲットは、認証を要求しないので、同じネットワーク上のどのiSCSIイニシエータによっても検出することができます。
よりセキュアな設定に対する認証が必要な場合は、incoming認証、outgoing認証またはその両方を使用できます。
では、iSCSIイニシエータに、iSCSI LIOターゲット上で検出を実行するパーミッションがあることを証明するよう求めます。イニシエータは、incomingのユーザ名とパスワードを入力する必要があります。 では、iSCSI LIOターゲットに、自らが目的のターゲットであることをイニシエータに対して証明するよう求めます。iSCSI LIOターゲットは、outgoingのユーザ名とパスワードを、iSCSIイニシエータに提供する必要があります。パスワードはincomingとoutgoingのディスカバリで異なる必要があります。ディスカバリに対する認証を有効にしない場合、その設定は、すべてのiSCSI LIOターゲットグループに適用されます。セキュリティ上の理由により、運用環境では、ターゲットおよびイニシエータのディスカバリに認証を使用することをお勧めします。
iSCSI LIOターゲットに対して認証の初期設定を行うには
15.2.3 ストレージスペースの準備 #
LUNをiSCSIターゲットサーバ用に設定する前に、使用するストレージを準備する必要があります。未フォーマットのブロックデバイス全体を1つのLUNとして使用することも、デバイスを複数の未フォーマットパーティションに再分割して、各パーティションを別個のLUNとして使用することもできます。iSCSIターゲット設定では、LUNをiSCSIイニシエータにエクスポートします。
YaSTのパーティショナまたはコマンドラインを使用して、パーティションを設定できます。詳細については、10.1項 「を参照してください。iSCSI LIO ターゲットは、Linux、Linux LVM、またはLinux RAIDファイルシステムIDで未フォーマットのパーティションを使用できます。 の使用」
iSCSIターゲットとして使用するデバイスやパーティションを設定したら、ローカルパス経由で直接アクセスしないでください。ターゲットサーバにパーティションをマウントしないでください。
15.2.3.1 仮想環境でのデバイスのパーティション分割 #
仮想マシンのゲストサーバを、iSCSI LIOターゲットサーバとして使用できます。本項では、Xen仮想マシンにパーティションを割り当てる方法を説明します。また、SUSE Linux Enterprise Serverでサポートされている他の仮想環境も使用できます。
Xen仮想環境で、iSCSI LIOターゲットデバイスに使用するストレージスペースをゲストの仮想マシンに割り当て、ゲスト環境内の仮想ディスクとしてそのスペースにアクセスします。各仮想ディスクは、ディスク全体、パーティション、ボリュームなどの物理ブロックデバイスでも、Xenホストサーバ上の大規模な物理ディスク上の単一イメージファイルが仮想ディスクになっている、ファイルバックディスクイメージのいずれでも可能です。最適なパフォーマンスを得るためには、物理ディスクまたはパーティションから各仮想ディスクを作成してください。ゲストの仮想マシンに仮想ディスクを設定したら、ゲストサーバを起動し、物理サーバの場合と同じ方法で、新しいブランクの仮想ディスクをiSCSIターゲットデバイスとして設定します。
ファイルバックディスクイメージがXenホストサーバ上に作成され、Xenゲストサーバに割り当てられます。デフォルトでは、Xenはファイルバックディスクイメージを/var/lib/xen/images/VM_NAME
ディレクトリに保存します。ここでVM_NAME
は仮想マシンの名前です。
15.2.4 iSCSI LIOターゲットグループの設定 #
YaSTを使用して、iSCSI LIOターゲットデバイスを設定することができます。YaSTはtargetcli
ソフトウェアを使用します。iSCSI LIOターゲットは、Linux、Linux LVM、またはLinux RAIDファイルシステムIDでパーティションを使用できます。
開始する前に、バックエンドストレージに使用するパーティションを選択します。パーティションをフォーマットする必要はありません。iSCSIクライアントは、接続時にそれらをフォーマットし、既存のすべてのフォーマットを上書きできます。
YaSTを起動し、
› の順に起動します。iSCSI LIOターゲットソフトウェアにより、
、 、 、 、および の各フィールドが自動的に記入されます。 が、デフォルトで選択されています。複数のネットワークインタフェースがある場合は、[IPアドレス]ドロップダウンボックスを使用して、このターゲットグループ用に使用するネットワークインタフェースのIPアドレスを選択します。すべてのアドレスでサーバにアクセスできるようにするには、
を選択します。このターゲットグループに対してイニシエータ認証を不要にする場合は、
をオフにします(非推奨)。(オプション)前の手順を繰り返し、このターゲットグループにターゲットを追加します。
目的のターゲットがすべてグループに追加されたら、
をクリックします。
ターゲットグループに対して少なくとも1つ以上のイニシエータを指定すると、
、 、 、および の各ボタンが有効になります。 または を使用して、ターゲットグループにイニシエータを追加できます。[iSCSIターゲットの変更]: オプション #追加: 選択したiSCSI LIOターゲットグループに、新たなイニシエータのエントリを追加します。
LUNを編集: iSCSI LIOターゲットグループ内のどのLUNが、選択したイニシエータにマップするかを設定します。割り当てられたターゲットのそれぞれを、任意のイニシエータにマップすることができます。
認証を編集: 選択したイニシエータに対する好みの認証方法を設定します。認証なしを指定することも、incoming認証、outgoing認証、またはその両方を設定することもできます。
削除: 選択したイニシエータのエントリを、ターゲットグループに割り当てられたイニシエータのリストから削除します。
コピー: 同じLUNのマッピングと認証設定を持つ新たなイニシエータのエントリを、選択したイニシエータのエントリとして追加します。これにより、容易に同じ共有LUNを、クラスタ内の各ノードに順々に割り当てることができます。
イニシエータのエントリを選択して、
をクリックし、LUNのマッピングを変更してiSCSI LIOターゲットグループ内のどのLUNを選択したイニシエータに割り当てるかを指定して、 をクリックして変更内容を保存します。iSCSI LIOターゲットグループが複数のLUNで構成されている場合は、1つまたは複数のLUNを、選択したイニシエータに割り当てることができます。デフォルトでは、グループ内の使用可能なLUNのそれぞれが、イニシエータLUNに割り当てられます。
LUNの割り当てを変更するには、次の操作の1つ以上を実行します。
追加: をクリックして新しい のエントリを作成し、 ドロップダウンボックスを使用して、そのエントリにターゲットLUNをマップします。
削除: のエントリを選択し、 をクリックしてターゲットLUNのマッピングを削除します。
変更: のエントリを選択し、 ドロップダウンボックスを使用して、そのエントリにマップするターゲットLUNを選択します。
一般的な割り当のプランには、次のようなものがあります。
1台のサーバが、イニシエータとして登録されています。ターゲットグループ内のLUNがすべて、それに割り当てられています。
このグループ化戦略を使用して、特定のサーバに対して、iSCSI SANストレージを論理的にグループ化することができます。
複数の独立したサーバが、イニシエータとして登録されています。1つまたは複数のターゲットLUNが、それぞれのサーバに割り当てられています。それぞれのLUNは、1台のサーバのみに割り当てられています。
このグループ化戦略を使用して、データセンター内の特定の部門またはサービスのカテゴリに対して、iSCSI SANストレージを論理的にグループ化することができます。
クラスタの各ノードが、イニシエータとして登録されています。共有のターゲットLUNがすべて、各ノードに割り当てられています。すべてのノードがデバイスに接続されていますが、ほとんどのファイルシステムに対して、クラスタソフトウェアによってデバイスによるアクセスがロックされ、一度に1つのノード上にのみデバイスがマウントされます。共有ファイルシステム(OCFS2など)では、複数のノードが同時に同じファイル構造をマウントし、読み込みおよび書き込みアクセスを持つ同じファイルを開くことが可能です。
このグループ化戦略を使用して、特定のサーバクラスタに対して、iSCSI SANストレージを論理的にグループ化することができます。
イニシエータのエントリを選択して、
をクリックし、イニシエータに対する認証設定を指定してから、 をクリックして設定を保存します。このターゲットグループにアクセスできる各iSCSIイニシエータについて、前の手順を繰り返します。
イニシエータの割り当てを設定し終わったら、
をクリックします。
15.2.5 iSCSI LIOターゲットグループの変更 #
以下のようにして、iSCSI LIOターゲットグループに変更を加えることができます。
ターゲットLUNデバイスをターゲットグループに追加または削除する
ターゲットグループに対してイニシエータを追加または削除する
ターゲットグループのイニシエータに対する、イニシエータLUNからターゲットLUNへのマッピングを変更する
イニシエータ認証(incoming、outgoing、またはその両方)用のユーザ名とパスワードの資格情報を変更する
iSCSI LIOターゲットグループに対する設定を確認または変更するには:
YaSTを起動し、
› の順に起動します。変更するiSCSI LIOターゲットグループを選択して、
をクリックします。[iSCSIターゲットLUNのセットアップを変更]ページで、ターゲットグループにLUNを追加し、LUNの割り当てを編集するか、またはターゲットLUNをグループから削除します。すべてグループに目的の変更が行われたら、
をクリックします。オプション情報については、[iSCSIターゲットの変更]: オプションを参照してください。
[iSCSIターゲットイニシエータのセットアップの変更]ページで、ターゲットグループ内のLUNへのアクセスを許可されるイニシエータに関する情報を設定します。すべてグループに目的の変更が行われたら、
をクリックします。
15.2.6 iSCSI LIOターゲットグループの削除 #
iSCSI LIOターゲットグループを削除すると、グループの定義と、イニシエータに対する関連のセットアップ(LUNのマッピングや認証資格情報を含む)が削除されます。パーティション上のデータは破棄されません。イニシエータに再度アクセス権を付与するには、ターゲットLUNを別のターゲットグループまたは新規のターゲットグループに割り当てて、それらに対するイニシエータアクセスを設定します。
YaSTを起動し、
› の順に起動します。削除するiSCSI LIOターゲットグループを選択して、
をクリックします。確認のメッセージが表示されたら、
をクリックして削除を確認するか、 をクリックしてキャンセルします。
15.3 iSCSIイニシエータの設定 #
iSCSIイニシエータを使用して、任意のiSCSIターゲットに接続できます。これは、15.2項 「iSCSI LIOターゲットサーバのセットアップ」で説明されているターゲットソリューションだけに限りません。iSCSIイニシエータの設定には、利用可能なiSCSIターゲットの検出と、iSCSIセッションの設定という2つの主要ステップがあります。どちらの設定も、YaSTを使って行うことができます。
15.3.1 YaSTを使ったiSCSIイニシエータの設定 #
YaSTの[iSCSIイニシエータの概要]が3つのタブに分割されます。
- サービス:
- 接続したターゲット:
- 検出されたターゲット:
15.3.1.1 iSCSIイニシエータの設定 #
YaSTを起動し、
› の順に起動します。起動時: サービスは、サーバの再起動時に自動的に開始します。
手動: (デフォルト)サーバの再起動後、
sudo systemctl start iscsi iscsid
コマンドを実行して、手動でサービスを開始する必要があります。
このサーバ上のiSCSIイニシエータに、正しい形式のiSCSI修飾名(IQN)を指定します。イニシエータ名はネットワーク全体で固有のものでなければなりません。IQNは次の一般的なフォーマットを使用します。
iqn.yyyy-mm.com.mycompany:n1:n2
ここでn1とn2はアルファベットか数字です。例:
iqn.1996-04.de.suse:01:a5dfcea717a
/etc/iscsi/initiatorname.iscsi
ファイルから対応する値が自動的に入力されます。サーバがiBFT(iSCSI Boot Firmware Table)をサポートしている場合は、
にはIBFT内の対応する値が入力され、このインタフェースではイニシエータ名を変更できません。代わりにBIOSセットアップを使用して変更してください。iBFTは、サーバのiSCSIターゲットとイニシエータの説明を含む、iSCSIの起動プロセスに便利な各種パラメータを含んだ情報ブロックです。次のいずれかの方法を使用して、ネットワーク上のiSCSIターゲットを検出します。
iSNS: iSNS (Internet Storage Name Service)を使用してiSCSIターゲットを検出するには、続いて15.3.1.2項 「iSNSによるiSCSIターゲットの検出」を実行します。
検出されたターゲット: iSCSIターゲットデバイスを手動で検出するには、続いて15.3.1.3項 「iSCSIターゲットの手動検出」を実行します。
15.3.1.2 iSNSによるiSCSIターゲットの検出 #
このオプションを使用する前に、ご使用の環境内でiSNSサーバをインストールし、設定しておく必要があります。詳細については、「第14章 「Linux用iSNS」」を参照してください。
YaSTで
を選択し、次に タブを選択します。iSNSサーバのIPアドレスとポートを指定します。デフォルトのポートは3205です。
15.3.1.3 iSCSIターゲットの手動検出 #
iSCSIイニシエータを設定しているサーバからアクセスする各iSCSIターゲットサーバについて、次の手順を繰り返し実行します。
YaSTで
を選択し、次に タブを選択します。IPアドレスを入力し、必要に応じてポートを変更します。デフォルトポートは3260です。
認証が必要な場合は、
をオフにして、 または で資格情報を指定します。資格情報が必要な場合は、検出成功後、
を使用してターゲットを有効化します。指定したiSCSIターゲットを使用するための、認証資格情報の提供を促されます。
これでターゲットが
に表示され、仮想iSCSIデバイスが使用可能になります。lsscsi
コマンドを使用すると、iSCSIターゲットデバイスのローカルデバイスパスを検出することができます。
15.3.1.4 iSCSIターゲットデバイスの起動設定 #
YaSTで、
を選択し、次に タブを選択して、現在サーバに接続されているiSCSIターゲットデバイスの一覧を表示することができます。管理するiSCSIターゲットデバイスを選択します。
自動: このオプションは、iSCSIサービス自体の起動時に接続するiSCSIターゲットに使用されます。これが通常の設定です。
Onboot(起動時): このオプションは、起動時、つまりルート(
/
)がiSCSI上にある場合に接続するiSCSIターゲットに使用します。したがって、iSCSIターゲットデバイスはサーバの起動時にinitrdによって評価されます。このオプションはIBM Zなど、iSCSIからブートできないプラットフォームでは無視されます。したがって、これらのプラットフォームでは使用しないでください。代わりに を使用してください。
15.3.2 手動によるiSCSIイニシエータの設定 #
iSCSI接続の検出や設定を行うには、iscsidが稼働していなければなりません。初めてディスカバリを実行する場合、iSCSIイニシエータの内部データベースが/etc/iscsi/
ディレクトリに作成されます。
ディスカバリがパスワードにより保護されている場合は、iscsidに認証情報を渡します。最初にディスカバリを実行するときには内部データベースが存在していないため、現時点でこれは使用できません。かわりに、/etc/iscsid.conf
設定ファイルを編集して、情報を指定する必要があります。パスワード情報をiscsidに渡すには、/etc/iscsid.conf
ファイルの最後に、次の行を追加します。
discovery.sendtargets.auth.authmethod = CHAP discovery.sendtargets.auth.username = USERNAME discovery.sendtargets.auth.password = PASSWORD
ディスカバリは、受け取ったすべての値を内部データベースに保存します。また、検出したターゲットをすべて表示します。次のコマンドで、このディスカバリを実行します。
tux >
sudo
iscsiadm-m discovery --type=st --portal=TARGET_IP
次のように出力されます。
10.44.171.99:3260,1 iqn.2006-02.com.example.iserv:systems
iSNS
サーバで使用できるターゲットを検出するには、次のコマンドを使用します。
sudo iscsiadm --mode discovery --type isns --portal TARGET_IP
iSCSIターゲットに定義されている各ターゲットが、それぞれ1行に表示されます。保存されたデータの詳細については、15.3.3項 「iSCSIイニシエータデータベース」を参照してください。
iscsiadm
コマンドの--login
オプションを使用すると、必要なすべてのデバイスが作成されます。
tux >
sudo
iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems --login
新しく生成されたデバイスはlsscsi
コマンドの出力に表示され、マウントできるようになります。
15.3.3 iSCSIイニシエータデータベース #
iSCSIイニシエータにより検出されたあらゆる情報は、/etc/iscsi
に存在する2つのデータベースファイルに保存されます。1つは、ディスカバリが検出したターゲット用のデータベースで、もう1つは検出したノード用のデータベースです。データベースにアクセスする場合、まずデータをディスカバリ用データベースから取得するのか、またはノードデータベースから取得するのかを指定する必要があります。指定するには、iscsiadm
コマンドの-m discovery
または-m node
パラメータを使用します。iscsiadm
コマンドに、どちらかのパラメータを指定して実行すると、そのデータベースに保管されているレコードの概要が表示されます。
tux >
sudo
iscsiadm -m discovery 10.44.171.99:3260,1 iqn.2006-02.com.example.iserv:systems
この例のターゲット名はiqn.2006-02.com.example.iserv:systems
です。このデータセットに関連する操作を行う場合に、この名前が必要になります。ID iqn.2006-02.com.example.iserv:systems
のデータレコードのコンテンツを調べるには、次のコマンドを使用します。
tux >
sudo
iscsiadm -m node --targetname iqn.2006-02.com.example.iserv:systems node.name = iqn.2006-02.com.example.iserv:systems node.transport_name = tcp node.tpgt = 1 node.active_conn = 1 node.startup = manual node.session.initial_cmdsn = 0 node.session.reopen_max = 32 node.session.auth.authmethod = CHAP node.session.auth.username = joe node.session.auth.password = ******** node.session.auth.username_in = EMPTY node.session.auth.password_in = EMPTY node.session.timeo.replacement_timeout = 0 node.session.err_timeo.abort_timeout = 10 node.session.err_timeo.reset_timeout = 30 node.session.iscsi.InitialR2T = No node.session.iscsi.ImmediateData = Yes ....
これらの変数の値を変更する場合は、iscsiadm
コマンドでupdate
オプションを使用します。たとえば、初期化時にiscidをiSCSIターゲットにログインさせる場合は、値にautomatic
とnode.startup
を設定します。
sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems \ -p ip:port --op=update --name=node.startup --value=automatic
不要になったデータセットを削除する場合は、delete
操作を使用します。ターゲットiqn.com.example.iserv:systems
が有効なレコードではなくなった場合は、このレコードを次のコマンドで削除します。
tux >
sudo
iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems \ -p ip:port --op=delete
このオプションでは、確認のメッセージを表示せずにレコードを削除するため、使用する際には細心の注意を払うようにしてください。
検出したすべてのターゲットのリストを取得するには、sudo iscsiadm -m node
コマンドを実行します。
15.4 targetcli-fbを使用したソフトウェアターゲットの設定 #
targetcli
は、LinuxIO (LIO)ターゲットサブシステムの設定を管理するためのシェルです。シェルは対話的に呼び出すことも、従来のシェルと同様に一度に1つのコマンドを実行することもできます。従来のシェルと同様に、cd
コマンドを使用してtargetcli機能階層をトラバースし、コンテンツをls
コマンドで一覧表示します。
使用可能なコマンドは、現在のディレクトリによって異なります。各ディレクトリには独自のコマンドセットがありますが、すべてのディレクトリで使用可能なコマンドもあります(たとえば、cd
とls
コマンド)。
targetcli
コマンドは次のフォーマットを持ちます。
[DIRECTORY] command
[ARGUMENTS]
任意のディレクトリでhelp
コマンドを使用して、使用可能なコマンドのリスト、または特定のコマンドに関する情報を表示できます。
targetcli
ツールは、targetcli-fbパッケージの一部です。このパッケージは公式のSUSE Linux Enterprise Server ソフトウェアリポジトリで入手でき、次のコマンドを使用してインストールできます。
tux >
sudo
zypper install targetcli-fb
targetcli-fbパッケージがインストールされたら、targetcli
サービスを有効にします。
tux >
sudo
systemctl enable targetclitux >
sudo
systemctl start targetcli
targetcliシェルに切り替えるには、ルートとしてtargetcli
を実行します。
tux >
sudo
targetcli
デフォルトの設定を確認するには、ls
コマンドを実行できます。
/> 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- rbd ....... [Storage Objects: 0] o- iscsi ............... [Targets: 0] o- loopback ............ [Targets: 0] o- vhost ............... [Targets: 0] o- xen-pvscsi .......... [Targets: 0] />
ls
コマンドの出力はバックエンドが設定されていないことを示します。したがって、最初の手順はサポートされているソフトウェアターゲットの1つを設定することです。
targetcliは次のバックエンドをサポートしています。
fileio
、ローカルイメージファイルblock
、専用ディスクまたはパーティション上のブロックストレージpscsi
、SCSIパススルーデバイスramdisk
、メモリベースのバックエンドrbd
、 Ceph RADOSブロックデバイス
targetcliの機能を理解するには、create
コマンドを使用してソフトウェアターゲットとしてローカルイメージファイルを設定します。
/backstores/fileio create test-disc /alt/test.img 1G
これにより、指定された場所(この場合は/alt
)に1GBのtest.img
イメージが作成されます。ls
を実行すると、次の結果が表示されます。
/> ls o- / ........................................................... [...] o- backstores ................................................ [...] | o- block .................................... [Storage Objects: 0] | o- fileio ................................... [Storage Objects: 1] | | o- test-disc ... [/alt/test.img (1.0GiB) write-back deactivated] | | o- alua ...... .......................... [ALUA Groups: 1] | | o- default_tg_pt_gp .... [ALUA state: Active/optimized] | o- pscsi .................................... [Storage Objects: 0] | o- ramdisk .................................. [Storage Objects: 0] | o- rbd ...................................... [Storage Objects: 0] o- iscsi .............................................. [Targets: 0] o- loopback ........................................... [Targets: 0] o- vhost .............................................. [Targets: 0] o- xen-pvscsi ......................................... [Targets: 0] />
出力は、/backstores/fileio
ディレクトリの下に、作成された/alt/test.img
というファイルにリンクされているtest-disc
と呼ばれるファイルベースのバックストアがあることを示しています。新しいバックストアはまだ有効になっていないことに注意してください。
次の手順は、iSCSIターゲットのフロントエンドをバックエンドストレージに接続することです。各ターゲットには、IQN
(iSCSI修飾名)が必要です。最も一般的に使用されるIQN形式は次のとおりです。
iqn.YYYY-MM.NAMING-AUTHORITY:UNIQUE-NAME
IQNの次の部分が必要です。
YYYY-MM、命名機関が設立された年と月
NAMING-AUTHORITY、命名機関のインターネットドメイン名の逆構文
UNIQUE-NAME、命名機関によって選択されたドメイン固有の名前
たとえば、ドメインopen-iscsi.com
の場合、IQNは次のようになります。
iqn.2005-03.com.open-iscsi:UNIQUE-NAME
iSCSIターゲットの作成時に、targetcli
コマンドを使用すると、指定された形式に従っている限り、独自のIQNを割り当てることができます。たとえば、次のように、ターゲットの作成時に名前を省略して、コマンドでIQNを作成することもできます。
/> iscsi/ create
ls
コマンドをを再び実行します:。
/> ls o- / ............................................................... [...] o- backstores .................................................... [...] | o- block ........................................ [Storage Objects: 0] | o- fileio ....................................... [Storage Objects: 1] | | o- test-disc ....... [/alt/test.img (1.0GiB) write-back deactivated] | | o- alua ......................................... [ALUA Groups: 1] | | o- default_tg_pt_gp ............. [ALUA state: Active/optimized] | o- pscsi ........................................ [Storage Objects: 0] | o- ramdisk ...................................... [Storage Objects: 0] | o- rbd .......................................... [Storage Objects: 0] o- iscsi .................................................. [Targets: 1] | o- iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456 ... [TPGs: 1] | o- tpg1 ..................................... [no-gen-acls, no-auth] | o- acls ................................................ [ACLs: 0] | o- luns ................................................ [LUNs: 0] | o- portals .......................................... [Portals: 1] | o- 0.0.0.0:3260 ........................................... [OK] o- loopback ............................................... [Targets: 0] o- vhost .................................................. [Targets: 0] o- xen-pvscsi ............................................. [Targets: 0] />
出力には、自動的に生成されたIQN iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456
を持つ作成されたiSCSIターゲットノードが表示されます
targetcli
では、デフォルトのターゲットポータルグループtpg1
も作成し、有効にしていることに注意してください。これは、ルートレベルの変数auto_add_default_portal
およびauto_enable_tpgt
がデフォルトでtrue
に設定されているために実行されます。
このコマンドは、0.0.0.0
IPv4ワイルドカードを使用してデフォルトのポータルも作成しています。これは、任意のIPv4アドレスが設定されたターゲットにアクセスできることを意味しています。
次のステップは、iSCSIターゲットのLUN (論理ユニット番号)を作成することです。これを行う最適な方法は、targetcli
でその名前と番号を自動的に割り当てることです。iSCSIターゲットのディレクトリに切り替えて、lun
ディレクトリのcreate
コマンドを使用して、LUNをバックストアに割り当てます。
/> cd /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/ /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456> cd tpg1 /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> luns/ create /backstores/fileio/test-disc
ls
コマンドを実行して、変更を確認します。
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> ls o- tpg1 .............................................. [no-gen-acls, no-auth] o- acls ..................................................... [ACLs: 0] o- luns ..................................................... [LUNs: 1] | o- lun0 ....... [fileio/test-disc (/alt/test.img) (default_tg_pt_gp)] o- portals ............................................... [Portals: 1] o- 0.0.0.0:3260 ................................................ [OK]
これで現在は、1GBのファイルベースのバックストアを持つiSCSIターゲットが存在します。ターゲットにはiqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456
という名前があり、このシステムの任意のネットワークポートからアクセスできます。
最後に、イニシエータが設定されたターゲットにアクセスできることを確認する必要があります。これを行う1つの方法は、各イニシエータに対してACLルールを作成し、ターゲットへの接続を許可することです。この場合、そのIQNを使用して必要な各イニシエータを一覧にする必要があります。既存のイニシエータのIQNは、/etc/iscsi/initiatorname.iscsi
ファイルにあります。次のコマンドを使用して、必要なイニシエータ(この場合は、iqn.1996-04.de.suse:01:54cab487975b
)を追加します。
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> acls/ create iqn.1996-04.de.suse:01:54cab487975b Created Node ACL for iqn.1996-04.de.suse:01:54cab487975b Created mapped LUN 0. /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1>
または、アクセス制限のないデモモードでターゲットを実行することもできます。この方法は安全性は低くなりますが、デモ目的や閉じたネットワークで実行する場合は役立つ可能性があります。デモモードを有効にするには、次のコマンドを実行します。
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> set attribute generate_node_acls=1 /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> set attribute demo_mode_write_protect=0
最後のステップは、ルートディレクトリで使用可能なsaveconfig
コマンドを使用して、作成された設定を保存することです。
/> saveconfig /etc/target/example.json
保存されたファイルから設定を復元する必要がある場合は、まず現在の設定をクリアする必要があります。最初に設定を保存しない限り、現在の設定をクリアすると、データが失われることに注意してください。次のコマンドを使用して設定をクリアして再ロードします。
/> clearconfig As a precaution, confirm=True needs to be set /> clearconfig confirm=true All configuration cleared /> restoreconfig /etc/target/example.json Configuration restored from /etc/target/example.json />
設定されたターゲットが機能しているかどうかテストするには、同じシステムにインストールされたopen-iscsi iSCSIイニシエータを使用してそれに接続します(HOSTNAMEをローカルマシンのホスト名で置き換えます)。
tux >
iscsiadm -m discovery -t st -p HOSTNAME
たとえば次のように、このコマンドは検出されたターゲットのリストを返します。
192.168.20.3:3260,1 iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456
その後login
iSCSIコマンドを使用して一覧表示されているターゲットに接続できます。これにより、ローカルディスクとしてターゲットが使用可能になります。
15.5 インストール時のiSCSIディスクの使用 #
iSCSI対応のファームウェアを使用している場合は、AMD64/Intel 64およびIBM POWERの各アーキテクチャ上のiSCSIディスクからのブートがサポートされています。
インストール時にiSCSIディスクを使用するには、次のパラメータをブートパラメータ行に追加する必要があります。
withiscsi=1
インストール中に、インストールプロセスで使用するiSCSIディスクをシステムに接続するオプションが記載された、追加の画面が表示されます。
iSCSIデバイスはブートプロセス中は非同期で表示されます。これらのデバイスがルートファイルシステム用に正しく設定されていることがinitrdによって保証されるまでの間、他のファイルシステムや/usr
などのマウントポイントでは、これは保証されません。したがって、/usr
や/var
などのシステムマウントポイントはサポートされません。これらのデバイスを使用するには、必ず各サービスとデバイスを正しく同期してください。
15.6 iSCSIのトラブルシューティング #
本項では、iSCSIターゲットとiSCSIイニシエータに関するいくつかの既知の問題と、考えられる解決策について説明します。
15.6.1 iSCSI LIOターゲットサーバにターゲットLUNをセットアップする際のポータルエラー #
iSCSI LIOターゲットグループの追加または編集を行う際に、次のエラーが発生する:
Problem setting network portal IP_ADDRESS:3260
/var/log/YasT2/y2log
ログファイルに、次のエラーが含まれている:
find: `/sys/kernel/config/target/iscsi': No such file or directory
この問題は、iSCSI LIOターゲットサーバソフトウェアがその時点で実行中ではない場合に発生します。この問題を解決するには、YaSTを終了して、コマンドラインで手動でsystemctl start targetcli
を実行してiSCSI LIOを起動し、再試行します。
次のように入力して、configfs
、iscsi_target_mod
、およびtarget_core_mod
がロードされているかどうかチェックすることもできます。サンプルの応答を示しています。
tux >
sudo
lsmod | grep iscsi iscsi_target_mod 295015 0 target_core_mod 346745 4 iscsi_target_mod,target_core_pscsi,target_core_iblock,target_core_file configfs 35817 3 iscsi_target_mod,target_core_mod scsi_mod 231620 16 iscsi_target_mod,target_core_pscsi,target_core_mod,sg,sr_mod,mptctl,sd_mod, scsi_dh_rdac,scsi_dh_emc,scsi_dh_alua,scsi_dh_hp_sw,scsi_dh,libata,mptspi, mptscsih,scsi_transport_spi
15.6.2 iSCSI LIOターゲットが他のコンピュータで表示されない #
ターゲットサーバでファイアウォールを使用している場合は、他のコンピュータでiSCSI LIOターゲットを表示できるようにするために使用するiSCSIポートを開く必要があります。詳細については、「15.2.1項 「iSCSI LIOターゲットサービスの起動およびファイアウォールの設定」」を参照してください。
15.6.3 iSCSIトラフィックのデータパッケージがドロップされる #
ファイアウォールは、過剰にビジーになるとパケットをドロップすることがあります。SUSEファイアウォールのデフォルトは、3分後にパケットをドロップすることです。iSCSIトラフィックのパケットがドロップされていることが分かった場合は、ファイアウォールがビジーになったとき、パケットをドロップする代わりにキューに入れるように、SUSEファイアウォールを設定することを検討してください。
15.6.4 LVMでiSCSIボリュームを使用する #
iSCSIターゲットでLVMを使用する際には、本項のトラブルシューティングのヒントを使用してください。
15.6.4.1 ブート時にiSCSIイニシエータの検出が行われるかどうかを確認する #
iSCSIイニシエータをセットアップする際には、udevがブート時にiSCSIデバイスを検出し、LVMによるそれらのデバイスの使用をセットアップできるように、ブート時の検出を有効にしてください。
15.6.4.2 iSCSIターゲットの検出がブート時に起きることを確認する #
udev
は、デバイスのデフォルトセットアップを提供することを思い出してください。デバイスを作成するすべてのアプリケーションがブート時に起動されることを確認してください。これにより、udev
がシステム起動時にそれらを認識し、デバイスを割り当てることができます。アプリケーションまたはサービスが後まで起動しない場合は、udev
がブート時のように自動的にデバイスを作成することはありません。
15.6.5 設定ファイルが手動に設定されていると、iSCSIターゲットがマウントされる #
Open-iSCSIは、/etc/iscsi/iscsid.conf
ファイルでnode.startup
オプションが手動に設定されている場合でも、設定ファイルを手動で変更すれば、起動時にターゲットをマウントできます。
/etc/iscsi/nodes/TARGET_NAME/IP_ADDRESS,PORT/default
ファイルを確認してください。このファイルには、/etc/iscsi/iscsid.conf
ファイルを上書きするnode.startup
設定が含まれています。YaSTインタフェースを使用してマウントオプションを手動に設定すると、/etc/iscsi/nodes/TARGET_NAME/IP_ADDRESS,PORT/default
ファイルでもnode.startup = manual
が設定されます。
15.7 iSCSI LIOターゲットの用語 #
- backstore
iSCSIのエンドポイントの基礎となる実際のストレージを提供する、物理的ストレージオブジェクト。
- CDB (command descriptor block)
SCSIコマンドの標準フォーマットCDBは一般的に6、10、または12バイトの長さですが、16バイトまたは可変長でも構いません。
- CHAP (Challenge Handshake Authentication Protocol)
ポイントツーポイントプロトコル(PPP)の認証方法で、あるコンピュータのアイデンティティを別のコンピュータに対して確認するために使用します。Link Control Protocol (LCP)によって2台のコンピュータが接続され、CHAPメソッドがネゴシエートされた後、認証者はランダムなチャレンジをピアに送信します。ピアは、チャレンジおよび秘密鍵に依存した、暗号学的にハッシュされたレスポンスを発行します。認証者は、ハッシュされたレスポンスを、予想されるハッシュ値の自身の計算に対して検証し、認証を了承するか、接続を終了します。CHAPは、RFC 1994で定義されています。
- CID (接続識別子)
イニシエータが生成する16ビットの番号で、2つのiSCSIデバイス間の接続を、一意に識別するもの。この番号は、ログインフェーズの間に提示されます。
- エンドポイント
iSCSIターゲット名とiSCSI TPG (IQN + Tag)の組み合わせ
- EUI (extended unique identifier)
世界中のあらゆるデバイスを一意に識別する、64ビットの番号。フォーマットは、会社ごとに一意である24ビットと、その会社が自社の各デバイスに割り当てる40ビットで構成されます。
- イニシエータ
SCSIセッションの開始エンド。通常は、コンピュータなどの制御デバイス。
- IPS (Internet Protocol storage)
IPプロトコルを使用してストレージネットワーク内のデータを移動する、プロトコルまたはデバイスのクラス。FCIP (Fibre Channel over Internet Protocol)、iFCP (Internet Fibre Channel Protocol)、およびiSCSI (Internet SCSI)は、すべてIPSプロトコルの例です。
- IQN (iSCSI qualified name)
世界中のあらゆるデバイスを一意に識別する、iSCSIの名前形式(たとえば:
iqn.5886.com.acme.tapedrive.sn‐a12345678
)。- ISID (initiator session identifier)
イニシエータが生成する48ビットの番号で、イニシエータとターゲット間のセッションを一意に識別するもの。この値はログインプロセスの間に作成され、ログインPDUとともにターゲットに送られます。
- MCS (multiple connections per session)
iSCSI仕様の一部で、イニシエータとターゲット間での複数のTCP/IP接続を可能にするもの。
- MPIO (multipath I/O)
サーバとストレージ間でデータが複数の冗長パスをとることができるメソッド。
- ネットワークポータル
iSCSIエンドポイントおよびIPアドレスとTCP (転送制御プロトコル)ポートの組み合わせ。TCPポート3260が、iSCSIプロトコル用のポート番号です。これは、IANA (Internet Assigned Numbers Authority)により定義されています。
- SAM (SCSI architectural model)
SCSIの動作を一般的な表記で記載した文書で、異なる種類のデバイスがさまざまなメディア上で通信することを可能にするもの。
- ターゲット
SCSIセッションの受信側で、通常はディスクドライブ、テープドライブ、スキャナなどのデバイス。
- ターゲットグループ(TG)
ビューの作成時にすべて同じ扱いを受ける、SCSIターゲットポートのリスト。ビューを作成することで、LUN(論理ユニット番号)のマッピングが簡素化されます。それぞれのビューエントリが、ターゲットグループ、ホストグループ、およびLUNを指定します。
- ターゲットポート
iSCSIエンドポイントと、1つ以上のLUNの組み合わせ。
- ターゲットポートグループ(TPG)
IPアドレスとTCPポート番号のリストで、特定のiSCSIターゲットがどのインタフェースから受信するかを決定するもの。
- ターゲットセッション識別子(TSID)
ターゲットが生成する 16ビットの番号で、イニシエータとターゲット間のセッションを一意に識別するもの。この値はログインプロセスの間に作成され、ログインレスポンスPDU(プロトコルデータユニット)とともにイニシエータに送られます。
15.8 詳細情報 #
iSCSIプロトコルは、数年に渡って利用されています。iSCSIとSANソリューションの比較やパフォーマンスのベンチマークは多くのレビューで取り上げられており、ハードウェアソリューションについて説明したドキュメントもあります。詳細については、http://www.open-iscsi.com/にあるOpen-iSCSIプロジェクトのホームページを参照してください。
また、iscsiadm
、iscsid
の各マニュアルページのほか、環境設定ファイルのサンプル/etc/iscsid.conf
も参照してください。