Package: open-iscsi
Version: 2.1.10-2
Severity: important
Hi,
I'm seeing an issue where automatic login at boot doesn't work on trixie, and
even after manual login, automatic logout at shutdown doesn't work on some
setups (see below for details).
I did see #932799 which sounds related but since I only see this on trixie, not
on bookworm, it most likely isn't the same issue. Marked as important because
#932799 was also marked as important.
Steps to reproduce:
- edit /etc/iscsi/iscsid.conf to set `node.startup = automatic`
- perform discovery and login:
# iscsiadm -m discovery --portal 10.1.1.128 --type sendtargets
10.1.1.128:3260,1
iqn.2003-01.org.linux-iscsi.iscsi-target-1path.x8664:sn.a65a5f75b209
# iscsiadm -m node --login
Logging in to [iface: default, target:
iqn.2003-01.org.linux-iscsi.iscsi-target-1path.x8664:sn.a65a5f75b209, portal:
10.1.1.128,3260]
Login to [iface: default, target:
iqn.2003-01.org.linux-iscsi.iscsi-target-1path.x8664:sn.a65a5f75b209, portal:
10.1.1.128,3260] successful.
# iscsiadm -m session
tcp: [1] 10.1.1.128:3260,1
iqn.2003-01.org.linux-iscsi.iscsi-target-1path.x8664:sn.a65a5f75b209 (non-flash)
- reboot
- after boot, no iSCSI session is established even though `node.startup` was
set to automatic:
# iscsiadm -m session
iscsiadm: No active sessions.
# journalctl -b | grep open-iscsi
Dec 18 10:42:48 debian-testing systemd[1]: open-iscsi.service - Login to
default iSCSI targets was skipped because no trigger condition checks were met.
# LANG=C systemctl status open-iscsi
* open-iscsi.service - Login to default iSCSI targets
Loaded: loaded (/usr/lib/systemd/system/open-iscsi.service; enabled;
preset: enabled)
Active: inactive (dead)
Condition: start condition unmet at Wed 2024-12-18 10:42:48 CET; 30s ago
|- ConditionDirectoryNotEmpty=|/etc/iscsi/nodes was not met
`- ConditionDirectoryNotEmpty=|/sys/class/iscsi_session was not met
Docs: man:iscsiadm(8)
man:iscsid(8)
Dec 18 10:42:48 debian-testing systemd[1]: open-iscsi.service - Login to
default iSCSI targets was skipped because no trigger condition checks were met.
I believe the reason is that upstream open-iscsi 2.1.9 changed [1] the location
of the persistent discovery database from /etc/iscsi/nodes to
/var/lib/iscsi/nodes:
# ls -al /etc/iscsi/nodes
ls: cannot access '/etc/iscsi/nodes': No such file or directory
# ls -al /var/lib/iscsi/nodes
total 12
drwx------ 3 root root 4096 Dec 18 09:22 .
drwx------ 4 root root 4096 Dec 18 09:22 ..
drwx------ 3 root root 4096 Dec 18 09:22
iqn.2003-01.org.linux-iscsi.iscsi-target-1path.x8664:sn.a65a5f75b209
But open-iscsi.service [2] checks for existence of /etc/iscsi/nodes (or
/sys/class/iscsi_session, which doesn't exist if there is no iSCSI session):
# systemctl cat open-iscsi.service | grep Condition
ConditionDirectoryNotEmpty=|/etc/iscsi/nodes
ConditionDirectoryNotEmpty=|/sys/class/iscsi_session
And hence doesn't start on boot.
Another side-effect is even after manual login, it looks like in some
situations automatic logout at shutdown doesn't work and shutdown hangs. I can
reproduce this if an iSCSI LUN is an LVM PV/VG with an active LV:
# iscsiadm -m node --login
Logging in to [iface: default, target:
iqn.2003-01.org.linux-iscsi.iscsi-target-1path.x8664:sn.a65a5f75b209, portal:
10.1.1.128,3260]
Login to [iface: default, target:
iqn.2003-01.org.linux-iscsi.iscsi-target-1path.x8664:sn.a65a5f75b209, portal:
10.1.1.128,3260] successful.
# ls -al
/dev/disk/by-path/ip-10.1.1.128\:3260-iscsi-iqn.2003-01.org.linux-iscsi.iscsi-target-1path.x8664\:sn.a65a5f75b209-lun-0
lrwxrwxrwx 1 root root 9 Dec 18 09:52
/dev/disk/by-path/ip-10.1.1.128:3260-iscsi-iqn.2003-01.org.linux-iscsi.iscsi-target-1path.x8664:sn.a65a5f75b209-lun-0
-> ../../sdb
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb myvg lvm2 a-- <3.97g 3.48g
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync
Convert
mylv myvg -wi-a----- 500.00m
# poweroff
Shutdown hangs and I get the following warnings in the console:
Dec 18 09:53:43 debian-testing kernel: connection1:0: ping timeout of 5 secs
expired, recv timeout 5, last rx 4294911518, last ping 4294912832, now
4294914112
If I manually override ConditionDirectoryNotEmpty, both automatic login and
logout seem to work again:
# cat /etc/systemd/system/open-iscsi.service.d/override.conf
[Unit]
ConditionDirectoryNotEmpty=|/var/lib/iscsi/nodes
There is likely an additional problem on upgrades: On setups using automatic
login on bookworm, automatic login won't work after upgrading to trixie. These
setups have records at /etc/iscsi/nodes, so current open-iscsi.service will
start, but iscsiadm will not find them and thus won't log in.
As for how to fix this, I guess there are at least two options, but none seems
optimal:
- set dbroot back to /etc/iscsi, as hinted in [1].
But this might break setups already using the new location that don't rely on
automatic login.
- change open-iscsi.service to use the new location, i.e.,
ConditionDirectoryNotEmpty=|/var/lib/iscsi/nodes.
But this would still break automatic login on setups upgrading from bookworm
that have records in /etc/iscsi/nodes, as post-upgrade open-iscsi.service
won't start on boot then. Even if it started, iscsiadm wouldn't find the
discovery records under the old location and wouldn't login (see above).
Happy to provide more information if needed, just let me know.
[1]
https://github.com/open-iscsi/open-iscsi/commit/2eda28874196ed02c0d7b3696ccf81142c60409c
[2]
https://salsa.debian.org/linux-blocks-team/open-iscsi/-/blob/83da404e431b3020af7a122170b00a5bb79c69d1/debian/open-iscsi.service
-- System Information:
Debian Release: trixie/sid
APT prefers testing
APT policy: (500, 'testing')
Architecture: amd64 (x86_64)
Kernel: Linux 6.11.10-amd64 (SMP w/4 CPU threads; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8),
LANGUAGE=en_US:en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages open-iscsi depends on:
ii debconf [debconf-2.0] 1.5.87
ii init-system-helpers 1.67
ii libc6 2.40-4
ii libisns0t64 0.101-1+b1
ii libkmod2 33+20240816-2
ii libmount1 2.40.2-12
ii libopeniscsiusr 2.1.10-2
ii libssl3t64 3.3.2-2
ii libsystemd0 257-2
ii udev 257-2
Versions of packages open-iscsi recommends:
ii busybox 1:1.37.0-4
pn finalrd <none>
open-iscsi suggests no packages.
-- Configuration Files:
/etc/iscsi/iscsid.conf changed:
iscsid.startup = /bin/systemctl start iscsid.socket
node.startup = automatic
node.leading_login = No
node.session.timeo.replacement_timeout = 120
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
node.session.err_timeo.abort_timeout = 15
node.session.err_timeo.lu_reset_timeout = 30
node.session.err_timeo.tgt_reset_timeout = 30
node.session.err_timeo.host_reset_timeout = 60
node.session.initial_login_retry_max = 8
node.session.cmds_max = 128
node.session.queue_depth = 32
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
node.session.nr_sessions = 1
node.session.reopen_max = 0
node.session.iscsi.FastAbort = Yes
node.session.scan = auto
-- debconf information:
open-iscsi/remove_even_with_active_sessions:
open-iscsi/upgrade_recovery_error:
open-iscsi/upgrade_even_with_failed_sessions:
open-iscsi/downgrade_and_break_system: