Bug#1036568: Design Defect in systemd-poweroff.service (Race Condition)
Alex Meyer
debbug523 at zezax.com
Mon May 22 20:24:15 BST 2023
Package: systemd
Version: 247.3-7+deb11u2
I'm running Debian bullseye with systemd. I also have installed mdadm
and nut-server.
Looking in /lib/systemd/system-shutdown, I see two drop-in files with
contents as follows:
mdadm.shutdown:
#!/bin/sh
# We need to ensure all md arrays with external metadata
# (e.g. IMSM, DDF) are clean before completing the shutdown.
/sbin/mdadm --wait-clean --scan
nutshutdown:
#!/bin/sh
/sbin/upsmon -K >/dev/null 2>&1 && /sbin/upsdrvctl shutdown
The man page for systemd-poweroff.service explains that:
All executables in this directory are executed in parallel
This is the problem.
mdadm.shutdown is trying to delay the shutdown action until data
integrity can be guaranteed (for arrays with external metadata).
Meanwhile, nutshutdown will immediately turn off the power. These are
obviously incompatible.
If execution were changed from parallel to sequential with a
deterministic ordering, this race condition could be avoided.
There may also be other ways to address the problem, such as relocating
the mdadm stuff to some other spot in the systemd world. This is
speculation on my part, as I'm no expert on systemd.
I should note that I do not personally have any md arrays with external
metadata. I do, however, have a UPS powering my Debian box and I can
verify that orderly shutdown causes it to de-energize immediately at
this point. I think it's self-evident that waiting for anything is
doomed to fail when run in parallel with powering off the host.
So, to be clear, this is a design defect I noticed, not a problem I'm
experiencing. Still, it looks like a doozy, and I feel compelled to
report it.
I see this as a structural problem. It's clearly documented as the
intended behavior. It doesn't depend on specific contents of my mdadm
or nut configuration files, nor on my specific kernel. Nevertheless:
# cat /etc/debian_version
11.7
# uname -a
Linux vault 5.10.178-alex #8 SMP Fri May 19 15:44:12 PDT 2023 x86_64
GNU/Linux
More information about the Pkg-systemd-maintainers
mailing list