feat: fixed more missing datasets
This commit is contained in:
parent
1145703cfe
commit
2f7bbf3e1c
5 changed files with 65 additions and 4 deletions
|
|
@ -3,5 +3,6 @@
|
|||
imports = [
|
||||
./configuration.nix
|
||||
./hardware-configuration.nix
|
||||
./legacy-storage.nix
|
||||
];
|
||||
}
|
||||
|
|
|
|||
51
configurations/nixos/emergent/legacy-storage.nix
Normal file
51
configurations/nixos/emergent/legacy-storage.nix
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# Legacy storage configuration for emergent
|
||||
# This file manually defines ZFS datasets matching the existing on-disk layout
|
||||
# to allow incremental migration to the new storage module (generateBase = true).
|
||||
#
|
||||
# Current on-disk dataset layout:
|
||||
# rpool/local/ - parent (canmount=off)
|
||||
# rpool/local/system/nix - nix store
|
||||
# rpool/local/system/root - root filesystem
|
||||
#
|
||||
# Migration plan:
|
||||
# Phase 1: Rename datasets on disk (boot from live USB)
|
||||
# zfs rename -p rpool/local/system/nix rpool/persist/local/nix
|
||||
# zfs rename rpool/local rpool/persist/local
|
||||
# # This moves: local/system/root -> persist/local/root (need to rename after)
|
||||
# # Actually, since local/system/root needs to become persist/local/root:
|
||||
# zfs rename rpool/persist/local/system/root rpool/persist/local/root
|
||||
# zfs destroy rpool/persist/local/system # now empty
|
||||
# # Recreate blank snapshot:
|
||||
# zfs destroy rpool/persist/local/root@blank
|
||||
# zfs snapshot rpool/persist/local/root@blank
|
||||
#
|
||||
# Phase 2: Delete this file, remove its import from default.nix, rebuild.
|
||||
{...}: {
|
||||
# Disable automatic base dataset generation so we can define them manually
|
||||
storage.generateBase = false;
|
||||
|
||||
# Manually define ZFS datasets matching the existing on-disk layout
|
||||
storage.zfs.datasets = {
|
||||
"local" = {
|
||||
type = "zfs_fs";
|
||||
mount = null;
|
||||
};
|
||||
"local/system/nix" = {
|
||||
type = "zfs_fs";
|
||||
mount = "/nix";
|
||||
atime = "off";
|
||||
relatime = "off";
|
||||
snapshot = {
|
||||
autoSnapshot = false;
|
||||
};
|
||||
};
|
||||
"local/system/root" = {
|
||||
type = "zfs_fs";
|
||||
mount = "/";
|
||||
snapshot = {
|
||||
blankSnapshot = true;
|
||||
autoSnapshot = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -153,7 +153,7 @@ in {
|
|||
config.storage.datasets.replicate)
|
||||
];
|
||||
})
|
||||
(lib.mkIf (config.storage.zfs.enable && !config.storage.impermanence.enable) {
|
||||
(lib.mkIf (config.storage.zfs.enable && !config.storage.impermanence.enable && config.storage.generateBase) {
|
||||
storage.datasets = {
|
||||
# Base organizational datasets (only needed when impermanence is disabled)
|
||||
local = {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,12 @@ args @ {
|
|||
# Hash function for disk names (max 27 chars to fit GPT limitations)
|
||||
hashDisk = drive: (builtins.substring 0 27 (builtins.hashString "sha256" drive));
|
||||
|
||||
# Map "stripe" to "" for disko compatibility (disko uses "" for stripe mode)
|
||||
diskoPoolMode =
|
||||
if config.storage.zfs.pool.mode == "stripe"
|
||||
then ""
|
||||
else config.storage.zfs.pool.mode;
|
||||
|
||||
# Helper to flatten vdevs into list of devices with names
|
||||
allVdevDevices = lib.lists.flatten (builtins.map (
|
||||
vdev:
|
||||
|
|
@ -260,7 +266,7 @@ in {
|
|||
type = "topology";
|
||||
vdev =
|
||||
builtins.map (vdev: {
|
||||
mode = config.storage.zfs.pool.mode;
|
||||
mode = diskoPoolMode;
|
||||
members = builtins.map (device: hashDisk device.device) vdev;
|
||||
})
|
||||
config.storage.zfs.pool.vdevs;
|
||||
|
|
|
|||
|
|
@ -409,10 +409,13 @@ in {
|
|||
);
|
||||
|
||||
# Post resume commands to rollback user home datasets to blank snapshots
|
||||
boot.initrd.postResumeCommands = lib.mkAfter (
|
||||
# Only add these when generateBase is true -- when false, the legacy
|
||||
# storage config is responsible for providing rollback commands with
|
||||
# the correct (old) dataset paths.
|
||||
boot.initrd.postResumeCommands = lib.mkIf config.storage.generateBase (lib.mkAfter (
|
||||
lib.strings.concatLines (builtins.map (user: "zfs rollback -r rpool/ephemeral/home/${user.name}@blank")
|
||||
normalUsers)
|
||||
);
|
||||
));
|
||||
|
||||
# TODO: I don't think we need this anymore but I have not tested it
|
||||
# Create persist home directories with proper permissions
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue