From: raid5atemyhomework <raid5atemyhomework@protonmail.com>
To: "guix-devel@gnu.org" <guix-devel@gnu.org>
Subject: Re: ZFS on Guix
Date: Mon, 08 Feb 2021 06:13:39 +0000 [thread overview]
Message-ID: <Y3nRe9Y0pv-ZNUxHEhGfRbdez3ARD2e0LHe2wEL1OFg-E8euILahHT3ABgmcCeGI4LpGJ9eCpbCVHCmRQndCU0a_aLe_J3_tRmbnb1tNoj8=@protonmail.com> (raw)
In-Reply-To: <BwsjjkFjW7wwYSYYp-YUhl5t1-1OtA8t3wbDftsQTZBXHNxcR2tBprzJmBYvNrMKnCeiu0d5bPz7V8IaKIdYu9NP7kDsd16z6gMPpR89-3c=@protonmail.com>
Hi guix-developers and users,
Here are some notes I made about how to get `/` on ZFS, maybe someone else can think about it.
-------
Most importantly, it seems for this style we need to consider first `/boot`
***not*** on ZFS, and have `/` on ZFS. I presume grub has some way to read
ZFS pools in order to get at the `/boot` if `/boot` is on ZFS, since
`/`-on-ZFS for Ubuntu is able to put even `/boot` on ZFS, however note that
even there the `/boot` is on a different pool from the `/`.
When this works (*cough*) it should be possible to create a ZFS pool (with
`mountpoint=legacy`) from a ZFS-enabled boot of Guix, then create a
`configuration.scm` that we would then `sudo guix system init` onto a
temporary mountpoint. I would strongly suggest putting `/boot` elsewhere
though.
Here are a bunch of things we need for `/` on ZFS:
* ZFS module installing into `initrd`.
* ZFS module loading while in `initrd` before the pivot to the "real" `/`.
* ZFS `import` of the pool containing `/` mount.
## `initrd` module installation
We need a facility to add modules to the `initrd` that are not
part of the kernel. Currently `raw-initrd`/`base-initrd` will
only get `.ko` files from the given `linux` package. We need
to modify the `initrd` interface to add say a `#:module-packages`
list of packages whose `.ko` files we will also add to the `initrd`.
This translates to modifying `flat-linux-module-directory` in
`gnu/system/linux-initrd.scm` to additionally accept a list of packages
all of whose `.ko` and/or `.ko.gz` files will be added to the module
directory. Then somewhere over in `raw-initrd` we would:
(define kodir
(flat-linux-module-directory linux linux-modules module-packages))
We also need an extensible service type that will eventually lead to
adding new entries in the `#:module-packages`.
We need a "root" `initrd` extensible service type that will construct the `initrd`
via the `operating-system-initrd` field. This service type will accept
additional arguments to pass to the `initrd` function. Then the
`initrd-kernel-loadable-module-service-type` would accept lists of package
specifications, then provide a `#:module-packages` argument to the root
`initrd` service type.
Rough sketch:
(define initrd-arguments-service-type (service-type #;...))
(define initrd-kernel-loadable-module-service-type
(service-type
(name 'initrd-kernel-loadable-module-service-type)
(extensions (list (service-extension
initrd-arguments-service-type
(lambda (module-packages)
(if (null? module-packages)
'()
(list #:module-packages module-packages))))))
(compose concatenate)
(extend append)
(default-value '())))
## `initrd` module explicit loading
Normally modules are loaded "as needed" but ZFS needs to be explicitly loaded.
The `base-initrd` already accepts a list of `linux-modules` to load, we just
need some way to hook into adding `#:linux-modules`. This probably means
modifying how `operating-system-initrd-file` in `(gnu system)` works (which
would probably be needed by the `initrd-arguments-service-type` anyway).
We could try hooking into the currently-deprecated `extra-modules` instead,
here's a sketch:
(define initrd-kernel-module-loader-service-type
(service-type
(name 'initrd-kernel-module-loader-service-type)
(extensions (list (service-extension
initrd-arguments-service-type
(lambda (modules)
(if (null? modules)
'()
(list #:extra-modules modules))))))
(compose concatenate)
(extend append)
(default-value '())))
## `initrd` additional pre-mount actions
Before a `/` on ZFS can be mounted, ZFS has to be told to scan for the
ZFS pool containing the `/`.
We could add yet another argument to `raw-initrd`/`base-initrd`, `#:premount-actions`,
a list of gexpressions.
Then the `#:pre-mount` argument to `boot-system` would become something like:
#:pre-mount (lambda ()
(and #$@device-mapping-commands
#$@premount-actions))
As usual a service type can be created which extends `initrd-arguments-service-type`.
For root-on-ZFS specifically we would need to know the root pool and execute something
like this:
#~(begin
(invoke/quiet #$(file-append zfs/static "/sbin/zpool") "-a" "-N" #$root-pool))
Then, "normal" root specification would be done, with the root pool name given as the
device name of the `/` mountpoint, and with the ZFS mountpoint set to `legacy`.
next prev parent reply other threads:[~2021-02-08 8:08 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-02 6:16 ZFS on Guix raid5atemyhomework
2021-01-02 6:40 ` raid5atemyhomework
2021-01-03 15:50 ` Danny Milosavljevic
[not found] ` <Kyzl4xnRrDtWbTkAmBf1i8mtSZvu-AYatdazY1NsABFAzqqi7HQl-t0d2LWAInr8n7KxGyJWfIfTWqrefrxdgWelKbr2SWc9ATV5P8zrVtw=3D@protonmail.com>
[not found] ` <DmzbKm-kVn1tCfYc4eAXeEEbj3RN28qvXJaLL6dHtBBeNdXE-e-vN-a4Y-De38H8jI5lt19mauUTz9k0JArMyOT2ciYoxKY8mXFw3xeHGqo=3D@protonmail.com>
[not found] ` <guGWV=5FuA7tRqi0SzCiial7b5W7uKlmcMRhQXIlhtzyf1Fgq91eakr8d5EQrZ2fJPJK1OqKMCJfMgE2H4SjRSph-31ms=5F2g-mFiddv9ppiaQ=3D@protonmail.com>
2021-01-04 0:50 ` raid5atemyhomework
2021-01-04 1:15 ` raid5atemyhomework
2021-01-05 11:02 ` raid5atemyhomework
2021-01-05 14:56 ` raid5atemyhomework
2021-01-06 0:59 ` Carlo Zancanaro
2021-01-06 3:50 ` raid5atemyhomework
2021-01-06 3:58 ` Carlo Zancanaro
[not found] ` <t=5Ft9LHglTTJw2Bhtd2xX4JCJeZBi5Drqg0t04vJsfRLfoENqpftZcuHO8LYi2AO05P71lbbCgQC5etCDiPsdcssJmw1pHGyCY3 gUT-9w9?= =?us-ascii?Q?=5Fo=3D@protonmail.com>
[not found] ` <Zd8uMcxWfNY1RxDn4gwrCZjHKAUxSQgcuBsNDAqa0tMqj=5FufQWE-URr7L49OBWMGDfQB8v=5F8eRdnhlsZTxU0Xq=5FF6tu-92jvvc1lSh-2tdA=3D@protonmail.com>
[not found] ` <vzCMYS=5FrSzkd3ZDA5TktzybU2LmfZsjWLmrd0ABQ1bIKyulAreAghoDBo0yjb-bEbH5ZmKhOO3D9WPjuDoMMUs0O eUWA1WakV?= =?us-ascii?Q?WFo6H61IHY=3D@protonmail.com>
[not found] ` <07kwAFNpjhGFe7ArkjjAtRhr564wvMPGhHFyjGb=5FXdmmPNddKTmT9Swky1NbbUxHBC4xw3p-m=5F3JyW16Ql9J7PLyk6UdhCsA2cdkHehdti8=3D@protonmail.com>
[not found] ` <VnQXBr-z8pdZxWrb6VtIu5pv0UeG1II5uUu4Q7BU3NsJMQbxhiQyWJE4fhEIWJO3VWrjetf1SMIu4=5Fgi5r2AlYq8dADCXCDwW30RYaJ6seA=3D@protonmail.com>
[not found] ` <BwsjjkFjW7wwYSYYp-YUhl5t1-1OtA8t3wbDftsQTZBXHNxcR2tBprzJmBYvNrMKnCeiu0d5bPz7V8IaKIdYu9NP7kDsd16z6gMPpR89-3c=3D@protonmail.c om>
[not found] ` <VnQXBr-z8pdZxWrb6VtIu5pv0UeG1II5uUu4Q7BU3NsJMQbxhiQyWJE4fhEIWJO3VWrjetf1SMIu4=5Fgi5r2AlY q8dADCXCD?= =?us-ascii?Q?wW30RYaJ6seA=3D@protonmail.com>
[not found] ` <BwsjjkFjW7wwYSYYp-YUhl5t1-1OtA8t3wbDftsQTZBXHNxcR2tBprzJmBYvNrMKnCeiu0d5bPz7V8IaKIdYu9NP7kDsd16z6gMPpR89-3c=3D@protonmail.com>
2021-01-06 4:41 ` raid5atemyhomework
2021-01-06 5:20 ` raid5atemyhomework
2021-01-06 15:58 ` raid5atemyhomework
2021-01-09 18:14 ` raid5atemyhomework
2021-01-10 5:17 ` raid5atemyhomework
2021-02-08 2:13 ` raid5atemyhomework
2021-02-08 3:51 ` Joshua Branson
2021-02-08 6:04 ` raid5atemyhomework
2021-02-08 6:13 ` raid5atemyhomework [this message]
2021-02-08 9:17 ` Maxime Devos
2021-02-08 9:32 ` raid5atemyhomework
2021-02-08 9:35 ` Maxime Devos
2021-02-10 8:29 ` Efraim Flashner
2021-02-08 2:16 ` Danny Milosavljevic
2021-02-10 7:37 ` raid5atemyhomework
[not found] <=5F1CLe9QSGsoMlu5WxBMXm4CbFLM=5FM9iRG1XQF9GDsK0GP208jpngdymfix4tAfoLP94mhMTt-Tx6OP2xN=5Fn78Jhx5KQzkiqPpIci=5F44C9OI=3D@protonmail.com>
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='Y3nRe9Y0pv-ZNUxHEhGfRbdez3ARD2e0LHe2wEL1OFg-E8euILahHT3ABgmcCeGI4LpGJ9eCpbCVHCmRQndCU0a_aLe_J3_tRmbnb1tNoj8=@protonmail.com' \
--to=raid5atemyhomework@protonmail.com \
--cc=guix-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).