ArchLinux 2017.10.01: Install open-iscsi for iSCSI initiator

This article will describe installing open-iscsi for iSCSI initiator.

1 Install open-iscsi

Install open-iscsi package.

$ sudo pacman -Sy --noconfirm open-iscsi

2 Connect to iSCSI target with iscsiadm

Connect to iSCSI target with iscsiadm.

$ ISCSI_TARGET_PORTAL=iscsi-target.hiroom2.com
$ ISCSI_TARGET_NAME=iqn.2017-08.com.hiroom2:disk
$ sudo iscsiadm -m discovery -t st -p "${ISCSI_TARGET_PORTAL}"
192.168.11.95:3260,1 iqn.2017-08.com.hiroom2:disk
$ sudo iscsiadm -m node \
       --targetname "${ISCSI_TARGET_NAME}" -p "${ISCSI_TARGET_PORTAL}" -l
Logging in to [iface: default, target: iqn.2017-08.com.hiroom2:disk,
portal: 192.168.11.95,3260] (multiple)
Login to [iface: default, target: iqn.2017-08.com.hiroom2:disk,
portal: 192.168.11.95,3260] successful.

3 Mount iSCSI target device on boot

Change node.startup to automatic in /etc/iscsi/iscsid.conf.

$ sudo sed -e 's/^node.startup = manual/node.startup = automatic/g' \
       -i /etc/iscsi/iscsid.conf

Connect to iSCSI target. If you have connected to iSCSI target before changing node.startup to automatic, you need to connect to iSCSI target again after changing node.startup to automatic.

$ sudo iscsiadm -m discovery -t st -p "${ISCSI_TARGET_PORTAL}"
$ sudo iscsiadm -m node \
       --targetname "${ISCSI_TARGET_NAME}" -p "${ISCSI_TARGET_PORTAL}" -l

Create filesystem on iSCSI target device with fdisk and mkfs.

$ ISCSI_TARGET_DEV=/dev/sda
$ cat <<EOF | sudo fdisk ${ISCSI_TARGET_DEV}
n
p
1


w
EOF
$ sudo mkfs.ext4 ${ISCSI_TARGET_DEV}1

Add mount entry to /etc/fstab. For avoiding mounting before network initialization, you need to add _netdev option. For making x-systemd.automount to mount, you need to add x-systemd.automount to option.

$ uuid=$(sudo blkid | grep "^${ISCSI_TARGET_DEV}1:" | \
          sed -e 's/.* UUID="\([^"]*\)".*/\1/g')
$ cat <<EOF | sudo tee -a /etc/fstab
UUID="${uuid}" /mnt ext4 _netdev,x-systemd.automount 0 0
EOF

Create a service which will attach iSCSI target with iscsiadm.

$ cat <<EOF | sudo tee /usr/lib/systemd/system/iscsiadm.service
[Unit]
Description=Login and scanning of iSCSI devices
After=network.target
Before=open-iscsi.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/sbin/iscsiadm -m node --loginall=automatic
ExecReload=/sbin/iscsiadm -m node --loginall=automatic
ExecStop=/sbin/iscsiadm -m node --logoutall=all

[Install]
WantedBy=multi-user.target
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl enable iscsiadm.service