Merge pull request #223412 from Luflosi/test-boot-from-zfs
nixos/tests/installer: test /boot on ZFS
This commit is contained in:
commit
14912a23d1
4 changed files with 78 additions and 11 deletions
|
@ -90,6 +90,7 @@ in rec {
|
|||
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSubvols")
|
||||
(onSystems ["x86_64-linux"] "nixos.tests.installer.luksroot")
|
||||
(onSystems ["x86_64-linux"] "nixos.tests.installer.lvm")
|
||||
(onSystems ["x86_64-linux"] "nixos.tests.installer.separateBootZfs")
|
||||
(onSystems ["x86_64-linux"] "nixos.tests.installer.separateBootFat")
|
||||
(onSystems ["x86_64-linux"] "nixos.tests.installer.separateBoot")
|
||||
(onSystems ["x86_64-linux"] "nixos.tests.installer.simpleLabels")
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
# lvm
|
||||
separateBoot
|
||||
separateBootFat
|
||||
separateBootZfs
|
||||
simple
|
||||
simpleLabels
|
||||
simpleProvided
|
||||
|
|
|
@ -878,6 +878,78 @@ in {
|
|||
'';
|
||||
};
|
||||
|
||||
# Same as the previous, but with ZFS /boot.
|
||||
separateBootZfs = makeInstallerTest "separateBootZfs" {
|
||||
extraInstallerConfig = {
|
||||
boot.supportedFilesystems = [ "zfs" ];
|
||||
};
|
||||
|
||||
extraConfig = ''
|
||||
# Using by-uuid overrides the default of by-id, and is unique
|
||||
# to the qemu disks, as they don't produce by-id paths for
|
||||
# some reason.
|
||||
boot.zfs.devNodes = "/dev/disk/by-uuid/";
|
||||
networking.hostId = "00000000";
|
||||
'';
|
||||
|
||||
createPartitions = ''
|
||||
machine.succeed(
|
||||
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
|
||||
+ " mkpart primary ext2 1M 256MB" # /boot
|
||||
+ " mkpart primary linux-swap 256MB 1280M"
|
||||
+ " mkpart primary ext2 1280M -1s", # /
|
||||
"udevadm settle",
|
||||
|
||||
"mkswap /dev/vda2 -L swap",
|
||||
"swapon -L swap",
|
||||
|
||||
"mkfs.ext4 -L nixos /dev/vda3",
|
||||
"mount LABEL=nixos /mnt",
|
||||
|
||||
# Use as many ZFS features as possible to verify that GRUB can handle them
|
||||
"zpool create"
|
||||
" -o compatibility=grub2"
|
||||
" -O utf8only=on"
|
||||
" -O normalization=formD"
|
||||
" -O compression=lz4" # Activate the lz4_compress feature
|
||||
" -O xattr=sa"
|
||||
" -O acltype=posixacl"
|
||||
" bpool /dev/vda1",
|
||||
"zfs create"
|
||||
" -o recordsize=1M" # Prepare activating the large_blocks feature
|
||||
" -o mountpoint=legacy"
|
||||
" -o relatime=on"
|
||||
" -o quota=1G"
|
||||
" -o filesystem_limit=100" # Activate the filesystem_limits features
|
||||
" bpool/boot",
|
||||
|
||||
# Snapshotting the top-level dataset would trigger a bug in GRUB2: https://github.com/openzfs/zfs/issues/13873
|
||||
"zfs snapshot bpool/boot@snap-1", # Prepare activating the livelist and bookmarks features
|
||||
"zfs clone bpool/boot@snap-1 bpool/test", # Activate the livelist feature
|
||||
"zfs bookmark bpool/boot@snap-1 bpool/boot#bookmark", # Activate the bookmarks feature
|
||||
"zpool checkpoint bpool", # Activate the zpool_checkpoint feature
|
||||
"mkdir -p /mnt/boot",
|
||||
"mount -t zfs bpool/boot /mnt/boot",
|
||||
"touch /mnt/boot/empty", # Activate zilsaxattr feature
|
||||
"dd if=/dev/urandom of=/mnt/boot/test bs=1M count=1", # Activate the large_blocks feature
|
||||
|
||||
# Print out all enabled and active ZFS features (and some other stuff)
|
||||
"sync /mnt/boot",
|
||||
"zpool get all bpool >&2",
|
||||
|
||||
# Abort early if GRUB2 doesn't like the disks
|
||||
"grub-probe --target=device /mnt/boot >&2",
|
||||
)
|
||||
'';
|
||||
|
||||
# umount & export bpool before shutdown
|
||||
# this is a fix for "cannot import 'bpool': pool was previously in use from another system."
|
||||
postInstallCommands = ''
|
||||
machine.succeed("umount /mnt/boot")
|
||||
machine.succeed("zpool export bpool")
|
||||
'';
|
||||
};
|
||||
|
||||
# zfs on / with swap
|
||||
zfsroot = makeInstallerTest "zfs-root" {
|
||||
extraInstallerConfig = {
|
||||
|
@ -897,7 +969,7 @@ in {
|
|||
createPartitions = ''
|
||||
machine.succeed(
|
||||
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
|
||||
+ " mkpart primary 1M 100MB" # bpool
|
||||
+ " mkpart primary 1M 100MB" # /boot
|
||||
+ " mkpart primary linux-swap 100M 1024M"
|
||||
+ " mkpart primary 1024M -1s", # rpool
|
||||
"udevadm settle",
|
||||
|
@ -909,20 +981,12 @@ in {
|
|||
"zfs create -o mountpoint=legacy rpool/root/usr",
|
||||
"mkdir /mnt/usr",
|
||||
"mount -t zfs rpool/root/usr /mnt/usr",
|
||||
"zpool create -o compatibility=grub2 bpool /dev/vda1",
|
||||
"zfs create -o mountpoint=legacy bpool/boot",
|
||||
"mkfs.vfat -n BOOT /dev/vda1",
|
||||
"mkdir /mnt/boot",
|
||||
"mount -t zfs bpool/boot /mnt/boot",
|
||||
"mount LABEL=BOOT /mnt/boot",
|
||||
"udevadm settle",
|
||||
)
|
||||
'';
|
||||
|
||||
# umount & export bpool before shutdown
|
||||
# this is a fix for "cannot import 'bpool': pool was previously in use from another system."
|
||||
postInstallCommands = ''
|
||||
machine.succeed("umount /mnt/boot")
|
||||
machine.succeed("zpool export bpool")
|
||||
'';
|
||||
};
|
||||
|
||||
# Create two physical LVM partitions combined into one volume group
|
||||
|
|
|
@ -210,6 +210,7 @@ in {
|
|||
enableSystemdStage1 = true;
|
||||
};
|
||||
|
||||
installerBoot = (import ./installer.nix { }).separateBootZfs;
|
||||
installer = (import ./installer.nix { }).zfsroot;
|
||||
|
||||
expand-partitions = makeTest {
|
||||
|
|
Loading…
Reference in a new issue