自宅SAN(Storage Area Network)の構築
Posted on Sat 29 December 2018 in JP
自宅SANの構築
仮想サーバーを立ててライブマイグレーションをさせたい場合や、ディスクを一台のサーバーに集約させたい場合などに、SANを構築すると便利です。 ファイルベースのアクセスとなるNASとは違い、SANはブロックデバイスの形でネットワーク内に共有されます。 そのため、オーバーヘッドが小さいのに加えて、更にファイバーチャネルを使用して高速なネットワークを作成することもできます。
今回は、自宅にSANを構築したので、その手順をまとめます。
構成
ストレージを公開する側をターゲット、ストレージを使う側をイニシエータといいます。 ターゲットとイニシエータには、QLogicのQLE2560のHBA (Host Bus Adapter)をPCIeで刺しています。 このボードは型が古いため運が良ければ一枚1,000円程度でヤフオクで取得できます。
それぞれのHBAはファイバーケーブルで接続します。ケーブルにはシンクルモードとマルチモードの違いがある他、コネクタ形状には、SCとLCという違いがあります。 HBAに刺さっているSFPトランシーバーが対応しているものを使用する必要があります。
私の場合は、LC - マルチモードのケーブルを使用しています。
ターゲットとイニシエータには、Ubuntu 17.10をインストールしてあります。
ターゲット側のセットアップ
ターゲットモードを有効にする
QLE2560のボードを接続すると、自動でqla2xxxドライバーが読み込まれるはずです。 qla2xxxはデフォルトでイニシィエータモードで動作するので、ターゲット側ではターゲットモードで動作するように設定を変更します。 qla2xxx向けの設定ファイルを新規で作成します。
$ sudo vi /etc/modprobe.d/qla2xxx.conf
記述する内容は下記のとおりです。
options qla2xxx qlini_mode="disabled"
initramfsの更新
$ sudo update-initramfs -u
LVMの作成
パーティションの拡張・縮小やディスク追加・交換を容易に行うためにLVM(Logical Volume Manager)を使って論理ボリュームを作成して、これを公開する構成にします。
パーティションの作成
fdiskでディスク1つの全領域をPrimaryパーティションを1つ作りました。 TypeはLinux LVMにしてあります。
$ sudo fdisk -l /dev/sdd
Disk /dev/sdd: 223.6 GiB, 240057409536 bytes, 468862128 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
Disklabel type: dos
Disk identifier: 0x3b9d0378
Device Boot Start End Sectors Size Id Type
/dev/sdd1 2048 468862127 468860080 223.6G 8e Linux LVM
PV(物理ボリューム)の作成
作成したパーティションでPVを作成します。
$ sudo pvcreate /dev/sdd1
Physical volume "/dev/sdd1" successfully created.
VG(ボリュームグループ)の作成
新規でVGを作成します。 VGの名前はsata3_ssd_vgにしてあります。
$ sudo vgcreate sata3_ssd_vg /dev/sdd1
Volume group "sata3_ssd_vg" successfully created
LV(論理ボリューム)の作成
作成したVGからLVを切り出します。 名前はfcで切り出すサイズはとりあえず200Gにしました。
$ sudo lvcreate -L 200G -n fc sata3_ssd_vg
Logical volume "fc" created.
ここまでの手順で"/dev/mapper/sata3_ssd_vg-fc"が作られていると思います。
LIOの設定
targetcliのインストール
$ sudo apt install targetcli-fb
backstoreの登録
LIOには、公開する論理・物理ストレージを管理しており、管理しているストレージをbackstoresと呼んでいます。 このbackstoresに先程作成したLVMのボリュームを登録します。
登録は下記のコマンドで行います。
$ sudo targetcli /backstores/block create name=fc dev=/dev/mapper/sata3_ssd_vg-fc
Created block storage object fc using /dev/mapper/sata3_ssd_vg-fc.
下記のコマンドで管理されているbackstoresを見るとblockの下にfcが登録されているのがわかります。
$ sudo targetcli ls /backstores
o- backstores .............................................................................. [...]
o- block .................................................................. [Storage Objects: 1]
| o- fc ........................ [/dev/mapper/sata3_ssd_vg-fc (200.0GiB) write-thru deactivated]
o- fileio ................................................................. [Storage Objects: 0]
o- pscsi .................................................................. [Storage Objects: 0]
o- ramdisk ................................................................ [Storage Objects: 0]
LIOがサポートしているストレージデバイスの形式はblock、fileio、pscsi、ramdiskの4つです。 blockはブロックデバイスを fileioは、マウントされたファイルシステム内のファイルを登録するときに使用します。ファイルシステムによる性能劣化があるのでテスト目的でのみ使用が奨励されています。 pscsiは、SCSIコマンドをそのままデバイスに流すときに使用します。エミュレーションを使用していないのでSCSIデバイスのパフォーマンスを最大限に出せます。 ramdiskは、SCSIエミュレーションを行うRAMディスクを使用する際に使用します。
Fibre Channel Targetの設定
Fibre Channel Targetの作成
HBAのWWNを調べる
$ sudo targetcli /qla2xxx info
Fabric module name: qla2xxx
ConfigFS path: /sys/kernel/config/target/qla2xxx
Allowed WWN types: naa
Allowed WWNs list: naa.21000024ff0634a8
Fabric module features: acls
Corresponding kernel module: tcm_qla2xxx
調べたWWNでFibre Channelターゲットを作成します。
$ sudo targetcli /qla2xxx create naa.21000024ff0634a8
Created target naa.21000024ff0634a8.
WWNの名前でターゲットができているのを確認します。
$ sudo targetcli /qla2xxx ls
o- qla2xxx .......................................................................... [Targets: 1]
o- naa.21000024ff0634a8 ............................................................. [gen-acls]
o- acls ............................................................................ [ACLs: 0]
o- luns ............................................................................ [LUNs: 0]
lunsは公開しているストレージ、aclsは公開を許可している相手のWWNを表しています。 まだ、何も登録されていないので登録していきます。
LUNの登録
登録済みのbackstoreをlunsに追加します。
$ sudo targetcli /qla2xxx/naa.21000024ff0634a8/luns create /backstores/block/fc
Created LUN 0.
イニシエータへのアクセス許可
aclsに通信先になるイニシエータのWWN(World Wide Name)を登録します。 このWWNは、EthernetのMACアドレスのようなものでHBAのポート1つに対し1つ割り当てられています。 このFibre ChannelではこのWWNを使用して通信相手を識別します。 イニシエータになるマシン上で同様にtargetcliを使用してWWNを調べて、aclsに追加します。
$ sudo targetcli /qla2xxx/naa.21000024ff0634a8/acls create 21000024ff063657
Created Node ACL for naa.21000024ff063657
Created mapped LUN 0.
設定の保存
再起動後も設定を有効にさせるために下記コマンドで保存します。
$ sudo targetcli / saveconfig
Last 10 configs saved in /etc/rtslib-fb-target/backup.
Configuration saved to /etc/rtslib-fb-target/saveconfig.json
イニシエータ側のセットアップ
ターゲット側で公開されているLUNを再スキャン
# echo 1 > /sys/class/fc_host/host9/issue_lip
[ 3.138509] scsi 9:0:0:0: Direct-Access LIO-ORG fc 4.0 PQ: 0 ANSI: 5
[ 3.180932] sd 9:0:0:0: Attached scsi generic sg0 type 0
[ 3.181678] sd 9:0:0:0: [sda] 419430400 512-byte logical blocks: (215 GB/200 GiB)
[ 3.181789] sd 9:0:0:0: [sda] Write Protect is off
[ 3.181790] sd 9:0:0:0: [sda] Mode Sense: 43 00 10 08
[ 3.181943] sd 9:0:0:0: [sda] Write cache: enabled, read cache: enabled, supports DPO and FUA
[ 3.184574] sd 9:0:0:0: [sda] Attached SCSI disk
/dev/sda としてターゲット側で公開しているストレージが見えています。
フォーマット
通常のディスクと同様にフォーマットして使用します。 今回はext4でフォーマットします。
sudo mkfs.ext4 /dev/sda
フォーマット後は、マウントして使用することができます。
参考
http://linux-iscsi.org/wiki/Fibre_Channel http://www.linux-iscsi.org/Doc/LIO%20Admin%20Manual.pdf