iSCSI/LIO
関連記事
iSCSI を使うことで IP ベースのネットワーク経由でストレージにアクセスすることができます。
エクスポートされたストレージエンティティはターゲットと呼ばれ、インポートするエンティティはイニシエータと呼ばれます。様々なモジュールでターゲットをセットアップすることができます:
- Linux 2.6.38 以前は SCSI Target Framework (STGT/TGT) が標準でした。
- 現在の標準は LIO ターゲット です。
- iSCSI Enterprise Target (IET) は旧式の実装で SCSI Target Subsystem (SCST) が IET の後継です。IET は LIO が標準に決まる前の候補のひとつでした。
目次
インストール
iSCSI ターゲットファブリックは Linux 3.1 から含まれています。
重要なカーネルモジュールは target_core_mod と iscsi_target_mod であり、これらはカーネルに組み込まれており、自動的にロードされるべきです。
フリーブランチのパッケージ targetcli-fbAUR、python-rtslib-fbAUR、および python-configshell-fbAUR の使用が強く推奨されます。
必要なモジュールをロードし、configfs をマウントし、以前に保存された iSCSI ターゲット設定をロードするために、python-rtslib-fbAUR に含まれる target.service
を開始/有効化してください。
LIO ターゲットのセットアップ
LIO ターゲットは Linux 2.6.38 からカーネルに含まれています。ただし、iSCSI ターゲットファブリックが含まれるようになったのは Linux 3.1 からです。
重要なカーネルモジュールは target_core_mod と iscsi_target_mod です。
フリーブランチ版のパッケージを使用することを強く推奨します: targetcli-fbAUR, python-rtslib-fbAUR, python-configshell-fbAUR。
フリーブランチを使用する場合 python-rtslib-fbAUR に systemd の target.service
が含まれています。
以下のコマンドで LIO ターゲットを起動できます:
# systemctl start target
上記のコマンドで必要なモジュールがロードされ、configfs がマウントされて前に保存した iSCSI ターゲットの設定がロードされます。
実行中の設定については以下のコマンドで情報を表示できます (フリーブランチの場合のみ):
# targetcli status
さらに以下のコマンドで起動時に LIO ターゲットを有効にすることが可能です:
# systemctl enable target
設定を作成するときは targetcli を使います。
targetcli を使う
外部マニュアルはフリーブランチにしか存在しません。targetd は AUR に存在しませんが、フリーブランチに依存しています。
設定シェルはほとんどの名前と数字を自動的に作成しますが、自分で設定することもできます。シェルの中で help
と入力することで実行できるコマンドを確認できます。
ターゲットの起動後、以下のコマンドで設定シェルを開くことができます:
# targetcli
シェルの中では以下のようにして使用するブロックデバイスを指定できます (例: /dev/disk/by-id/md-name-nas:iscsi
):
/> cd backstores/block /backstores/block> create md_block0 /dev/disk/by-id/md-name-nas:iscsi
iSCSI Qualified Name (IQN) とターゲットポータルグループ (TPG) を作成するには:
...> cd /iscsi /iscsi> create
ターゲットのバックストアとしてブロックデバイスを使用することを LIO に伝えるには以下を実行:
.../tpg1> cd luns .../tpg1/luns> create /backstores/block/md_block0
それからポータルを作成して、デーモンが接続を待機するようにしてください:
.../luns/lun0> cd ../../portals .../portals> create
targetcli は LIO が接続を listen する IP とポートを表示します (デフォルトは 0.0.0.0 (all) です)。最低でもクライアントの IP が必要です。ポートは標準ポートの 3260 にするべきです。
クライアント/イニシエータから接続するにはターゲットの設定にイニシエータの IQN を記述する必要があります:
...> cd ../../acls .../acls> create iqn.2005-03.org.open-iscsi:SERIAL
iqn.2005-03.org.open-iscsi:SERIAL
はイニシエータの IQN に置き換えてください。通常は /etc/iscsi/initiatorname.iscsi
で確認できます。接続する全てのイニシエータを設定してください。targetcli は作成済みの LUN を新しく作成した ACL に自動的にマッピングします。
最後に設定を保存します:
...> cd / /> saveconfig
上記のコマンドで /etc/target/saveconfig.json
に設定が作成されます。これで設定を失うことなく target.service
を安全に起動・停止することが可能になります。
認証
デフォルトで CHAP によるターゲットの認証が有効になっています。パスワードを設定したり、逆に認証を無効化することができます。
認証の無効化
targetcli でターゲットまで移動して (/iscsi/iqn.../tpg1
)、以下のコマンドを実行してください:
.../tpg1> set attribute authentication=0
認証情報の設定
ターゲットの ACL に移動して (/iscsi/iqn.../tpg1/acls/iqn.../
)、以下のコマンドを実行すると現在の認証情報が表示されます:
...> get auth
以下のようにして認証情報を設定してください:
...> set auth userid=<username in target> ...> set auth password=<password in target> ...> set auth mutual_userid=<username in initiator> (optional) ...> set auth mutual_password=<password in initiator> (optional)
最初の2つはターゲットのユーザー名とパスワードです。設定したユーザー名とパスワードを使用してイニシエータはターゲットにログインします。("mutual_" と付いている) 残りの2つはイニシエータのユーザー名とパスワードです (全てのイニシエータは同じユーザー名とパスワードを使います)。イニシエータのユーザー名とパスワードは任意のパラメータであり、イニシエータは許可されたターゲットからの接続だけを通すようになります。
ヒントとテクニック
targetcli sessions
で現在開いているセッションを確認できます。このコマンドは targetcli-fbAUR パッケージには含まれていますが lio-utils やオリジナルの targetcli には存在しません。
上流のドキュメント
- targetcli
- LIO utils
- フリーブランチ版の targetcli-fbAUR をインストールした場合
man targetcli
が使えます。
SCSI Target Framework (STGT/TGT) のセットアップ
AUR から tgtAUR パッケージをインストールする必要があります。
詳しくは TGT iSCSI ターゲットを見てください。
参照
- iSCSI ブート: iSCSI ターゲットの
/
で Arch Linux を起動。 - 永続的なブロックデバイスの命名: 適切なターゲットのブロックデバイスを使用。