Debian 10 Buster
Sponsored Link

iSCSI : iSCSIターゲットの設定 (targetcli)2019/07/17

 
iSCSI によるストレージサーバーの構築です。
ネットワーク上のストレージを iSCSI ターゲット、iSCSI ターゲットに接続するクライアントを iSCSI イニシエーターと呼びます。
当例では以下のような環境で iSCSI ストレージサーバーを構築します。
+----------------------+          |          +----------------------+
| [   iSCSI Target   ] |10.0.0.30 | 10.0.0.31| [ iSCSI Initiator  ] |
|     dlp.srv.world    +----------+----------+     www.srv.world    |
|                      |                     |                      |
+----------------------+                     +----------------------+

[1] 管理ツールをインストールします。
root@dlp:~#
apt -y install targetcli-fb
[2] iSCSI ターゲットの設定です。
例として [/var/lib/iscsi_disks] ディレクトリ内にディスクイメージを作成し、SCSI デバイスとして共有できるよう設定します。 なお、例でのディスクイメージの他にも、ブロックデバイスや RAM ディスク等も SCSI デバイスとして設定可能です。
# ディスクイメージ格納ディレクトリ作成

root@dlp:~#
mkdir /var/lib/iscsi_disks

# 管理ツール起動

root@dlp:~#
targetcli

Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb48
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> cd backstores/fileio 

# [disk01] という名前で [/var/lib/iscsi_disks/disk01.img] を 10G で作成
/backstores/fileio> create disk01 /var/lib/iscsi_disks/disk01.img 10G 
Created fileio disk01 with size 10737418240

/backstores/fileio> cd /iscsi 

# ターゲットを作成
/iscsi> create iqn.2019-07.world.srv:storage.target01 
Created target iqn.2019-07.world.srv:storage.target01.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

/iscsi> cd iqn.2019-07.world.srv:storage.target01/tpg1/luns 

# LUN を設定
/iscsi/iqn.20...t00/tpg1/luns> create /backstores/fileio/disk01 
Created LUN 0.

/iscsi/iqn.20...t00/tpg1/luns> cd ../acls 

# ACLを設定 (接続を許可するイニシエーターのIQNを設定)
/iscsi/iqn.20...t00/tpg1/acls> create iqn.2019-07.world.srv:www.srv.world 
Created Node ACL for iqn.2019-07.world.srv:www.srv.world
Created mapped LUN 0.

/iscsi/iqn.20...t00/tpg1/acls> cd iqn.2019-07.world.srv:www.srv.world 

# 認証用ユーザーID を設定
/iscsi/iqn.20....srv.world> set auth userid=username 
Parameter userid is now 'username'.

/iscsi/iqn.20....srv.world> set auth password=password 
Parameter password is now 'password'.

/iscsi/iqn.20....srv.world> exit 
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/rtslib-fb-target/backup.
Configuration saved to /etc/rtslib-fb-target/saveconfig.json

# 上記設定後、以下のようにターゲットがリスン状態になる

root@dlp:~#
ss -napt | grep 3260

LISTEN     0      256          *:3260                     *:*
[3] 自動起動スクリプトが付属していないため、システムを再起動するとサービスが起動しません。
よって、システム再起動後に手動で上げる場合は以下のように実行します。
root@dlp:~#
targetctl restore

[4] または、自動起動スクリプトは Ubuntu 付属のスクリプトが流用可能ですので、同じ内容のスクリプトを設定することで自動起動可能です。
root@dlp:~#
vi /etc/init.d/rtslib-fb-targetctl
# 以下の内容で新規作成

#!/bin/bash

### BEGIN INIT INFO
# Provides:             rtslib-fb-targetctl
# Required-Start:       $network $local_fs $remote_fs $syslog
# Required-Stop:        $local_fs $network $remote_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Start LIO targets
# Description:          Loads configfs and restores LIO config with targetctl
### END INIT INFO

# Author: Thomas Goirand <zigo@debian.org>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="rstlib-fb targetctl"
NAME=targetctl
DAEMON=/usr/bin/${NAME}
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/rtslib-fb-targetctl
SYSTEM_USER=trove

[ -x $DAEMON ] || exit 0

. /lib/lsb/init-functions

check_configfs_module () {
        if ! modprobe configfs ; then
                echo "Could not load configfs module: exiting!"
                exit 0
        fi
        sleep 10
}

check_configfs_mounted () {
        WORD_TO_GREP_IN_PROCMOUNT=configfs
        NUM_RETRY=50
        while ! cat /proc/mounts | grep -q ${WORD_TO_GREP_IN_PROCMOUNT} && [ "${NUM_RETRY}" != 0 ] ; do
                NUM_RETRY=$(( $NUM_RETRY - 1 ))
                sleep 0.1
        done

        if ! cat /proc/mounts | grep -q ${WORD_TO_GREP_IN_PROCMOUNT} ; then
                echo " ${WORD_TO_GREP_IN_PROCMOUNT} not found in /proc/mount: exiting!"
                exit 0
        fi
}

case "$1" in
start)
        check_configfs_module
        check_configfs_mounted
        log_daemon_msg "Loading $DESC" "$NAME"
        ${DAEMON} restore
        if [ $? -gt 0 ] ; then
                log_end_msg 1
                exit 1
        fi
        log_end_msg 0
;;
stop)
        check_configfs_module
        log_daemon_msg "Unloading $DESC" "${NAME}"
        ${DAEMON} clear
        if [ $? -gt 0 ] ; then
                log_end_msg 1
                exit 1
        fi
        log_end_msg 0
;;
restart|reload|force-reload)
        $0 stop
        sleep 3
        $0 start
;;
status)
        echo "Not supported!"
        exit 1
;;
*)
        echo "usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}"
        exit 1
;;
esac

exit 0

root@dlp:~#
chmod 755 /etc/init.d/rtslib-fb-targetctl

root@dlp:~#
systemctl enable rtslib-fb-targetctl
関連コンテンツ