Handling hibernation swaps

From SprezzOSWiki

From debian-derivatives:

> Raphael Hertzog wrote:
>> Paul Wise wrote:
>> If there is a way for the kernel/initrd to check if a particular swap
>> partition has valid hibernation data on it, then not formatting the
>> swap might be a good idea.
> Obviously the kernel does... the boot command-line is the same when you
> boot after hibernation than for a normal boot IIRC.

Sorry to respond to such an old mail, but this exact issue came up for us, and
I thought I'd contribute:

(1) Paul omitted one case: that where the user has a valid hibernation image
    in the swap partition, but doesn't care to keep it. In the extreme case,
    this could be a randomly generated valid image. You'd want to use the
    common swap partition here, so detecting a valid swapfile is only reason
    to warn the user, not necessarily refuse to format.

(2) In the SSD era, a proper mkswap(2) can be absolutely necessary for
    peak performance.

(3) The kernel command line is indeed the same in each case, as Raphael claims,
    *when hibernation is handled via initramfs*. In such cases, you'll find
    a RESUME parameter somewhere. Without an initramfs, it is necessary to
    pass the resume parameter on the kernel command line. Upshot: scanning for
    valid images among all possible locations is not what is typically done.

(4) It is possible to determine whether a swap device will be considered a
    hibernation image by some kernel by running that kernel's swap_type_of()
    code, as called by swsusp_check() and ultimately software_resume().

(4a) There is no assurance that the other kernels involved use the same image
     layout as you do, unless you've somehow ensure this.

(5) Use of swap *files* rather than swap *partitions* is probably a best
    practice when mixing multiple installs and hibernation.

(6) I'm not convinced that protecting a naive approach mixing swap partitions,
    hibernation, and multiple operating systems is any more important than
    "protecting" against trashing the hibernation image when an original,
    single operating system emerges from hibernation.

(6a) i.e., when a machine with a single operating system goes into hibernation,
     the user is responsible for ensuring that this hibernation partition is
     picked up and used on a subsequent boot. otherwise, the new boot will
     swap all over it.

(6b) i.e., use of hibernation as a checkpointing mechanism is beyond the basic
     goals of hibernation, and requires further user involvement.

(6c) I assert that the case Paul brought up reduces to use of hibernation
     as checkpointing. If we agree this is true, then (6) seems to hold in toto.

(6d) It is worth considering encrypted devices, both using known standards and
     unknown, in this context.