はじめに
Proxmox VEでFC-SANストレージの接続試験を行うために、
Fedora Server 41 上で Fibre Channel (FC) ターゲットを構築し、LUN を提供してみました。
2台のProxmox VEから同時接続を行うために、2ポート実装のQlogicの FC HBA を利用しました。
参考情報: Fibre Channel in the Homelab (kenmoini.com)
Qlogic HBA をターゲットモードで動かす方法などを含んでいます。
検証環境
項目 | 内容 |
---|---|
OS | Fedora Server 41 |
HBA | Qlogic 2662 |
ターゲット設定 | LIO (targetcli ) を使用 |
接続プロトコル | Fibre Channel (FC) |
ストレージ領域 | LVM ボリューム /dev/fedora/fc_lun1 (500GB 例) |
1. HBA の認識を確認
まず、FC HBA が OS に正しく認識されているかを確認します。
確認
lspci | grep -i fibre
lsmod | grep -i qla
[flathill@localhost ~]$ lspci | grep -i fibre
01:00.0 Fibre Channel: QLogic Corp. ISP8324-based 16Gb Fibre Channel to PCI Express Adapter (rev 02)
01:00.1 Fibre Channel: QLogic Corp. ISP8324-based 16Gb Fibre Channel to PCI Express Adapter (rev 02)
[flathill@localhost ~]$ lsmod | grep -i qla
qla2xxx 1212416 0
nvme_fc 69632 1 qla2xxx
scsi_transport_fc 126976 1 qla2xxx
Qlogic のドライバ qla2xxx
がロードされていれば OK です。認識されていない場合は、modprobe qla2xxx
でロードしてください。
2. HBA をターゲットモードに設定
FC HBA では、イニシエータモードを無効化してターゲットモードを有効にする設定が必要です。
Qlogic (qla2xxx) ドライバの場合
-
lpfc モジュール設定ファイルの編集
Fedora では/usr/lib/modprobe.d/qla2xxx.conf
のようなファイルを作成し、以下を記載します。
options qla2xxx qlini_mode="disabled"
[root@localhost ~]# cat /usr/lib/modprobe.d/qla2xxx.conf
options qla2xxx qlini_mode="disabled"
-
initramfs の更新
設定を反映させるため、dracut で initramfs を再生成します。
dracut -f
[root@localhost ~]# dracut -f
dracut[E]: Module 'systemd-pcrphase' depends on 'tpm2-tss', which can't be installed
dracut[E]: Module 'systemd-pcrphase' depends on 'tpm2-tss', which can't be installed
- 再起動
reboot
再起動後、qla2xxx
ドライバがターゲットモードになっているかを確認します。
-
ターゲットモジュールのロード
起動後に以下のコマンドを実行し、必要なモジュールがロードされているか確認します。
lsmod | grep lpfc
[root@localhost flathill]# modprobe configfs
[root@localhost flathill]# modprobe target_core_mod
[root@localhost flathill]# modprobe tcm_fc
[root@localhost flathill]# lsmod | grep qla2xxx
qla2xxx 1212416 0
nvme_fc 69632 1 qla2xxx
scsi_transport_fc 126976 2 qla2xxx,libfc
3. targetcli
のインストール
FC ターゲットを作成するには、targetcli
を利用します。
Fedora では以下のようにインストールします。
dnf install targetcli sysfsutils
[root@localhost flathill]# dnf install targetcli sysfsutils
Updating and loading repositories:
Fedora 41 - x86_64 - Updates 100% | 4.3 MiB/s | 10.8 MiB | 00m02s
Fedora 41 openh264 (From Cisco) - x86_64 100% | 4.3 KiB/s | 6.0 KiB | 00m01s
Fedora 41 - x86_64 100% | 9.5 MiB/s | 35.4 MiB | 00m04s
Repositories loaded.
Package Arch Version Repository Size
Installing:
sysfsutils x86_64 2.1.1-8.fc41 fedora 100.6 KiB
targetcli noarch 2.1.58-3.fc41 fedora 275.7 KiB
省略
インストール後、以下のコマンドでqla2xxxが含まれているか確認します。
targetcli ls
[root@localhost flathill]# targetcli 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]
o- qla2xxx ............................................................................................ [Targets: 0]
o- vhost .............................................................................................. [Targets: 0]
この結果から、QlogicのHBAがtargetとして利用出来ることが分かります。
4. バックストアの作成
LVM で 500GB の論理ボリュームを作成し、それをバックストアとして提供する例です。
LVM ボリュームの作成 (例)
lvcreate -L 200G -n fc_lun1 fedora
lvs
- ボリュームグループ名を
fedora
、論理ボリューム名をfc_lun1
としています。
[root@localhost flathill]# lvcreate -L 200G -n fc_lun1 fedora
Logical volume "fc_lun1" created.
[root@localhost flathill]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
fc_lun1 fedora -wi-a----- 200.00g
root fedora -wi-ao---- 15.00g
targetcli
でバックストア登録
targetcli /backstores/block create name=fc_lun1 dev=/dev/fedora/fc_lun1
-
name
には任意のバックストア名を指定 -
dev
には先ほど作成した LVM ボリュームを指定
[root@localhost flathill]# targetcli /backstores/block create name=fc_lun1 dev=/dev/fedora/fc_lun1
Created block storage object fc_lun1 using /dev/fedora/fc_lun1.
登録後に以下を実行し、バックストアが作成されたか確認します。
targetcli /backstores/block ls
[root@localhost flathill]# targetcli /backstores/block ls
o- block ........................................................................................ [Storage Objects: 1]
o- fc_lun1 ................................................. [/dev/fedora/fc_lun1 (200.0GiB) write-thru deactivated]
o- alua ......................................................................................... [ALUA Groups: 1]
o- default_tg_pt_gp ............................................................. [ALUA state: Active/optimized]
5. WWPNの登録
QLogic HBAが2ポート構成のため、それぞれのWWPNをFCターゲットとして設定し、同じbackstore (/backstores/block/fc_lun1) にアサインすることで、マルチパス構成を実現します。
1. HBAのWWPNを確認
まず、QLogic HBAの各ポートのWWPNを取得します。
cat /sys/class/fc_host/host*/port_name
[root@localhost ~]# cat /sys/class/fc_host/host*/port_name
0x2100000e1efd7802
0x2100000e1efd7803
ここで取得した2つのWWPN (0x2100000e1efd7802
, 0x2100000e1efd7803
) をターゲットに設定します。
2. targetcli
でFCターゲットを作成
targetcli
を開きます。
targetcli
[root@localhost ~]# targetcli
targetcli shell version 2.1.58
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
(1) qla2xxx
にFCターゲットを作成
/> cd /qla2xxx
/qla2xxx> create 0x2100000e1efd7802
Created target naa.2100000e1efd7802.
/qla2xxx> create 0x2100000e1efd7803
Created target naa.2100000e1efd7803.
→ 2つのポートをFCターゲットとして登録
(2) それぞれのターゲットに LUN をアタッチ
/qla2xxx> cd /qla2xxx/naa.2100000e1efd7802/luns
/qla2xxx/naa....1efd7802/luns> ls
o- luns .................................................................................................... [LUNs: 0]
/qla2xxx/naa....1efd7802/luns> create /backstores/block/fc_lun1
Created LUN 0.
/qla2xxx/naa....1efd7802/luns> ls
o- luns .................................................................................................... [LUNs: 1]
o- lun0 ................................................... [block/fc_lun1 (/dev/fedora/fc_lun1) (default_tg_pt_gp)]
/qla2xxx/naa....1efd7802/luns> cd /qla2xxx/naa.2100000e1efd7803/luns
/qla2xxx/naa....1efd7803/luns> ls
o- luns .................................................................................................... [LUNs: 0]
/qla2xxx/naa....1efd7803/luns> create /backstores/block/fc_lun1
Created LUN 0.
/qla2xxx/naa....1efd7803/luns> ls
o- luns .................................................................................................... [LUNs: 1]
o- lun0 ................................................... [block/fc_lun1 (/dev/fedora/fc_lun1) (default_tg_pt_gp)]
→ 両方のポートに /backstores/block/fc_lun1
をアサイン
3. ACL(イニシエータWWPN)を設定
2台のイニシエータ(ホスト)側のWWPNを取得し、ACLとして登録します。
(イニシエータ(ホスト)側のWWPN取得方法)
cat /sys/class/fc_host/host*/port_name
root@d-1697:~# cat /sys/class/fc_host/host5/port_name
0x10000090fad99630
root@d-1698:~# cat /sys/class/fc_host/host*/port_name
0x10000090fad995fe
(取得したWWPNをターゲットに登録)
/qla2xxx/naa....1efd7802/luns> cd /qla2xxx/naa.2100000e1efd7802/acls
/qla2xxx/naa....1efd7802/acls> create 0x10000090fad99630
Created Node ACL for naa.10000090fad99630
Created mapped LUN 0.
/qla2xxx/naa....1efd7802/acls> create 0x10000090fad995fe
Created Node ACL for naa.10000090fad995fe
Created mapped LUN 0.
/qla2xxx/naa....1efd7802/acls> cd /qla2xxx/naa.2100000e1efd7803/acls
/qla2xxx/naa....1efd7803/acls> create 0x10000090fad99630
Created Node ACL for naa.10000090fad99630
Created mapped LUN 0.
/qla2xxx/naa....1efd7803/acls> create 0x10000090fad995fe
Created Node ACL for naa.10000090fad995fe
Created mapped LUN 0.
→ ホスト側のWWPNをターゲットのACLに登録
4. 設定を保存
ルートディレクトリに戻ってから設定を保存します。
/qla2xxx/naa....1efd7803/acls> cd /
/> saveconfig
Configuration saved to /etc/target/saveconfig.json
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
5. ターゲットサービスの再起動
systemctl restart target
[root@localhost ~]# systemctl restart target
[root@localhost ~]# systemctl status target
● target.service - Restore LIO kernel target configuration
Loaded: loaded (/usr/lib/systemd/system/target.service; disabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
mq10-timeout-abort.conf
Active: active (exited) since Fri 2025-02-28 11:25:28 JST; 4s ago
Invocation: 0a8e2dc95a574fe2b72f1b6692dab0f4
Process: 2352 ExecStart=/usr/bin/targetctl restore (code=exited, status=0/SUCCESS)
Main PID: 2352 (code=exited, status=0/SUCCESS)
Mem peak: 8.2M
CPU: 79ms
2月 28 11:25:20 localhost.localdomain systemd[1]: Starting target.service - Restore LIO kernel target configuration.>
2月 28 11:25:28 localhost.localdomain systemd[1]: Finished target.service - Restore LIO kernel target configuration.
6. 設定の確認
targetcli ls
[root@localhost ~]# targetcli ls
o- / ........................................................................................................... [...]
o- backstores ................................................................................................ [...]
| o- block .................................................................................... [Storage Objects: 1]
| | o- fc_lun1 ............................................... [/dev/fedora/fc_lun1 (200.0GiB) write-thru activated]
| | o- alua ..................................................................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ......................................................... [ALUA state: Active/optimized]
| o- fileio ................................................................................... [Storage Objects: 0]
| o- pscsi .................................................................................... [Storage Objects: 0]
| o- ramdisk .................................................................................. [Storage Objects: 0]
o- iscsi .............................................................................................. [Targets: 0]
o- loopback ........................................................................................... [Targets: 0]
o- qla2xxx ............................................................................................ [Targets: 2]
| o- naa.2100000e1efd7802 ............................................................................... [gen-acls]
| | o- acls .............................................................................................. [ACLs: 2]
| | | o- naa.10000090fad99630 ..................................................................... [Mapped LUNs: 1]
| | | | o- mapped_lun0 ................................................................... [lun0 block/fc_lun1 (rw)]
| | | o- naa.10000090fad995fe ..................................................................... [Mapped LUNs: 1]
| | | o- mapped_lun0 ................................................................... [lun0 block/fc_lun1 (rw)]
| | o- luns .............................................................................................. [LUNs: 1]
| | o- lun0 ............................................. [block/fc_lun1 (/dev/fedora/fc_lun1) (default_tg_pt_gp)]
| o- naa.2100000e1efd7803 ............................................................................... [gen-acls]
| o- acls .............................................................................................. [ACLs: 2]
| | o- naa.10000090fad99630 ..................................................................... [Mapped LUNs: 1]
| | | o- mapped_lun0 ................................................................... [lun0 block/fc_lun1 (rw)]
| | o- naa.10000090fad995fe ..................................................................... [Mapped LUNs: 1]
| | o- mapped_lun0 ................................................................... [lun0 block/fc_lun1 (rw)]
| o- luns .............................................................................................. [LUNs: 1]
| o- lun0 ............................................. [block/fc_lun1 (/dev/fedora/fc_lun1) (default_tg_pt_gp)]
o- vhost .............................................................................................. [Targets: 0]
7. イニシエータ(ホスト)側の確認
2台のホスト側でターゲットが見えているかを確認します。
lsblk
root@d-1697:~# lsblk | grep sdb
sdb 8:16 0 200G 0 disk
root@d-1698:~# lsblk | grep sdb
sdb 8:16 0 200G 0 disk
最初に作成した、200Gのlvが見えていることが分かります。
まとめ
-
targetcli
でQLogic HBAの2ポート (qla2xxx
) をターゲットに登録 - 両ポートに
fc_lun1
をアタッチ - イニシエータ(ホスト)のWWPNをACLに追加
- 設定を保存し、
target
サービスを再起動 - ホスト側で
lsscsi
で確認
以上の構成により、ターゲット側HBAの2ポートを活用し、2台のイニシエータ側HBAから単一の fc_lun1
に対してアクセスが可能になります。