[systemd-devel] Implementing resume from hibernation as a systemd unit file

Ivan Shapovalov intelfx100 at gmail.com
Fri Aug 15 15:35:06 PDT 2014


On Friday 15 August 2014 at 12:19:50, Lennart Poettering wrote:	
> [...]
> > > > 
> > > > I'd like to make this work both with initramfs and without one (provided that
> > > > the rootfs has been mounted read-only by using 'ro' kernel cmdline parameter).
> > > > 
> > > > In this case, what are the needed orderings?
> > > 
> > > Actually systemd-remount-fs.service uses After=local-fs-pre.target
> > > anyway, so ordering before l-f-p.t should be nough.
> > 
> > Hm. In git (v215-651-g41488fe), it is
> > 
> > Before=local-fs-pre.target local-fs.target shutdown.target
> > Wants=local-fs-pre.target
> 
> Ah, right. This is actually correct here. We want to make sure that the
> root fs is remounted before we mount the other units, since this might
> required creating additional directories to mount things on...
> 
> There are two more complications: 
> 
> a) if you want to make use of local-fs-pre.target you actually have to
>    pull it in, it's a "passive" unit. See systemd.special(5).
> 
> b) You want to run your stuff before fsck is run on the devices, so that
>    you don't end up interrupting an fsck that is half in progress.
> 
> To put this together, in your unit file you need:
> 
>     Before=local-fs-pre.target systemd-remount-fs.service systemd-fsck-root.service
>     Wants=local-fs-pre.target
> 
> That should be enough. (You don't need to individually order the
> systemd-fsck at .service instances for the other devices after your
> service, since they are already ordered after systemd-fsck-root.service,
> and you order yourself before that, so all is good).
> 
> Lennart

One more question. What about setups with no initrd and read-write rootfs?
In such cases, the resume unit must silently skip itself.

ConditionPathIsReadWrite=!/ doesn't seem to be useful here: with initramfs
this check will yield a false-negative.

This can be solved by introducing two resume units (say,
systemd-resume at .service and initrd-resume at .service), first with

    Before=local-fs-pre.target systemd-remount-fs.service systemd-fsck-root.service
    Wants=local-fs-pre.target
    ConditionPathIsReadWrite=!/

and the second one with

    ConditionPathExists=/etc/initrd-release
    # something else ?

BTW... are you sure that the second variant (in initramfs) does not require something
to order before sysroot.mount and all fsck units?..

-- 
Ivan Shapovalov / intelfx /
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20140815/2e0b3755/attachment.sig>


More information about the systemd-devel mailing list