Elaboration in, Garbage out

Twitt*r ではメモできない何かそれ的なモノ・コトを

iscsi 喋られるようになりたい(on CentOS7)

はじめに

機械語は流石にアレですが、iSCSI をバックエンドで雑に作る必要があるので色々調査。

知り合いにどやされて ZFS を使おうとしてみました。

メモリ(L1ARC)や SSD(L2ARC, ZIL)でフル SSD でなくても、ストレージの IO をよさ気にキャッシュしてくれる機能、あれめっちゃよさ気やんー!って気に入ったら Oracle のお蔵入りになってたんですね。ふぁーい。

もちろん、ZFS on Linux で頑張っている人たちはいて、NFS とかは動く?動かない?かよくわからないらしいし、iSCSI をしゃべる機能が入ってない *1

それで色々ググっていたら、 targetci やら netbsd から移植された netbsd-iscsi が使えるらしいとのこと。なんか後者のほうが楽そうだから、netbsd-iscsi を使ってみた。

コマンド

参考

ここ(ftp://ftp.netbsd.org/pub/NetBSD/misc/agc/HOWTO-iSCSI-target.txt)がすべてなんですけどね。

vagrant

vagrant で virtuabox の disk を追加できることに最近気づきました。いい時代(?)ですね。

# -*- mode: ruby -*-
# vi: set ft=ruby :
ENV['VAGRANT_DEFAULT_PROVIDER'] = "virtualbox"
Vagrant.configure(2) do |config|
  config.vm.box = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.1_chef-provisionerless.box"
  config.vm.network "private_network", ip: "192.168.33.151"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "4096"

    # You can add a disk with below scripts

    file_to_disk = "/path/2/your/location.vdi"
    if not File.exist?(file_to_disk) then
      vb.customize ["createhd",
                    "--format", "VDI",
                    "--filename", file_to_disk,
                    "--size", 100 * 1024]
    end
    vb.customize ['storageattach', :id,
                  '--storagectl', 'SATA Controller',
                  '--port', 1,
                  '--device', 0,
                  '--type', 'hdd',
                  '--medium', file_to_disk]
  end
end

iSCSI-Target をインストール

EPEL パッケージを入れれば一発です。

# yum install epel-release
# yum install netbsd-iscsi

設定

とにかく喋ればおっけーなので、/etc/iscsi/targets にデバイスファイルをダイレクトに使用します。 心配な人は mdadmRAID 組むとか、RAID で組んだファイルシステム上のファイルを指定すれば *2 オッケーですね。

  • /etc/iscsi/targets の中身
# extents       file            start   length
extent0         /dev/sdb        0       50GB
extent1         /dev/sdb        53687091201     49GB

# target        flags   storage         netmask
target0         rw      extent0         0.0.0.0/0
target1         rw      extent1         0.0.0.0/0
  • 設定の反映
# iscsi-target restart
Reading configuration from `/etc/iscsi/targets'
target0:rw:0.0.0.0/0
  extent0:/dev/sdb:0:53687091200
target1:rw:0.0.0.0/0
  extent1:/dev/sdb:53687091201:52613349376
DISK: 1 logical unit (104857600 blocks, 512 bytes/block), type iscsi fs
DISK: LUN 0: 51200 MB disk storage for "target0"
DISK: 1 logical unit (102760448 blocks, 512 bytes/block), type iscsi fs
DISK: LUN 0: 50176 MB disk storage for "target1"
TARGET: TargetName is iqn.1994-04.org.netbsd.iscsi-target

IQN iqn.1994-04.org.netbsd.iscsi-target 上で いわゆる LUN target0target1 が作成された、ということですね。

iSCSI のクライアント側の設定

イニシエータ (Initiator)と呼ぶらしいですね。参考はこちら。

www.server-world.info

  • イニシエータのインストール
# yum -y install iscsi-initiator-utils
  • IQN の設定
# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-04.org.netbsd.iscsi-target

これで、接続してみます。

# iscsiadm -m node --login 
Logging in to [iface: default, target: iqn.1994-04.org.netbsd.iscsi-target:target0, portal: 192.168.11.49,3260] (multiple)
Logging in to [iface: default, target: iqn.1994-04.org.netbsd.iscsi-target:target1, portal: 192.168.11.49,3260] (multiple)
Login to [iface: default, target: iqn.1994-04.org.netbsd.iscsi-target:target0, portal: 192.168.11.49,3260] successful.
Login to [iface: default, target: iqn.1994-04.org.netbsd.iscsi-target:target1, portal: 192.168.11.49,3260] successful.

接続?でログイン?何が変わった?と、気になりますが、実はディスクドライブが増えています。

# cat /proc/partitions 
major minor  #blocks  name

   8        0   62522712 sda
   8        1     512000 sda1
   8        2   57815040 sda2
   8        3    4194304 sda3
   8       32   52428800 sdc
   8       16   51380224 sdb
[root@localhost vagrant]# 

おおー!となったので、今度は切断(ログアウト)してみます。

# iscsiadm -m node --logout;echo; cat /proc/partitions 
Logging out of session [sid: 3, target: iqn.1994-04.org.netbsd.iscsi-target:target0, portal: 192.168.11.49,3260]
Logging out of session [sid: 4, target: iqn.1994-04.org.netbsd.iscsi-target:target1, portal: 192.168.11.49,3260]
Logout of [sid: 3, target: iqn.1994-04.org.netbsd.iscsi-target:target0, portal: 192.168.11.49,3260] successful.
Logout of [sid: 4, target: iqn.1994-04.org.netbsd.iscsi-target:target1, portal: 192.168.11.49,3260] successful.

major minor  #blocks  name

   8        0   62522712 sda
   8        1     512000 sda1
   8        2   57815040 sda2
   8        3    4194304 sda3

なるほどこれは便利そう!

おわりに

  • Listen を 0.0.0.0/0 にしている点、認証が全くないので、本番では使わないよう。
  • というか、遅すぎて本番環境では使い物にならないはず。
  • 書いている途中で気付きましたが、CentOS 7.2 がやっと出たんですね。

*1: PR はだいぶ昔に通ってるみたいだが、いつの間にかなくなっている?

*2:http://tech-tw.blogspot.jp/2009/05/netbsdiscsi-target1-target.html