harry’s memorandum

おれおれメモ

ubuntu10.04 の IET (iSCSI Enterprise Target) を使ってみた

サーバ仮想化の世界では、もうiSCSIは当たり前になってきましたね。
テスト用にあまったNetBookiSCSIターゲットにしようと色々試みたのですが FreeNASやOpenfilerなど便利なものがあれど、Acerの安いNetbookではNICが認識してくれず、まともにインストールできたのはUbuntu10.04ぐらいでしたので、Ubuntuで使えるiSCSIターゲットのIETを使ってみました。

IETをインストール

apt-getでさくっとインストール。

 # apt-get install iscsitarget

自動起動するように設定。

 # apt-get install rcconf
 # rcconf --on iscsitarget
 # cat /etc/default/iscsitarget
 ISCSITARGET_ENABLE=true
 # /etc/init.d/iscsitarget restart
大まかな手順

ietadmコマンドの部分は特になくてもできます。1, 3 だけでOKです。

  1. LVMでiSCSI用のボリューム作成
  2. ietadmコマンドでターゲット設定
    1. ターゲットを作成
    2. LUNを追加
    3. 必要であれば認証を設定
  3. /etc/iet.confに記述して起動時に有効にする。
LVMでiSCSI用のボリュームを作成

ここではLUNを2つ追加するために2つのボリュームを作成します。

# pvscan
  PV /dev/sda5   VG jake   lvm2 [148.81 GiB / 139.50 GiB free]
  Total: 1 [148.81 GiB] / in use: 1 [148.81 GiB] / in no VG: 0 [0   ]
# vgdisplay
  --- Volume group ---
  VG Name               jake
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               148.81 GiB
  PE Size               4.00 MiB
  Total PE              38095
  Alloc PE / Size       2383 / 9.31 GiB
  Free  PE / Size       35712 / 139.50 GiB
  VG UUID               b7CAnC-AHx2-7JZW-dz6H-vOW7-NJxT-t2Q2mo

# lvcreate --size=20G --name iscsi001 jake
  Logical volume "iscsi001" created
# lvcreate --size=20G --name iscsi002 jake
  Logical volume "iscsi001" created
ietadmコマンドでターゲット設定

ゴミプロでターゲット名を作成。ターゲット名は iqn.yyyy-mm.[:identifier] というフォーマットが望ましいらしい。identifier を uuidにしちゃうのはよくないかもね。

require 'socket'

def rnd(n)
  Array.new(n){ format("%02x",rand(255)).to_s }.join
end

domain = "dharry.local"
day = Time.now.strftime("%Y-%m")
host = Socket.gethostname
uuid =  [4, 2, 2, 2, 6].map {|n| rnd(n) }.join #("-")

puts ["iqn", day, domain, host].join(".") + ":" + uuid
 #=> iqn.2010-07.dharry.local.jake:b62177354733bd1d767a04da5370ea29
ietadmでターゲットを作成してLUNを追加
# ietadm --op new --tid=1 --params Name=iqn.2010-07.dharry.local.jake:b62177354733bd1d767a04da5370ea29
# ietadm --op new --tid=1 --lun=1 --params Path=/dev/jake/iscsi001
# ietadm --op new --tid=1 --lun=2 --params Path=/dev/jake/iscsi002
設定がうまくできているか確認
# cat /proc/net/iet/session
tid:1 name:iqn.2010-07.dharry.local.jake:b62177354733bd1d767a04da5370ea29
#  cat /proc/net/iet/volume
tid:1 name:iqn.2010-07.dharry.local.jake:b62177354733bd1d767a04da5370ea29
        lun:1 state:0 iotype:fileio iomode:wt path:/dev/jake/iscsi001
        lun:2 state:0 iotype:fileio iomode:wt path:/dev/jake/iscsi002
/etc/iet.confに記述して起動時に有効にする。
Target iqn.2010-07.dharry.local.jake:b62177354733bd1d767a04da5370ea29
  Lun 1 Path=/dev/jake/iscsi001
  Lun 2 Path=/dev/jake/iscsi002
  Alias iscsi
補足

XenServerなど使うときは、ボリュームがアクティブにならないように設定する。
(2010/09/12 一部間違っていたので修正)
ubuntuやfedoraの新しいバージョンではlvm名にホスト名が入るので /dev/${hostname} はactiveになるようにします。
https://forums.openfiler.com/viewtopic.php?pid=8951

# cat /etc/lvm/lvm.conf | grep "filter" | grep -v "#"
    filter = [ "r|/dev/dm-*|", "r|/dev/VG_XenStorage*|", "r|/dev/sr/iscsi|" ]