[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#565225: Resume device should be detected when creating initramfs, or not at all



* Sebastian Leske [Mon Nov 29, 2010 at 01:38:21 +0100]:

> I got bitten by this bug as well, similarly to Michael Conner above:
> I installed uswsusp to be able to hibernate/resume.
> s2disk worked flawlessly, but on booting the system simply did not
> bother to resume, booting normally instead.

> My analysis:

> After digging through the initramfs scripts, I discovered that this is
> because on booting resume is only triggered if $resume is set.

> As far as I understand, the initramfs takes $resume from the kernel
> command line (if set), and from /etc/initramfs-tools/conf.d/resume
> otherwise.

> In my case /etc/initramfs-tools/conf.d/resume did not exist.
> It should have been created by the preinst of initramfs-tools; however
> the preinst ( /var/lib/dpkg/info/initramfs-tools.preinst ) uses vol_id:
[...]
> This will always fail, because vol_id is no longer part of Debian (it was
> removed from udev for version 146-1, see /usr/share/doc/udev/changelog.Debian.gz ).

This is no longer true for current versions of initramfs-tools,
JFYI.

> In summary:

> * Resume from hibernation will only work if /etc/initramfs-tools/conf.d/resume
>   sets RESUME
> * However, there is no (working) code to write
>   /etc/initramfs-tools/conf.d/resume, and no documentation explaining that it
>   needs to be set manually to make resume work

> Thus, resume will probably fail to work in most cases.

> I believe there are actually several bugs here:

> 1) The code in the preinst of initramfs-tools to detect the swap partition does
>    not work, because it uses vol_id.

Fixed nowadays.

> 2) Even if 1) were fixed, there may be cases where the swap partition is
>    incorrectly detected at installation time, or later changes. So fixing
>    preinst is not enough.
>    I agree with bug submitter jidanni that the swap partition should be detected
>    when building the initramfs, not during preinst.
> 3) Additionally, I don't quite understand why uswsusp refuses to resume if
>    $resume is not set (in /usr/share/initramfs-tools/scripts/local-premount/uswsusp ). 
>    The script does not actually use the value of $resume, it just aborts if it is not set :-(.
>    I guess this could be considered a bug in uswsusp; I can report it against
>    uswsusp if discussion of this bug indicates that this makes sense.


> To fix this, I would propose the following:

> * Drop the code in initramfs-tools.preinst which tries to write RESUME to
>   /etc/initramfs-tools/conf.d/resume , which does not work anyway.

Sounds reasonable too me.
maximilian, what do you think of it?

> * Document (e.g. in /usr/share/doc/initramfs-tools/README.Debian ) that
>   /etc/initramfs-tools/conf.d/resume can be used to set the resume device.
> * When building the initramfs, use the value from /etc/initramfs-tools/conf.d/resume
>   if it exists; otherwise try to find it yourself:
>   - if /etc/uswsusp.conf exists, it probably makes sense to read it ("resume device =")
>   - otherwise grab the current swap device (the "config" script from uswsusp
>     already has code for that)
>   This is still problematic if there is >1 swap device. Even better probably
>   would be to use debconf to prompt for the resume device, if this is practical...

> I am willing to help implement / test this, but first I'll wait for some
> feedback if I'm even on the right track :-).

Sorry that no one seemed to care about it for so long.

What could be a proper way to resolve that nowadays, taking uswsusp,
hibernate,... into account? dracut has some code in
modules.d/95resume/. IMHO we should find a way which avoids
duplicated code.

Related bug reports:

  http://bugs.debian.org/574653
  https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/50437

regards,
-mika-

Attachment: signature.asc
Description: Digital signature


Reply to: