FreeBSD 10.0 より,別途パッケージを導入する必要が無く,標準で iSCSI が利用できるようになりました.
iSCSI は RFC 7143 で規定されている標準的なプロトコルになりますので FreeBSD に限らず様々なシステムが利用する事ができます.(GEOM GATE と違って)
今回は FreeBSD での iSCSI によるディスクの提供について纏めてみたいと思います.
ターゲットのお話および iSCSI とは? については「FreeBSD で iSCSI を利用する (サーバー/ターゲット編)」に纏めていますので合わせてみて頂ければと思います.
- FreeBSD の iSCSI に関するお話
FreeBSD でイニシエーターを設定する
前回設定した iSCSI ターゲットをクライアント側(イニシエーター)より利用する為の設定を行います.
イメージ図は前回同様で,iSCSI 用のネットワークが存在する形となります.
FreeBSD での iSCSI イニシエーター機能は iscsid と iscsictl の二つのプログラムによって行われます.
イニシエーター側としてもどのデバイスを利用するのかなどの設定を用意する必要がありますので,以下に例を記載します.
# cat /etc/iscsi.conf iscsi_target0 { targetaddress = 172.16.255.254; targetname = iqn.2023-12.iscsi.org.seichan:target0; authmethod = chap; chapiname = "iscsi-user1"; chapsecret = "Password-user1"; tgtchapname = "mutual-user"; tgtchapsecret = "Password-mutual"; } iscsi_target1 { targetaddress = 172.16.255.254; targetname = iqn.2023-12.iscsi.org.seichan:target1; authmethod = chap; chapiname = "iscsi-user2"; chapsecret = "Password-user2"; } iscsi_target2 { targetaddress = 172.16.255.254; targetname = iqn.2023-12.iscsi.org.seichan:target2; authmethod = none; }
設定ファイルの解説
前回設定したターゲットに合わせた設定ファイルを用意しました.内容について以下に解説します.
- iscsi_target0 {
iscsictl コマンドで指定する際の名前(ニックネーム)です. - targetaddress
iSCSI ターゲットの IP アドレスもしくは FQDN を記載します. - targetname
iSCSI ターゲット側で設定しているターゲット名を記載します. - authmethod
iSCSI ターゲットへの接続時に認証を行うのかを指定します.none または chap が指定可能です. - chapiname
認証を行う場合のユーザー名(ログイン名)を記載します. - chapsecret
認証を行う場合のシークレット文字列(パスワード)を記載します. - tgtchapname
相互 CHAP 認証を行う場合のユーザー名(ログイン名)を記載します. - tgtchapsecret
相互 CHAP 認証を行う場合のシークレット文字列(パスワード)を記載します.
なお,/etc/iscsi.conf は認証情報が記載される為,パーミッションを 600 にしましょう.
# chmod 600 /etc/iscsi.conf
サービスの起動
/etc/rc.conf に次の文字を追加します
# cat /etc/rc.conf iscsid_enable="YES" iscsictl_enable="YES"
では,サービスを実行してみましょう
# /etc/rc.d/iscsid start Starting iscsid. # /etc/rc.d/iscsictl start Starting iscsictl.
/etc/iscsi.conf の設定が間違っている場合,iscsictl 起動時にエラーが出力されます.その場合はメッセージに出力される内容をもとに修正してください.
iscsictl を起動すると設定ファイルに従って iSCSI ターゲットへのアクセス,成功したらデバイスファイルが作成されます.
状態を確認するには iscsictl コマンドで行う事が可能です
# iscsictl -L Target name Target portal State iqn.2023-12.iscsi.org.seichan:target0 172.16.255.254 Connected: da3 da4 iqn.2023-12.iscsi.org.seichan:target1 172.16.255.254 Connected: da2 iqn.2023-12.iscsi.org.seichan:target2 172.16.255.254 Connected: da1
この場合,(自分が期待する順番と違いましたが…) target0 では二つのボリューム,target1, 2 からはそれぞれ一つのボリュームが見えており,daX として接続されています.
実際にデバイスファイルが存在する事も確認しましょう.
# ls /dev/da* /dev/da0 /dev/da0p2 /dev/da1 /dev/da3 /dev/da0p1 /dev/da0p3 /dev/da2 /dev/da4
da0 がローカルディスクで OS 領域となります.da1~da4 まで作成されていますので iSCSI の接続は正しく行えています.
では,これをフォーマットし,マウントを行ってみます.また,再起動時もマウントされるように fstab も記載します.
(今回は da1 のみ行います.)
# newfs /dev/da1 /dev/da1: 10240.0MB (20971520 sectors) block size 32768, fragment size 4096 using 17 cylinder groups of 625.22MB, 20007 blks, 80128 inodes. super-block backups (for fsck_ffs -b #) at: 192, 1280640, 2561088, 3841536, 5121984, 6402432, 7682880, 8963328, 10243776, 11524224, 12804672, 14085120, 15365568, 16646016, 17926464, 19206912, 20487360 # mkdir -p /iscsi/da1 # mount /dev/da1 /iscsi/da1 # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0p2 19279260 3140972 14595948 18% / devfs 1 1 0 100% /dev /dev/da1 10144028 8 9332500 0% /iscsi/da1 # cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/da0p2 / ufs rw 1 1 /dev/da0p3 none swap sw 0 0 /dev/da1 /iscsi/da1 ufs rw 1 1
では再起動を行ったうえで再度確認を行います.
マウントができずに起動途中で停止します.この理由は fstab の書き方に問題があるためとなります.
iSCSI イニシエーターのサービスが起動する前にマウントを試みておりそこで終了するという状態です.
/etc/rc.d 以下のスクリプト群において,ファイルシステムおよび iscsi に関連するものの順番は次のとおりです.
# rcorder /etc/rc.d/* | grep -E "mount|iscsi|fsck" /etc/rc.d/fsck /etc/rc.d/mountcritlocal /etc/rc.d/autounmountd /etc/rc.d/iscsid /etc/rc.d/iscsictl /etc/rc.d/mountcritremote /etc/rc.d/automountd /etc/rc.d/automount /etc/rc.d/mountlate /etc/rc.d/mountd /etc/rc.d/bgfsck
mountcritlocal ここでマウントを行おうとしているためにエラーとなります.
また,Pass が 1 の場合,fsck によるファイルシステムチェック対象となり,これもまた mountcritlocal の前の実行になるためにエラーとなります.
そのため,これらを解消できるような /etc/fstab に修正します.
# cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/da0p2 / ufs rw 1 1 /dev/da0p3 none swap sw 0 0 /dev/da1 /iscsi/da1 ufs rw,late 1 0
また,状況によっては iscsictl が起動後接続に至らない可能性があります.これも合わせて対処する場合は /etc/rc.conf に次の一行を追加します.
デフォルトが -Aa で -w 5 を追加し,5秒のウェイトを持たせています.ここは実施可否およびウェイトの時間については実際の環境に応じて実施してください.
iscsictl_flags="-Aa -w 5"
改めて再起動を行ってみます.
このように無事起動が完了しました.マウントの状態としては次のとおりです.
# df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0p2 19279260 3141104 14595816 18% / devfs 1 1 0 100% /dev /dev/da1 10144028 8 9332500 0% /iscsi/da1
これで FreeBSD としてマウントまできれいに完了できる状態となりました.
iscsictl コマンドを使って色々とやってみる
iscsictl コマンドで設定ファイルを用いない接続であったり,今接続中のセッションの切断を行ったりなどができます.
さらっと以下に使い方を纏めてみます.
現在の状態を確認する
現在の状態を確認する場合は -L オプションを付けて実行します.
以下の場合は3つのセッションがあり,すべて接続となっており,かつ da1-4 の4つのディスクをつないでいるという状況です.
# iscsictl -L Target name Target portal State iqn.2023-12.iscsi.org.seichan:target0 172.16.255.254 Connected: da3 da4 iqn.2023-12.iscsi.org.seichan:target1 172.16.255.254 Connected: da2 iqn.2023-12.iscsi.org.seichan:target2 172.16.255.254 Connected: da1
セッションを無効化する
メンテナンスなどの何らかの理由で一時的に特定のセッションを無効化したい場合は -M オプションを用います.
引数としてセッション ID が必要なので,まずはセッション ID の確認を行う必要があります.これには -L オプションの verbose ありで実施します.
# iscsictl -L -v Session ID: 1 Initiator name: iqn.1994-09.org.freebsd:bsd13-1.seichan.local Initiator portal: Initiator alias: Target name: iqn.2023-12.iscsi.org.seichan:target0 Target portal: 172.16.255.254 Target alias: target0 User: iscsi-user1 Secret: Password-user1 Mutual user: mutual-user Mutual secret: Password-mutual Session type: Normal Enable: Yes Session state: Connected Failure reason: Header digest: None Data digest: None MaxRecvDataSegmentLength: 262144 MaxSendDataSegmentLength: 262144 MaxBurstLen: 1048576 FirstBurstLen: 1048576 ImmediateData: Yes iSER (RDMA): No Offload driver: None Device nodes: da3 da4
一つのセッションのみ貼り付けていますが「Session ID」が指定するセッションIDになります.
このセッション (ID:1) を切断するとした場合は次のように実行します.
# iscsictl -M -i 1 -e off # iscsictl -L Target name Target portal State iqn.2023-12.iscsi.org.seichan:target0 172.16.255.254 Disabled iqn.2023-12.iscsi.org.seichan:target1 172.16.255.254 Connected: da2 iqn.2023-12.iscsi.org.seichan:target2 172.16.255.254 Connected: da1
このように,セッション1 (da3, da4) が Disabled となります.
なお,ファイルシステムのアンマウントは先に行ってください.マウント状況にかかわらずセッションは無効化されますので,マウントしているパスへのアクセスが入った瞬間に刺さります.
セッションを再開する
無効化したセッションを再開させる場合は次のように実行します.
# iscsictl -M -i 1 -e on # iscsictl -L Target name Target portal State iqn.2023-12.iscsi.org.seichan:target0 172.16.255.254 Connected: da3 da4 iqn.2023-12.iscsi.org.seichan:target1 172.16.255.254 Connected: da2 iqn.2023-12.iscsi.org.seichan:target2 172.16.255.254 Connected: da1
セッションが再開され,Connected となり,da3, da4 が復活します.
設定ファイルを用いずに接続・切断なども実施できるのですが,ここでは扱いません.
詳しく把握したい方はマニュアル「iscsictl」を参照ください.
以上で iSCSI のターゲットとイニシエーターについての解説を一旦終わります.
一旦というのは,次は GEOM も合わせてのお話で引き続き iSCSI 環境を用いてやっていく予定で考えているからとなります.
コメント