zfs: Relate import services to zfs-import.target instead of local-fs

Being wanted by and ordered before local-fs.target isn't strictly
correct. And in systemd initrd, it's very incorrect because
local-fs.target is for the initrd file system, not the real root file
system.
This commit is contained in:
Will Fancher 2023-04-20 03:03:21 -04:00
parent ad274bf46a
commit 0ddc9d0250

View file

@ -119,8 +119,8 @@ let
"systemd-modules-load.service"
"systemd-ask-password-console.service"
];
wantedBy = (getPoolMounts prefix pool) ++ [ "local-fs.target" ];
before = (getPoolMounts prefix pool) ++ [ "local-fs.target" ];
requiredBy = getPoolMounts prefix pool ++ [ "zfs-import.target" ];
before = getPoolMounts prefix pool ++ [ "zfs-import.target" ];
unitConfig = {
DefaultDependencies = "no";
};
@ -628,6 +628,8 @@ in
force = cfgZfs.forceImportRoot;
prefix = "/sysroot";
}) rootPools);
targets.zfs-import.wantedBy = [ "zfs.target" ];
targets.zfs.wantedBy = [ "initrd.target" ];
extraBin = {
# zpool and zfs are already in thanks to fsPackages
awk = "${pkgs.gawk}/bin/awk";
@ -739,15 +741,7 @@ in
map createSyncService allPools ++
map createZfsService [ "zfs-mount" "zfs-share" "zfs-zed" ]);
systemd.targets.zfs-import =
let
services = map (pool: "zfs-import-${pool}.service") dataPools;
in
{
requires = services;
after = services;
wantedBy = [ "zfs.target" ];
};
systemd.targets.zfs-import.wantedBy = [ "zfs.target" ];
systemd.targets.zfs.wantedBy = [ "multi-user.target" ];
})