背景
ファイバーチャネルに関しての知識が全く無かったので、自宅に環境を作ってみることにした。ディスクアレイを置くのは騒音や廃棄の面で不安があったので、PCを組んでターゲットとする。全くの素人が手探りでやったことではあるが、備忘録を兼ねて記録を残す。
目標
新しく構築したPCをストレージとして、FC経由でProxmoxから見えるようにSANを構築する。
構成
ターゲットノード
- 自作PC(Ubuntu 24.04.2)
- CPU:Ryzen 2400G
- メモリ:DDR4 16GB
- SSD:250GB
- HDD:4TB ★これをProxmox側で見えるようにする
- HBA:QLE2460
イニシエータノード
- ワークステーション(Proxmox 8.2.2)
- CPU:i7-7700
- メモリ:32GB
- SSD:250GB
- HBA:ISP2532
ケーブル
- OM3 LC-LC
作業
以降基本的にはターゲット側での操作
HBAのドライバの設定
qla2xxxはデフォルトでイニシィエータモードで動作するので、ターゲットモードに変更する。
vi /etc/modprobe.d/qla2xxx.conf
でファイルを新規作成して、以下を追記。
# options qla2xxx qlini_mode="disabled"
initramfsの更新をして再起動
# update-initramfs -u
# reboot
パーティションの作成
ディスクの確認
# fdisk -l
Disk /dev/sda: 238.47 GiB, 256060514304 bytes, 500118192 sectors
Disk model: Fanxiang S101Q 2
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0865405D-9CFD-423C-BC64-**********
Device Start End Sectors Size Type
/dev/sda1 2048 2203647 2201600 1G EFI System
/dev/sda2 2203648 6397951 4194304 2G Linux filesystem
/dev/sda3 6397952 500115455 493717504 235.4G Linux filesystem
Disk /dev/sdb: 3.64 TiB, 4000787030016 bytes, 7814037168 sectors ★新しく追加したHDD
Disk model: WDC WD40EZAX-00C
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
/dev/sdbとして4TBのディスクを認識している。
LVM ボリュームの作成
今回はfdiskを使用したが、partedのほうが現代的らしい。fdiskはGPT(GUIDパーティションテーブル)に対応していないので、2TB以上のディスクを使用する場合、2TB以上のパーティションが作れないと警告が出る。
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.39.3).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
The size of this disk is 3.6 TiB (4000787030016 bytes).
DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).
★↑が先述した警告。
Created a new DOS (MBR) disklabel with disk identifier 0x11e5bc1f.
Command (m for help): m ★ヘルプの表示
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty MBR (DOS) partition table
s create a new empty Sun partition table
Command (m for help): n ★パーティションの追加
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p ★primaryパーティション
Partition number (1-4, default 1): 1 ★1つ目なので1でよさそう
First sector (2048-4294967295, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-4294967295, default 4294967295): +1000G ★今回は1000Gのパーティションを作成
Created a new partition 1 of type 'Linux' and of size 1000 GiB.
Command (m for help): t ★パーティションタイプの変更
Selected partition 1
Hex code or alias (type L to list all): L ★選択肢の表示
00 Empty 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
01 FAT12 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
02 XENIX root 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
03 XENIX usr 40 Venix 80286 85 Linux extended c7 Syrinx
04 FAT16 <32M 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
05 Extended 42 SFS 87 NTFS volume set db CP/M / CTOS / .
06 FAT16 4d QNX4.x 88 Linux plaintext de Dell Utility
07 HPFS/NTFS/exFAT 4e QNX4.x 2nd part 8e Linux LVM df BootIt
08 AIX 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
09 AIX bootable 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
0a OS/2 Boot Manag 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
0b W95 FAT32 52 CP/M a0 IBM Thinkpad hi ea Linux extended
0c W95 FAT32 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
0e W95 FAT16 (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
0f W95 Ext'd (LBA) 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
10 OPUS 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
11 Hidden FAT12 5c Priam Edisk a9 NetBSD f1 SpeedStor
12 Compaq diagnost 61 SpeedStor ab Darwin boot f4 SpeedStor
14 Hidden FAT16 <3 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
16 Hidden FAT16 64 Novell Netware b7 BSDI fs f8 EBBR protective
17 Hidden HPFS/NTF 65 Novell Netware b8 BSDI swap fb VMware VMFS
18 AST SmartSleep 70 DiskSecure Mult bb Boot Wizard hid fc VMware VMKCORE
1b Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fd Linux raid auto
1c Hidden W95 FAT3 80 Old Minix be Solaris boot fe LANstep
1e Hidden W95 FAT1 81 Minix / old Lin bf Solaris ff BBT
24 NEC DOS
Aliases:
linux - 83
swap - 82
extended - 05
uefi - EF
raid - FD
lvm - 8E
linuxex - 85
Hex code or alias (type L to list all): 8e ★LVMにしたいので
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): w ★保存
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
パーティションが作成できたことを確認
# fdisk -l
Disk /dev/sdb: 3.64 TiB, 4000787030016 bytes, 7814037168 sectors
Disk model: WDC WD40EZAX-00C
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x11e*****
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 2097154047 2097152000 1000G 8e Linux LVM ★作成したパーティション
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 100 GiB, 107374182400 bytes, 209715200 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
物理ボリュームの作成
先ほど作成したパーティション、sdb1に物理ボリュームを作成。
# pvcreate /dev/sdb1 ★物理ボリュームの作成
Physical volume "/dev/sdb1" successfully created.
# pvdisplay ★確認
"/dev/sdb1" is a new physical volume of "1000.00 GiB" ★作成した物理ボリューム
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 1000.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID mZJVRF-ZtD0-Bk9l-rcJV-LX3g-b3ca-*****
ボリュームグループの作成
lvg-shareという名前でボリュームグループを作成。
# vgcreate lvg-share /dev/sdb1 ★ボリュームグループの作成
Volume group "lvg-share" successfully created
# vgdisplay ★確認
--- Volume group ---
VG Name lvg-share ★作成したボリュームグループ
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <1000.00 GiB
PE Size 4.00 MiB
Total PE 255999
Alloc PE / Size 0 / 0
Free PE / Size 255999 / <1000.00 GiB
VG UUID pLaazO-2R0g-l7Rf-kFyG-S2W6-EG2G-******
vgscan
コマンドでも確認可能
# vgscan
Found volume group "lvg-share" using metadata type lvm2 ★作成したボリュームグループ
Found volume group "ubuntu-vg" using metadata type lvm2
論理ボリュームの作成
今回は名前をproxmox、サイズを500GBで作成。
# lvcreate --name proxmox --size 500GB lvg-share ★論理ボリュームの作成。
Logical volume "proxmox" created.
# lvdisplay ★確認
--- Logical volume ---
LV Path /dev/lvg-share/proxmox ★作成した論理ボリューム
LV Name proxmox
VG Name lvg-share
LV UUID UxbmCi-V7jG-GkNy-KJXE-n3Lx-iMEs-*****
LV Write Access read/write
LV Creation host, time Storage, 2025-03-11 12:51:34 +0000
LV Status available
# open 0
LV Size 500.00 GiB
Current LE 128000
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1
ファイルシステムの作成
今回はLinuxで一般的に使用されている、ext4を使用。
# mkfs.ext4 /dev/lvg-share/proxmox ★ext4ファイルシステムを作成
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 131072000 4k blocks and 32768000 inodes
Filesystem UUID: bdc4bbb2-a5d6-49e0-afe3-**********
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
#
LIO(LinuxIO)の設定
/dev/mapper/以下に先ほど作成したボリュームグループと論理グループ名がついたリンクが作成されている。
# ls /dev/mapper/
control lvg--share-proxmox ★これ ubuntu--vg-ubuntu--lv
targetcliのインストール
iSCSI管理ツールであるtargetcliをインストールする。
# apt install targetcli-fb -y
backstoreの登録
先ほど確認した/dev/mapper/以下のリンクを参考に以下のコマンドを入力
targetcli /backstores/block create name=[登録名] dev=/dev/mapper/[リンク名]
# targetcli /backstores/block create name=proxmox dev=/dev/mapper/lvg--share-proxmox
Created block storage object proxmox using /dev/mapper/lvg--share-proxmox.
確認する。
# sudo targetcli ls /backstores
o- backstores ................................................................................................................ [...]
o- block .................................................................................................... [Storage Objects: 1]
| o- proxmox★................................................. [/dev/mapper/lvg--share-proxmox (500.0GiB) write-thru deactivated]
| 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]
#
星印の場所に作成されていることが確認できた。
FCターゲットとしてWWNを設定
使用しているHBAのWWNを確認する。
# targetcli /qla2xxx info
Fabric module name: qla2xxx
ConfigFS path: /sys/kernel/config/target/qla2xxx
Allowed WWN types: naa
Allowed WWNs list: naa.21000024ff0***** ★これがWWN
Fabric module features: acls
Corresponding kernel module: tcm_qla2xxx
#
qla2xxxにFCターゲットを作成
# targetcli /qla2xxx create naa.21000024ff*****
targetcli /qla2xxx create naa.21000024ff0*****
Created target naa.21000024ff0*****.
# targetcli /qla2xxx ls ★確認
o- qla2xxx ............................................................................................................ [Targets: 1]
o- naa.21000024ff***** ............................................................................................... [gen-acls]
o- acls .............................................................................................................. [ACLs: 0]
o- luns .............................................................................................................. [LUNs: 0]
#
LUNを作成
# targetcli /qla2xxx/naa.21000024f*****/luns create /backstores/block/proxmox
Created LUN 0.
#
イニシエータのWWNを確認
Proxmox側のノードに移動して、こちらでもtargetcliのインストールをする。
# apt install targetcli-fb
# targetcli /qla2xxx info ★WWNを確認
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
Fabric module name: qla2xxx
ConfigFS path: /sys/kernel/config/target/qla2xxx
Allowed WWN types: naa
Allowed WWNs list: naa.2101001b3*******, naa.2100001b3******* ★イニシエータとなるWWN
Fabric module features: acls
Corresponding kernel module: tcm_qla2xxx
#
今回使用したisp2532は2ポートあるのでWWNは2つ確認できる。
どちらも同じアドレスだったので、ケーブルの刺さっているポートかどうか等は
気にしなくても良さそう。
ターゲット側でイニシエータの登録
アクセスリストにイニシエータを登録する。
# targetcli /qla2xxx/naa.21000024f******/acls create 2101001b32******
Created Node ACL for naa.2101001b3******
Created mapped LUN 0.
# targetcli / saveconfig ★設定の保存
Last 10 configs saved in /etc/rtslib-fb-target/backup/.
Configuration saved to /etc/rtslib-fb-target/saveconfig.json
#
ターゲットサービスの再起動
# systemctl restart target
# systemctl status target
ターゲット側の設定の確認
# targetcli ls
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 1]
| | o- proxmox .................................................. [/dev/mapper/lvg--share-proxmox (500.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: 1]
| o- naa.21000024ff****** ............................................................................................. [gen-acls]
| o- acls ............................................................................................................ [ACLs: 1]
| | o- naa.2101001b3******* ................................................................................... [Mapped LUNs: 1]
| | o- mapped_lun0 ................................................................................. [lun0 block/proxmox (rw)]
| o- luns ............................................................................................................ [LUNs: 1]
| o- lun0 ................................................ [block/proxmox (/dev/mapper/lvg--share-proxmox) (default_tg_pt_gp)]
o- vhost ............................................................................................................ [Targets: 0]
#
イニシエータ側の確認
ファイバーケーブルを刺して、
先ほど設定した領域がちゃんと見えているかどうかを確認。
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 238.5G 0 disk
├─sda1 8:1 0 1007K 0 part
├─sda2 8:2 0 1G 0 part /boot/efi
└─sda3 8:3 0 237.5G 0 part
├─pve-swap 252:0 0 8G 0 lvm [SWAP]
├─pve-root 252:1 0 69.4G 0 lvm /
├─pve-data_tmeta 252:2 0 1.4G 0 lvm
│ └─pve-data-tpool 252:4 0 141.2G 0 lvm
│ ├─pve-data 252:5 0 141.2G 1 lvm
**************************省略********************************
│ └─pve-vm--112--disk--0 252:41 0 10G 0 lvm
└─pve-data_tdata 252:3 0 141.2G 0 lvm
└─pve-data-tpool 252:4 0 141.2G 0 lvm
├─pve-data 252:5 0 141.2G 1 lvm
**************************省略********************************
sdb★ 8:16 0 500G 0 disk
sr0 11:0 1 1024M 0 rom
#
ポートの確認。
# cat /sys/class/fc_host/host?
cat: /sys/class/fc_host/host4: Is a directory
cat: /sys/class/fc_host/host5: Is a directory
#
# cat /sys/class/fc_host/host4/port_name
0x2100001b3******
# cat /sys/class/fc_host/host5/port_name
0x2101001b3******
# cat /sys/class/fc_host/host5/port_state
Online
# cat /sys/class/fc_host/host4/port_state
Linkdown
#
host4と5として認識しているらしい。
WWNとリンク状態も確認できた。
LVMの設定
以下はクラスターとかHA構成なら必要な設定かも。とりあえずやる。
# vi /etc/lvm/lvm.conf ★コメント解除と0を1に変更
- # use_lvmlockd = 0
+ use_lvmlockd = 1
# vi /etc/lvm/lvmlocal.conf ★コメント解除と0を任意のID番号に変更
- # host_id = 0
+ host_id = 1
# systemctl start lvmlockd
# vi lvmlockd.hostid
# systemctl restart lvmlockd
# systemctl status lvmlockd
ボリュームの作成
ターゲット側で公開した領域上に物理ボリュームとボリュームグループを作成する。
# vgcreate --shared fc_vg /dev/sdb ★fc_vgという名前で作成
Enabling sanlock global lock
Logical volume "lvmlock" created.
Volume group "fc_vg" successfully created
VG fc_vg starting sanlock lockspace
Starting locking. Waiting until locks are ready...
# vgdisplay ★確認
--- Volume group ---
VG Name fc_vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <500.00 GiB ★ちゃんと500GB見えている
PE Size 4.00 MiB
Total PE 127999
Alloc PE / Size 256 / 1.00 GiB
Free PE / Size 127743 / <499.00 GiB
VG UUID 6UPN2V-BT2J-FN2x-cuh2-3io2-GHMN-*****
#
これもクラスターとかHA構成なら必要な設定かも。とりあえずやる。
vgchange --lock-start fc_vg
Starting locking. Waiting for sanlock may take 20 sec to 3 min...
# vgs -o +lock_type
VG #PV #LV #SN Attr VSize VFree LockType
fc_vg 1 0 0 wz--ns <500.00g <499.00g sanlock ★sanlockになっていればOK
pve 1 105 0 wz--n- 237.47g 16.00g
#
ProxmoxのGUIでの操作
左上のデータセンター>ストレージ>追加
LVM>IDを入力>ボリュームグループでfc_vg(先ほど作成したボリュームグループ)を選択>共有済みにチェック
追加を押すと新たなディスクが作成されている。(fc_lvmは以前作成したものなので、IDがtestになっていません)
ストレージ領域が増えていることが確認できた。
まとめ
まず、ストレージとして外部に公開するための領域を切り出した。
流れとしては
1.パーティションの作成
2.物理ボリュームの作成
3.ボリュームグループの作成
4. 論理ボリュームの作成
5. ファイルシステムの作成
続いて、SANのターゲットとイニシエータの設定を行った。
6. backstoreに論理ボリュームをアタッチ
7. FCターゲットを作成
8. LUNを作成
9. イニシエータを登録
以降はイニシエータ側で設定。
10. イニシエータ側で物理ボリュームを作成
11. ボリュームグループの作成
12. GUIからLVMを作成
感想
意外とあっさり完成したので拍子抜けした部分もあったが、今までFCを触ったことがなかったので勉強になった。
ファイルシステムやディスク関連の知識が足りていないのでもう少し勉強したい。
参考
https://qiita.com/TsutomuNakamura/items/93c6333c8dd32aeb197a
https://qiita.com/flathill/items/89287b61f13eaa94ea15
https://waura.github.io/zi-zhai-sanstorage-area-networknogou-zhu.html
https://qiita.com/flathill/items/ddd67a358a4e510829c4
https://ameblo.jp/l-yotarou/entry-12799752138.html
https://gist.github.com/261shimizu/c5ab9cd712ef15d7a6223253e0eaed8a