diff --git a/etc/systemd/iscsi-mark-root-nodes b/etc/systemd/iscsi-mark-root-nodes new file mode 100755 index 0000000..9d48805 --- /dev/null +++ b/etc/systemd/iscsi-mark-root-nodes @@ -0,0 +1,34 @@ +#!/bin/bash + +ISCSIADM=/usr/sbin/iscsiadm +start_iscsid=0 +start_iscsiuio=0 + +while read t num p target flash; do + # strip tag number from portal, keep "ip:port" + portal=${p%,*} + transport=${t%:} + + # use session number to find the iface name in use + num=${num#[}; num=${num%]} + iface=$(iscsiadm -m session -r $num | grep iface.iscsi_ifacename | cut -d= -f2) + + $ISCSIADM -m node -p $portal -T $target -I $iface -o update -n node.startup -v onboot + + start_iscsid=1 + + if [ "$transport" = bnx2i ] || [ "$transport" = qedi ]; then + start_iscsiuio=1 + fi +done < <( $ISCSIADM -m session ) + +# force iscsid and iscsiuio to start if needed for +# recovering sessions created in the initrd + +if [ "$start_iscsid" -eq 1 ]; then + systemctl --no-block start iscsid.service +fi +if [ "$start_iscsiuio" -eq 1 ]; then + systemctl --no-block start iscsiuio.service +fi + diff --git a/etc/systemd/iscsi-onboot.service b/etc/systemd/iscsi-onboot.service new file mode 100644 index 0000000..42ced68 --- /dev/null +++ b/etc/systemd/iscsi-onboot.service @@ -0,0 +1,15 @@ +[Unit] +Description=Special handling of early boot iSCSI sessions +Documentation=man:iscsiadm(8) man:iscsid(8) +DefaultDependencies=no +RefuseManualStart=true +Before=iscsi.service +After=systemd-remount-fs.service +ConditionDirectoryNotEmpty=/sys/class/iscsi_session + +[Service] +Type=oneshot +ExecStart=-/usr/libexec/iscsi-mark-root-nodes + +[Install] +WantedBy=sysinit.target diff --git a/etc/systemd/iscsi-shutdown.service b/etc/systemd/iscsi-shutdown.service new file mode 100644 index 0000000..caee933 --- /dev/null +++ b/etc/systemd/iscsi-shutdown.service @@ -0,0 +1,15 @@ +[Unit] +Description=Logout off all iSCSI sessions on shutdown +Documentation=man:iscsid(8) man:iscsiadm(8) +DefaultDependencies=no +Conflicts=shutdown.target +After=systemd-remount-fs.service network.target iscsid.service iscsiuio.service +Before=remote-fs-pre.target +Wants=remote-fs-pre.target +RefuseManualStop=yes + +[Service] +Type=oneshot +RemainAfterExit=true +ExecStart=-/usr/bin/true +ExecStop=-/usr/sbin/iscsiadm -m node --logoutall=all diff --git a/etc/systemd/iscsi.service b/etc/systemd/iscsi.service index 2f2bf81..175cb2c 100644 --- a/etc/systemd/iscsi.service +++ b/etc/systemd/iscsi.service @@ -1,18 +1,18 @@ [Unit] Description=Login and scanning of iSCSI devices Documentation=man:iscsiadm(8) man:iscsid(8) -Before=remote-fs.target -After=network.target network-online.target -After=iscsid.service iscsi-init.service -Requires=iscsid.socket iscsi-init.service +DefaultDependencies=no +Before=remote-fs-pre.target +After=network.target network-online.target iscsid.service iscsiuio.service systemd-remount-fs.service +Wants=remote-fs-pre.target iscsi-shutdown.service +ConditionDirectoryNotEmpty=/var/lib/iscsi/nodes [Service] Type=oneshot -ExecStart=/sbin/iscsiadm -m node --loginall=automatic -ExecStop=/sbin/iscsiadm -m node --logoutall=automatic -ExecStop=/sbin/iscsiadm -m node --logoutall=manual -SuccessExitStatus=21 15 RemainAfterExit=true +ExecStart=-/usr/sbin/iscsiadm -m node --loginall=automatic +ExecReload=-/usr/sbin/iscsiadm -m node --loginall=automatic +SuccessExitStatus=21 [Install] WantedBy=remote-fs.target diff --git a/etc/systemd/iscsid.service b/etc/systemd/iscsid.service index 648ceea..28402fb 100644 --- a/etc/systemd/iscsid.service +++ b/etc/systemd/iscsid.service @@ -4,12 +4,11 @@ Documentation=man:iscsid(8) man:iscsiuio(8) man:iscsiadm(8) DefaultDependencies=no After=network.target iscsiuio.service Before=remote-fs-pre.target -Wants=remote-fs-pre.target [Service] Type=notify NotifyAccess=main -ExecStart=/sbin/iscsid -f +ExecStart=/usr/sbin/iscsid -f KillMode=mixed Restart=on-failure diff --git a/etc/systemd/iscsiuio.service b/etc/systemd/iscsiuio.service index 923e019..fc0be93 100644 --- a/etc/systemd/iscsiuio.service +++ b/etc/systemd/iscsiuio.service @@ -2,17 +2,15 @@ Description=iSCSI UserSpace I/O driver Documentation=man:iscsiuio(8) DefaultDependencies=no -Conflicts=shutdown.target Requires=iscsid.service BindTo=iscsid.service After=network.target Before=remote-fs-pre.target iscsid.service -Wants=remote-fs-pre.target [Service] Type=notify NotifyAccess=main -ExecStart=/sbin/iscsiuio -f +ExecStart=/usr/sbin/iscsiuio -f KillMode=mixed Restart=on-failure