disko icon indicating copy to clipboard operation
disko copied to clipboard

Rootfs mount order issue (tmpfs + zfs)

Open yangm97 opened this issue 2 years ago • 3 comments

The problem

disko mounts zfs pool before the rootfs mount (which is tmpfs in my case), shadowing the zfs native mounts. Example log:

disko --mode mount hosts/sisyphus/disko-config.nix
+ zpool list sisyphus                                                                                                                                                                                             
+ zpool import -l -R /mnt sisyphus                                                                                                                                                                                
0 / 0 keys successfully loaded                                                                                                                                                                                    
+ findmnt tmpfs /mnt/
+ mount -t tmpfs none /mnt/ -o mode=755 -o X-mount.mkdir
+ findmnt /dev/disk/by-id/usb-USB_SanDisk_3.2Gen1_0901b343af36a38f56915e6ae7f6378d8e795333704cbe0c39e64a2528c00d94de2e000000000000000000003430e0f8ff1f2d2067558107c92aa62d-0:0-part1 /mnt/boot
+ mount /dev/disk/by-id/usb-USB_SanDisk_3.2Gen1_0901b343af36a38f56915e6ae7f6378d8e795333704cbe0c39e64a2528c00d94de2e000000000000000000003430e0f8ff1f2d2067558107c92aa62d-0:0-part1 /mnt/boot -t vfat -o defaults -o X-mount.mkdir
+ findmnt sisyphus/safe/persist /mnt/persist
+ mount sisyphus/safe/persist /mnt/persist -o X-mount.mkdir -o defaults -t zfs

Ideal scenario

disko should mount the root before importing the zfs pool.

BTW I'm only using one legacy mount to workaround impermance desire for a mount which has neededForBoot set from the nix configuration (so it doesn't quite "see" zfs native mounts).

Workarounds

From the log output, it appears to me that using legacy mounts for all zfs datasets would work.

yangm97 avatar Jun 16 '23 16:06 yangm97

not sure if thats a disko or a nixpkgs problem. maybe posting a config which causes the breakage will help me investigate

Lassulus avatar Jul 31 '23 14:07 Lassulus

Sorry I think I forgot to save the troubling config but this should at least be close to reproducing the issue. If I remember correctly, I ended up using legacy mountpoints for all datasets in order to workaround the ordering issue.

{ ... }: {
  disko.devices = {
    nodev = {
      "/" = {
        fsType = "tmpfs";
        mountOptions = [
          "mode=755"
        ];
      };
    };
    disk = {
      x = {
        type = "disk";
        device = "/dev/disk/by-id/usb-USB_SanDisk_3.2Gen1_0901b343af36a38f56915e6ae7f6378d8e795333704cbe0c39e64a2528c00d94de2e000000000000000000003430e0f8ff1f2d2067558107c92aa62d-0:0";
        content = {
          type = "table";
          format = "gpt";
          partitions = [
            {
              name = "ESP";
              start = "0";
              end = "1024MiB";
              fs-type = "fat32";
              bootable = true;
              content = {
                type = "filesystem";
                format = "vfat";
                mountpoint = "/boot";
              };
            }
            {
              name = "zfs";
              start = "1024MiB";
              end = "100%";
              content = {
                type = "zfs";
                pool = "sisyphus";
              };
            }
          ];
        };
      };
    };
    zpool = {
      sisyphus = {
        type = "zpool";
        options = {
          ashift = "13";
          autotrim = "on";
        };
        rootFsOptions = {
          atime = "off";
          compression = "zstd";
          "com.sun:auto-snapshot" = "false";
          dedup = "on";
          xattr = "sa";
          mountpoint = "none";
        };
        mountRoot = "/mnt";
        postCreateHook = "zfs snapshot -r sisyphus@blank";

        datasets = {
          local.type = "zfs_fs";
          "local/reserved" = {
            type = "zfs_fs";
            options.mountpoint = "none";
            options.reservation = "12G";
          };
          "local/nix" = {
            type = "zfs_fs";
            # options.mountpoint = "/nix";
            options.mountpoint = "legacy";
            mountpoint = "/nix";
          };
          safe.type = "zfs_fs";
          "safe/persist" = {
            type = "zfs_fs";
            options."com.sun:auto-snapshot" = "true";
            # options.mountpoint = "/persist";
            options.mountpoint = "legacy";
            mountpoint = "/persist";
          };
          "safe/home" = {
            type = "zfs_fs";
            options.recordsize = "1M";
            # options.mountpoint = "/home";
            options.mountpoint = "legacy";
            mountpoint = "/home";
            options."com.sun:auto-snapshot" = "true";
          };
          "safe/home/andre" = {
            type = "zfs_fs";
            options.mountpoint = "legacy";
            mountpoint = "/home/andre";
          };
          "safe/home/yan" = {
            type = "zfs_fs";
            options.mountpoint = "legacy";
            mountpoint = "/home/yan";
          };
        };
      };
    };
  };
}

yangm97 avatar Aug 03 '23 15:08 yangm97

I think this issue should be fixed by #474

Enzime avatar Dec 20 '23 06:12 Enzime