summaryrefslogtreecommitdiffstats
path: root/systemd (follow)
Commit message (Collapse)AuthorAgeFilesLines
* mdadm.man: elaborate more about mdmonitor.serviceMariusz Tkaczyk2024-10-101-4/+7
| | | | | | Describe how it behaves and how it can be configured to work. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
* mdmonitor: Abandon custom configuration filesMariusz Tkaczyk2024-10-102-52/+15
| | | | | | | | | | | | | | | Operating system vendors are customizing mdmonitor service beacause the default form is not satifying for them (expect SUSE). As a result, support is complicated (maintainers have to check the system) and man page is not detailed. I propose to abandon custom configuration files via sysconfig and keep it inside mdadm.conf only. Detailed comment in service for OSV maintainers is added to help with transition. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com>
* Remove the config files in mdcheck_start|continue serviceXiao Ni2023-04-102-4/+0
| | | | | | | | | We set MDADM_CHECK_DURATION in the mdcheck_start|continue.service files. And mdcheck doesn't use any configs from the config file. So we can remove the dependencies. Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
* Revert "Revert "mdadm/systemd: remove KillMode=none from service file""Mariusz Tkaczyk2023-03-231-1/+0
| | | | | | | | | | This reverts commit 28a083955c6f58f8e582734c8c82aff909a7d461. Resolved by commit 723d1df4946e ("mdmon: Improve switchroot interactions.") We are ready to drop it. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
* Improvements for IMSM_NO_PLATFORM testing.NeilBrown2023-03-201-3/+0
| | | | | | | | | | | | | | | Factor out IMSM_NO_PLATFORM testing into a single function that caches the result. Allow mdmon to explicitly set the result to "1" so that we don't need the ENV var in the unit file Check if the kernel command line contains "mdadm.imsm.test=1" and in that case assert NO_PLATFORM. This simplifies testing in a virtual machine. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
* mdmon: Improve switchroot interactions.NeilBrown2023-03-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We need a new mdmon@mdfoo instance to run in the root filesystem after switch root, as /sys and /dev are removed from the initrd. systemd will not start a new unit with the same name running while the old unit is still active, and we want the two mdmon processes to overlap in time to avoid any risk of deadlock, which can happen when a write is attempted with no mdmon running. So we need a different unit name in the initrd than in the root. Apart from the name, everything else should be the same. This is easily achieved using a different instance name as the mdmon@.service unit file already supports multiple instances (for different arrays). So start "mdmon@mdfoo.service" from root, but "mdmon@initrd-mdfoo.service" from the initrd. udev can tell which circumstance is the case by looking for /etc/initrd-release. continue_from_systemd() is enhanced so that the "initrd-" prefix can be requested. Teach mdmon that a container name like "initrd/foo" should be treated just like "foo". Note that systemd passes the instance name "initrd-foo" as "initrd/foo". We don't need a similar mechanism at shutdown because dracut runs "mdmon --takeover --all" when appropriate. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
* mdmon: Remove need for KillMode=noneNeilBrown2023-03-191-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | mdmon needs to keep running during the switchroot out of (at boot) and then back into (at shutdown) the initrd. It runs until a new mdmon takes over. Killmode=none is used to achieve this, with the help of --offroot which sets argv[0][0] to '@' which systemd understands. This is needed because mdmon is currently run in system-mdmon.slice which conflicts with shutdown.target so without Killmode=none mdmon would get killed early in shutdown when system.mdmon.slice is removed. As described in systemd.service(5), this conflict with shutdown can be resolved by explicitly requesting system.slice, which is a natural counterpart to DefaultDependencies=no. So add that, and also add IgnoreOnIsolate=true to avoid another possible source of an early death. With these we no longer need KillMode=none which the systemd developers have marked as "deprecated". Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
* mdmon: change systemd unit file to use --foregroundNeilBrown2023-03-191-2/+1
| | | | | | | | | | There is no value in mdmon forking when it is running under systemd - systemd can still track it anyway. So add --foreground option, and remove "Type=forking". Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
* Revert "mdadm/systemd: remove KillMode=none from service file"Mariusz Tkaczyk2023-02-022-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 52c67fcdd6dadc4138ecad73e65599551804d445. The functionality is marked as deprecated but we don't have alternative solution yet. Shutdown hangs if OS is installed on external array: task:umount state:D stack: 0 pid: 6285 ppid: flags:0x00004084 Call Trace: __schedule+0x2d1/0x830 ? finish_wait+0x80/0x80 schedule+0x35/0xa0 md_write_start+0x14b/0x220 ? finish_wait+0x80/0x80 raid1_make_request+0x3c/0x90 [raid1] md_handle_request+0x128/0x1b0 md_make_request+0x5b/0xb0 generic_make_request_no_check+0x202/0x330 submit_bio+0x3c/0x160 Use it until new solution is implemented. Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Signed-off-by: Jes Sorensen <jes@trained-monkey.org>
* mdadm: Add Documentation entries to systemd servicesMariusz Tkaczyk2022-09-167-1/+8
| | | | | | | | | | Add documentation section. Copied from Debian. Cc: Felix Lechner <felix.lechner@lease-up.com> Signed-off-by: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Acked-by: Coly Li <colyli@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* mdadm/systemd: remove KillMode=none from service fileColy Li2022-04-062-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For mdadm's systemd configuration, current systemd KillMode is "none" in following service files, - mdadm-grow-continue@.service - mdmon@.service This "none" mode is strongly againsted by systemd developers (see man 5 systemd.kill for "KillMode=" section), and is considering to remove in future systemd version. As systemd developer explained in disuccsion, the systemd kill process is, 1. send the signal specified by KillSignal= to the list of processes (if any), TERM is the default 2. wait until either the target of process(es) exit or a timeout expires 3. if the timeout expires send the signal specified by FinalKillSignal=, KILL is the default For "control-group", all remaining processes will receive the SIGTERM signal (by default) and if there are still processes after a period f time, they will get the SIGKILL signal. For "mixed", only the main process will receive the SIGTERM signal, and if there are still processes after a period of time, all remaining processes (including the main one) will receive the SIGKILL signal. From the above comment, currently KillMode=control-group is a proper kill mode. Since control-gropu is the default kill mode, the fix can be simply removing KillMode=none line from the service file, then the default mode will take effect. Signed-off-by: Coly Li <colyli@suse.de> Cc: Benjamin Brunner <bbrunner@suse.com> Cc: Franck Bui <fbui@suse.de> Cc: Jes Sorensen <jes@trained-monkey.org> Cc: Mariusz Tkaczyk <mariusz.tkaczyk@linux.intel.com> Cc: Neil Brown <neilb@suse.de> Cc: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* Remove the legacy whitespaceXiao Ni2020-02-243-3/+3
| | | | | | | | | The whitespace between Environment= and the true value causes confusion. To avoid confusing other people in future, remove the whitespace to keep it a simple, unambiguous syntax Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* mdcheck service can't start succesfully because of syntax errorXiao Ni2020-01-162-2/+2
| | | | | | | | It reports error when starting mdcheck_start and mdcheck_continue service. Invalid environment assignment, ignoring: MDADM_CHECK_DURATION="6 hours" Signed-off-by: Xiao Ni <xni@redhat.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* SUSE-mdadm_env.sh: handle MDADM_CHECK_DURATIONNeilBrown2019-11-121-0/+3
| | | | | | | | The suse sysconfig/mdadm allows MDADM_CHECK_DURATION to be set, but it is currently ignored. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* mdcheck: use ${} to pass variable to mdcheckNeilBrown2019-11-122-5/+4
| | | | | | | | | | | | $MDADM_CHECK_DURATION allows the value to be split on spaces. ${MDADM_CHECK_DURATION} avoids such splitting. Making this change removes the need for double quoting when setting the default Environment, and means that double quoting isn't needed in the EnvironmentFile. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* mdcheck: when mdcheck_start is enabled, enable mdcheck_continue too.NeilBrown2019-11-122-0/+3
| | | | | | | | | | | | | | | mdcheck_continue continues a regular array scan that was started by mdcheck_start. mdcheck_start will ensure that mdcheck_continue is active. Howver if you reboot after a check has started, but before it finishes, then mdcheck_continue won't cause it to continue, because nothing starts it on boot. So add an install option for mdcheck_contine, and make sure it gets enabled when mdcheck_start is enabled. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* Monitor: add system timer to run --oneshot periodicallyNeilBrown2018-12-062-0/+30
| | | | | | | | | | | | | | | "mdadm --monitor --oneshot" can be used to get a warning if there are any degraded arrays. It can be helpful to get this warning periodically while the condition persists. This patch add a systemd service and timer which can be enabled with systemctl enable mdmonitor-oneshot.service and will then provide daily warnings. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* mdcheck: add systemd unit files to run mdcheck.NeilBrown2018-12-064-0/+63
| | | | | | | | | | | | | | | | | Having the mdcheck script is not use if is never run. This patch adds systemd unit files so that it can easily be run on the first Sunday of each month for 6 hours, then on every subsequent morning until the check is finished. The units still need to be enabled with systemctl enable mdcheck_start.timer The timer will only actually be started when an array which might need it becomes active. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* systemd: add %I to description of mdadm-last-resort services.NeilBrown2017-11-012-2/+2
| | | | | | | | | | | | | | Just like the other template services, include the instance name (I%) in the description of mdadm-last-resort@.service mdadm-last-resort@.timer so that it is clear from the logs which array is affected. Reported-by: Andrei Borzenkov <arvidjaar@gmail.com> Link: http://bugzilla.opensuse.org/show_bug.cgi?id=1064915 Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* Move mdadm_env.sh out of /usr/lib/systemdNeilBrown2017-10-101-1/+1
| | | | | | | | | | | | The systemd developers like to keep control of the lib/systemd namespace, and haven't approved of the use of lib/systemd/scripts. So we should stop using it. Move the mdadm_env.sh script, optionally sourced by mdmonitor.service, to a new directory /usr/lib/mdadm. Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* systemd/mdadm-last-resort: use ConditionPathExists instead of ConflictsNeilBrown2017-04-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | Commit cec72c071bbe ("systemd/mdadm-last-resort: add Conflicts to .service file.") added a 'Conflicts' directive to the mdadm-last-resort@.service file in the hope that this would make sure the service didn't run after the device was active, even if the timer managed to get started, which is possible in race conditions. This seemed to work is testing, but it isn't clear why, and it is known to cause problems. If systemd happens to know that the mentioned device is a dependency of a mount point, the Conflicts can unmount that mountpoint, which is certainly not wanted. So remove the "Conflicts" and instead use ConditionPathExists=!/sys/devices/virtual/block/%i/md/sync_action The "sync_action" file exists for any array which requires last-resort handling, and only appears when the array is activated. So it is safe to rely on it to determine if the last-resort is really needed. Fixes: cec72c071bbe ("systemd/mdadm-last-resort: add Conflicts to .service file.") Signed-off-by: NeilBrown <neilb@suse.com> Signed-off-by: Jes Sorensen <jsorensen@fb.com>
* Revert "mdadm/grow: reshape would be stuck from raid1 to raid5"Jes Sorensen2017-04-111-1/+1
| | | | | | | | | This reverts commit 5b2846684ef5172eccc432e3520b79efbc2abba5. This was a red herring and shouldn't have been applied in the first place. Signed-off-by: Jes Sorensen <Jes.Sorensen@gmail.com>
* mdadm/grow: reshape would be stuck from raid1 to raid5Zhilong Liu2017-03-301-1/+1
| | | | | | | | | | | | | | | systemctl doesn't interpret mdadm-grow-continue@.service correctly due to the wrong argument provided in [service], it should be corrected %I as %i. Otherwise, if the service cannot start by systemctl and the reshap progress would be stuck all time when grows array from raid1 to raid5. reproduce steps: ./mdadm -CR /dev/md0 -l1 -b internal -n2 /dev/loop[0-1] ./mdadm --grow /dev/md0 -l5 -n3 -a /dev/loop2 Signed-off-by: Zhilong Liu <zlliu@suse.com> Signed-off-by: Jes Sorensen <Jes.Sorensen@gmail.com>
* systemd/mdadm-last-resort: add Conflicts to .service file.NeilBrown2016-01-281-0/+1
| | | | | | | | | | | It seems that having the Conflicts in the .timer file is not sufficient. Sometimes it works, but if the timer gets requested after the conflicting block device appears (or was it "before" ...) the timer is not aborted. Having the Conflicts in both files seems to work reliably. URL: https://bugzilla.suse.com/show_bug.cgi?id=853944 Signed-off-by: NeilBrown <neilb@suse.com>
* install: use BINDIR consistently to locate mdadm and mdmonNeilBrown2014-05-225-5/+5
| | | | | | | | Every place where the paths for mdadm or mdmon is explicit, it should use the BINDIR setting, not "/sbin/". Reported-by: member graysky <graysky@archlinux.us> (https://bugs.archlinux.org/task/37330) Signed-off-by: NeilBrown <neilb@suse.de>
* Grow: try to let "--grow --continue" from systemd complete a reshape.NeilBrown2014-05-151-0/+17
| | | | | | | | | | | If "--assemble" or "--incremental" is started by udev, then monitoring the reshape in the background won't work. So try asking systemd to start a grow-continue. If that fails, just do it the old way. Signed-off-by: NeilBrown <neilb@suse.de>
* systemd: various fixes for boot with container-arrays.NeilBrown2014-04-082-2/+14
| | | | | | | | | | | | | | | | | | | | | | | | | 1/ Add systemd shutdown script to ensure DDF and IMSM are clean before we actually shutdown 2/ Get udev to tell systemd to run the mdmon@mdXXX.service units when a member array appears. If we boot off a member array (with dracut at least), the mdmon started in the initramfs will lose track of /sys etc, so we need to restart it. systemd will try to forget about it too (but not actually kill it because we said not to do this). Having udev tell it to start it will allow a new mdmon to run which can see /sys, and systemd will know about it. 3/ Always use --offroot and --takeover when starting mdmon with systemd --offroot is needed else shutdown will hang. --takeover is needed incase an mdmon was started earlier (e.g. in initramfs). Neither hurt if they aren't actually needed. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon@.service: Change type of process start-up to 'forking'.Pawel Baldysiak2014-03-111-1/+3
| | | | | | | | | | | | | | | | | | | Mdadm does not wait enough time when mdmon is started by systemd. It causes various problems with behaviour of a RAID volume with external metadata. For example: mdmon does not update a value of checkpoint during migration and second RAID5 volume is read-only after reboot done during container reshape (both problems occur with IMSM matadata). If a type of process start-up is changed to 'forking', systemctl will wait until mdmon (parent) process exits after calling fork. This way mdmon will always be fully initialized after start_mdmon and these problems will not occur. In this case it is recommended to add a path to PIDFile, so that systemd does not have to guess a PID of the mdmon process. Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com> Reviewed-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com> Reviewed-by: Lukasz Dorau <lukasz.dorau@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon@.service: remove over-ride of Standard IO.NeilBrown2014-01-221-3/+0
| | | | | | | | Redirecting output to /dev/null is unnecessary and hides any error messages there might be. So leave as defaults which are none, journal, inherit. Signed-off-by: NeilBrown <neilb@suse.de>
* systemd/mdmon: set IMSM_NO_PLATFORM=1NeilBrown2014-01-201-0/+3
| | | | | | | | | | As mdmon doesn't inherit environment from mdadm when it is started by system, it cannot inherit IMSM_NO_PLATFORM. But if an imsm array as assembled then mdmon really should handle it whether there is a platform present or not. So always set this var. Signed-off-by: NeilBrown <neilb@suse.de>
* mdamd-last-resort: add a Conflicts line to stop the timer.NeilBrown2013-12-121-0/+1
| | | | | | | | | | When the md device actually appears we want to stop the timer and not bother with the mdadm-last-resort@.server. In particular, running that causes confusing messages and is in general best avoided. Fortuantely this can simply be achieved with a Conflicts= line Signed-off-by: NeilBrown <neilb@suse.de>
* Add mdmonitor.service systemd unit file.NeilBrown2013-12-112-0/+61
| | | | | | | | | | | | | | | | | | | | This systemd unit file runs mdadm in --monitor mode. It is started by a SYSTEMD_WANTS signal from udev whenever an md array is started that would benefit from mdadm --monitor. Commandline arguments can be provided by a script /usr/lib/systemd/scripts/mdadm_env.sh which should write an MDADM_MONITOR_ARGS=.... line to /run/sysconfig/mdadm A script to extra args from SUSE's /etc/sysconfig/mdadm file is provided. If no mdadm_env.sh is provided, then args are "--scan" which requires "mail" or "program" to be set in /etc/mdadm.conf. I believe this is suitable for Fedora. Signed-off-by: NeilBrown <neilb@suse.de>
* Systemd integration for starting newly-degraded arrays.NeilBrown2013-12-022-0/+13
| | | | | | | | | | | | | | | | Normally "mdadm -I" will not start an array if it has reason to expect further devices. This means that if a device is removed while the host is shut down, "mdadm -I" will never start the device. If the array is know to the host, it make sense to start the array anyway after a reasonable timeout. This patch adds systemd/udev infrastructure so that 30 seconds after a known array first becomes able to be assembled as a degraded array, the array will be assembled even if more devices are still expected. Signed-off-by: NeilBrown <neilb@suse.de>
* mdmon: add --foreground optionNeilBrown2013-02-051-1/+1
| | | | | | | | While not strictly necessary for systemd, it is cleaner to avoid forking when running from a management daemon. So add a --foreground option to mdmon. Signed-off-by: NeilBrown <neilb@suse.de>
* Add support for launching mdmon via systemctl instead of fork/execJes Sorensen2013-02-051-0/+18
If launching mdmon via systemctl fails, we fall back to the old method of fork/exec. This allows for having mdmon launched via systemctl which avoids problems with it getting killed by systemd due to it ending up in the parent's cgroup (udev). Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>