doc: Introduce using swap space for hibernation, with examples.
* doc/guix.texi (Swap Space): Add a concise introduction to hibernation and specifying a swap space to the kernel to make resume work. Mention space requirements and the need of an offset for swap files. Include a trivial example on how to set up a mapped swap volume for hibernation and another one for a swap file, including how to compute the file offset. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
c10164aee7
commit
c9b383fb38
1 changed files with 65 additions and 0 deletions
|
@ -109,6 +109,7 @@ Copyright @copyright{} 2022 Reily Siegel@*
|
||||||
Copyright @copyright{} 2022 Simon Streit@*
|
Copyright @copyright{} 2022 Simon Streit@*
|
||||||
Copyright @copyright{} 2022 (@*
|
Copyright @copyright{} 2022 (@*
|
||||||
Copyright @copyright{} 2022 John Kehayias@*
|
Copyright @copyright{} 2022 John Kehayias@*
|
||||||
|
Copyright @copyright{} 2022 Ivan Vilata-i-Balaguer@*
|
||||||
|
|
||||||
Permission is granted to copy, distribute and/or modify this document
|
Permission is granted to copy, distribute and/or modify this document
|
||||||
under the terms of the GNU Free Documentation License, Version 1.3 or
|
under the terms of the GNU Free Documentation License, Version 1.3 or
|
||||||
|
@ -17108,6 +17109,19 @@ should consider ease of use when deciding between them. Partitions are
|
||||||
allocated at disk formatting time (logical volumes notwithstanding),
|
allocated at disk formatting time (logical volumes notwithstanding),
|
||||||
whereas files can be allocated and deallocated at any time.
|
whereas files can be allocated and deallocated at any time.
|
||||||
|
|
||||||
|
@cindex hibernation
|
||||||
|
@cindex suspend to disk
|
||||||
|
Swap space is also required to put the system into @dfn{hibernation}
|
||||||
|
(also called @dfn{suspend to disk}), whereby memory is dumped to swap
|
||||||
|
before shutdown so it can be restored when the machine is eventually
|
||||||
|
restarted. Hibernation uses at most half the size of the RAM in the
|
||||||
|
configured swap space. The Linux kernel needs to know about the swap
|
||||||
|
space to be used to resume from hibernation on boot (@i{via} a kernel
|
||||||
|
argument). When using a swap file, its offset in the device holding it
|
||||||
|
also needs to be given to the kernel; that value has to be updated if
|
||||||
|
the file is initialized again as swap---e.g., because its size was
|
||||||
|
changed.
|
||||||
|
|
||||||
Note that swap space is not zeroed on shutdown, so sensitive data (such
|
Note that swap space is not zeroed on shutdown, so sensitive data (such
|
||||||
as passwords) may linger on it if it was paged out. As such, you should
|
as passwords) may linger on it if it was paged out. As such, you should
|
||||||
consider having your swap reside on an encrypted device (@pxref{Mapped
|
consider having your swap reside on an encrypted device (@pxref{Mapped
|
||||||
|
@ -17193,6 +17207,57 @@ Use the file @file{/btrfs/swapfile} as swap space, which depends on the
|
||||||
file system mounted at @file{/btrfs}. Note how we use Guile's filter to
|
file system mounted at @file{/btrfs}. Note how we use Guile's filter to
|
||||||
select the file system in an elegant fashion!
|
select the file system in an elegant fashion!
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(swap-devices
|
||||||
|
(list
|
||||||
|
(swap-space
|
||||||
|
(target "/dev/mapper/my-swap")
|
||||||
|
(dependencies mapped-devices))))
|
||||||
|
|
||||||
|
(kernel-arguments
|
||||||
|
(cons* "resume=/dev/mapper/my-swap"
|
||||||
|
%default-kernel-arguments))
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
The above snippet of an @code{operating-system} declaration enables
|
||||||
|
the mapped device @file{/dev/mapper/my-swap} (which may be part of an
|
||||||
|
encrypted device) as swap space, and tells the kernel to use it for
|
||||||
|
hibernation via the @code{resume} kernel argument
|
||||||
|
(@pxref{operating-system Reference}, @code{kernel-arguments}).
|
||||||
|
|
||||||
|
@lisp
|
||||||
|
(swap-devices
|
||||||
|
(list
|
||||||
|
(swap-space
|
||||||
|
(target "/swapfile")
|
||||||
|
(dependencies (filter (file-system-mount-point-predicate "/")
|
||||||
|
file-systems)))))
|
||||||
|
|
||||||
|
(kernel-arguments
|
||||||
|
(cons* "resume=/swapfile"
|
||||||
|
"resume_offset=92514304"
|
||||||
|
%default-kernel-arguments))
|
||||||
|
@end lisp
|
||||||
|
|
||||||
|
This other snippet of @code{operating-system} enables the swap file
|
||||||
|
@file{/swapfile} for hibernation by telling the kernel about the file
|
||||||
|
(@code{resume} argument) and its offset on disk (@code{resume_offset}
|
||||||
|
argument). The latter value can be found in the output of the command
|
||||||
|
@command{filefrag -e} as the first number right under the
|
||||||
|
@code{physical_offset} column header (the second command extracts its
|
||||||
|
value directly):
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
$ sudo filefrag -e /swapfile
|
||||||
|
Filesystem type is: ef53
|
||||||
|
File size of /swapfile is 2463842304 (601524 blocks of 4096 bytes)
|
||||||
|
ext: logical_offset: physical_offset: length: expected: flags:
|
||||||
|
0: 0.. 2047: 92514304.. 92516351: 2048:
|
||||||
|
@dots{}
|
||||||
|
$ sudo filefrag -e /swapfile | grep '^ *0:' | cut -d: -f3 | cut -d. -f1
|
||||||
|
92514304
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
@node User Accounts
|
@node User Accounts
|
||||||
@section User Accounts
|
@section User Accounts
|
||||||
|
|
||||||
|
|
Reference in a new issue