From debbugs-submit-bounces@debbugs.gnu.org Wed Dec 21 07:17:13 2022 Received: (at 59746) by debbugs.gnu.org; 21 Dec 2022 12:17:13 +0000 Received: from localhost ([127.0.0.1]:51508 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p7y24-0006dG-Rx for submit@debbugs.gnu.org; Wed, 21 Dec 2022 07:17:13 -0500 Received: from lev.selidor.net ([66.246.138.156]:35797) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p7y22-0006d9-V3 for 59746@debbugs.gnu.org; Wed, 21 Dec 2022 07:17:11 -0500 Received: from sax (unknown [91.207.57.115]) by lev.selidor.net (Postfix) with ESMTPSA id CB28FCADD; Wed, 21 Dec 2022 12:17:09 +0000 (UTC) Date: Wed, 21 Dec 2022 13:16:59 +0100 From: Ivan Vilata i Balaguer To: 59746@debbugs.gnu.org Subject: Re: [DOCUMENTATION] [PATCH] doc: Introduce using Swap Space for hibernation, with an example. Message-ID: References: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="2EJBk/5fRdGSzO9R" Content-Disposition: inline In-Reply-To: Autocrypt: addr=ivan@selidor.net; prefer-encrypt=mutual; keydata= mQINBE2V9nABEADNCic9+LrC7YRRrZn/zEZPvWiFrORMf7lkc2vtAUTo2RepFT3ekGLKF5nZYTJ 4yKGV6NbRCDUL9adbMGRhv9/TEAaoNRtyfhtDAj1RTk5tpEsIiP78/guYBH1BifXJKNIfybvT56 7VMalh4h6aiapW5/tbMkzMS4GeSR/AcEnhPnaE4WrYRHd25j+NrlrbakHH/kS0rfR1f2lA/eT9A hRYwQgHZarXcKC2i3PWswuXDNCLrSPVo56u7r6l+ONlKOieA6mG8gFkhOFOT/uDknIQoPx0dGKm BssliDl+r3gt+L+x9th2phzXNIzr40Dz+jr+3l8UJmmyzlNdPuhqdZElc7aWwQpdIMpwcU0rL1O cN8KBy3igKcEdDHkCbGAy8FlOUmWqkmnv0PPnuAfHrBKtuPWhJnBEykC5tGgtbcGZ+h0Ik+4qxu MDs8/EQOfoFc1HY4xRCImaohc0Zs9qX/pDnpmhhLHtI/eu4UUGnEaPwQPDvisfYXODI9Q+FdTuG LRiiFKVSYNy+3d58mzChm/yg5PnoUbmh+hKwiGSaS3kUL4xAEkYTLypSpL+/Z2YuySa3zl0cfjb jBlAFWGSdoPZkRHtmWDT0ZRHr04FUQQuBqeLk21O76UKwtZu725eZH7Mv+ICMX52lpa5nVSMR/2 4/UZSyhgYyf2j6cF7lm0bSQARAQABtClJdmFuIFZpbGF0YSBpIEJhbGFndWVyIDxpdmFuQHNlbG lkb3IubmV0PokCOgQTAQgAJAIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAUCTZX6/QIZAQAKC RA97MEF9d0jgng1EACrwniy2G4QV0RBy8ofvMqaBp80x0U2tL9J11l/Z0/xE/qu12ivVaK7Sl7x PJud41WNnhlbfvkAlLuS3fug30MHkW3iiOpaOKuC1G1NZ8lEr2AXbVx4cs13z+EHLQG9gII+CZN V+YwAmZrWH1z2a1v4aZvNvkHchf9cB9kq1bdtuRovsR2YIXMIqoMslbJohu5v9mXQSjxsaKgdTP gvIcA6eqPjOsFfqHGfB8+uo2VONW1db6b0gFq2I1ANu0sxeqW5vfH6L/J59EdcLK4PDFoLaVEGj 8wlXO1MzujDlGd3yZn7S+zSJ1EVcNYKKXVOZ9O9a8a1KuMrSeNxlfLRrgupcQJO6nHbN2roTJXF 0y7ZJZnxZJf+O3N6dy62W/rpzlT3DBJVrz7aGnaWIpa57uSIzQXqUyz4AZt2JenzxAT/RNMGFA/ bIx/l7P8hIUKuVHtjAJxyHDi3j4JiWa/n9tnhKR4zQ2doYiQtrZY/P+egOJPiZZ9UI+IGJdiL5D YwcJ907OtPxE6Rl6waFTUkc8iw6IWWWQcAYnjXDgZK5hSzY9lYv8rhRx8kQ/NrAJcfpFtkCBcXs FG6qC42r6FFOWQJgeOBO5/NFZOACtnZLjHmnMfkp6cCruVtDdjjaLRbqPPDer06+Fz+N5sByjh/ uBYIFDLxflBJSUlMOy6c2dX0VrQpSXZhbiBWaWxhdGEgaSBCYWxhZ3VlciA8aXZpbGF0YUBmc2Z lLm9yZz6JAjcEEwEIACEFAk2V+pMCGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQPezBBf XdI4KC5BAAioBozIl8V+Te5MzkKsOOzQF/bXp+3ItbCa517UEFc1fWBqgEPQXatxaMH0cq7GfHj 8EmrqoWU8VvwcNR+QRznJgDzEK9ZYXBFIRfLTJOUkSI47tYCiXwrOXpMTtzWpVVr158Fm5TTX6b yqHujclQHbb8aL4Xal4WwyXsriJJmyoFXwI4At2oOUTLJpGHD+wy9FwcM8iKO3cOP8kUjWf6HAa /Lf9G989fMP6e9IMVuiViStxa7BrRinUH4SYvIX9xjapRrvzC9az2R+xiOaIpDr5gLLuN0HOUpI On/k5B5RRhaWn6OuZtC+sn8z8fIwNYgpGmPmotfqhklwru/u28NCsbhA0XpBC9L/vEmc+fwfDae uh+7pxqBjoRyhTPYcqlR8NjuGcmpSqMie8kFwA+nc/WtpNdKSwI8wxnW1um36eCO9namQhZT+yK J1TcHe1XCWbPnaYjqtM7NTzlNW6dM14a9tcN/C5+utQNLJaXrKVHiT1cxSUYqeA+KT0PKDj/GjL rHS3YsYpU4aW/OuHu+lD0vOcJywLN++GKetx/OUtUoVtHLMQVcdLhw47IjsYLstCIDuB1q8j6mv B3hSmwCGLQEIZ3UlA+Unf1rqBGEvwJJH2kokBwMvlKq90dHHwxm9wQ/wwL+SzOFacuh9flys7rc 5nPqbk9Rus9R7022N60L0l2YW4gVmlsYXRhIGkgQmFsYWd1ZXIgPGl2YW5AbG92ZXNnYXpwYWNo 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 wbFFnErLaEXEVLlb2wVFcljDGFg X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 59746 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --2EJBk/5fRdGSzO9R Content-Type: multipart/mixed; boundary="cYkn5dYHzigd0QVF" Content-Disposition: inline --cYkn5dYHzigd0QVF Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable This patch replaces the previous one and enhances it with several minor fix= es and the missing information related to computing the swap file offset, as discussed [in the guix-devel thread][1]. [1]: https://lists.gnu.org/archive/html/guix-devel/2022-12/msg00028.html Thanks and cheers! --=20 Ivan Vilata i Balaguer -- https://elvil.net/ --cYkn5dYHzigd0QVF Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="0001-doc-Introduce-using-swap-space-for-hibernation-with-.patch" Content-Transfer-Encoding: quoted-printable =46rom e95d79ef8c466e495c730f722b7aefc4d2d5969f Mon Sep 17 00:00:00 2001 =46rom: Ivan Vilata-i-Balaguer Date: Wed, 21 Dec 2022 13:08:48 +0100 Subject: [PATCH] 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 o= ne for a swap file, including how to compute the file offset. --- doc/guix.texi | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/doc/guix.texi b/doc/guix.texi index aacf748838..f04a541583 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -109,6 +109,7 @@ Copyright @copyright{} 2022 Simon Streit@* Copyright @copyright{} 2022 (@* Copyright @copyright{} 2022 John Kehayias@* +Copyright @copyright{} 2022 Ivan Vilata-i-Balaguer@* =20 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -17072,6 +17073,15 @@ Swap Space allocated at disk formatting time (logical volumes notwithstanding), whereas files can be allocated and deallocated at any time. =20 +A swap space is also required in order to hibernate a system using the +Linux kernel. Hibernation (also called suspend to disk) uses at most +half the size of the RAM in the configured swap space. The kernel needs +to know about the swap space to be used to resume from hibernation on +boot (via a kernel argument). When using a swap file, its offset in the +device holding it also needs to be given to the kernel, but 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 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 @@ -17157,6 +17167,57 @@ Swap Space file system mounted at @file{/btrfs}. Note how we use Guile's filter to select the file system in an elegant fashion! =20 +@lisp +(swap-devices + (list + (swap-space + (target "/dev/mapper/my-swap") + (dependencies mapped-devices)))) + +(kernel-arguments + (cons* "resume=3D/dev/mapper/my-swap" + %default-kernel-arguments)) +@end lisp + +The previous 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=3D/swapfile" + "resume_offset=3D92514304" + %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: flag= s: + 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 @section User Accounts =20 --=20 2.38.1 --cYkn5dYHzigd0QVF-- --2EJBk/5fRdGSzO9R Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEHpvwBPZcchIQr6TuPezBBfXdI4IFAmOi+SoACgkQPezBBfXd I4J5dw/+KQ/I7/6FkjAhLf6Lfvc8sw7RSHdf2m5CtaQFN+P1rDkaVww+5XZhyAxE dVdNlUVe6I5BciPdCR34vC3j+nGsrM8HvZzAwn82et/pVGVFM7UMoiIQVlmPc1Ps 0vHm9kCaNg9Q51n5AQJafYROQzZOYLKlA86z/kbJEwXSYQDD2wunnLSDXMYsOBOj VWX4mucTS+dYxIdkOMVaYSDYlyMicNjv3X92Iwx7jFICOrQFXxH4ruKUSgJDgkbE EbGzsqAVGBSh594zomwd2HqQmLUqGSualV386uLekkGhzhX5Ve7WTImUVz37rguf Y+htLkzvK4c4yB0PDqezwX5wfrXAPqXNmz6gloBQxXK2ck/1tX/kA23MlmHevO7M CIbyhsyMb8ckcZ/I+3qBOldUxxdLF5kqLm72NeJEJWC7VrA8f7v072pKfBDsHnU1 3v0prP2Pc62L1+T5fAwGEQobQlfI8EGUR5WArYaB4+jmUfggG5KJH/bNYOTyu5bX dfUpHZ/nZRG1kZCZy4NpKhjUKhak+PDFTU2klNEZElZODMXwJS+BkM/K4MFARgtP pnfsdlD3546YMJ3WaQP4xVlydzfP3fbgoG418hC64TKazIhkDbu9o1XwFM/DCDJa YvjYDJrv2pYmX5ieinvItXC7FM3fju2gdIUmJBibiu5+W9bfilQ= =og8r -----END PGP SIGNATURE----- --2EJBk/5fRdGSzO9R--