I already run NixOS on my desktop (with btrfs), and I’ve created NixOS VMs before, but this is the first time trying to create a VM using btrfs. At least, that’s my only guess at what is different for it to not be working…
I use virt-manager
(libvirtd
) to create the VM, and boot it off of the 22.11 nixos minimal ISO. The VM boots fine, but after installing NixOS and rebooting, it just hangs at “Booting from Hard Disk”. Almost like it doesn’t even load the kernel?
Below is the installation script I’m using. Everything looks right as far as I can tell, and is similar to what I did for my desktop (though I didn’t write down the commands for that one). Any ideas?
#!/usr/bin/env bash
DISK=/dev/vda
parted ${DISK} -- mklabel gpt
parted ${DISK} -- mkpart ESP fat32 1MB 512MB
parted ${DISK} -- set 1 esp on
parted ${DISK} -- mkpart primary 512MB 100%
mkfs.fat -F 32 -n boot ${DISK}1
mkfs.btrfs -f ${DISK}2
mount -t btrfs ${DISK}2 /mnt
btrfs subvolume create /mnt/root
btrfs subvolume create /mnt/home
btrfs subvolume create /mnt/nix
btrfs subvolume create /mnt/persist
btrfs subvolume create /mnt/log
btrfs subvolume create /mnt/swap
btrfs subvolume snapshot -r /mnt/root /mnt/root-blank
umount /mnt
mount -o subvol=root,compress=zstd,noatime ${DISK}2 /mnt
mkdir /mnt/home
mount -o subvol=home,compress=zstd,noatime ${DISK}2 /mnt/home
mkdir /mnt/nix
mount -o subvol=nix,compress=zstd,noatime ${DISK}2 /mnt/nix
mkdir /mnt/persist
mount -o subvol=persist,compress=zstd,noatime ${DISK}2 /mnt/persist
mkdir -p /mnt/var/log
mount -o subvol=log,compress=zstd,noatime ${DISK}2 /mnt/var/log
mkdir /mnt/swap
mount -o subvol=swap,noatime ${DISK}2 /mnt/swap
mkdir /mnt/boot
mount ${DISK}1 /mnt/boot
nixos-generate-config --root /mnt
cat > /mnt/etc/nixos/configuration.nix <<EOL
{ config, pkgs, ... }: {
imports = [
./hardware-configuration.nix
];
boot.kernelPackages = pkgs.linuxPackages_latest;
boot.supportedFilesystems = [ "btrfs" ];
hardware.enableAllFirmware = true;
nixpkgs.config.allowUnfree = true;
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "zen"; # Define your hostname.
system.stateVersion = "22.11";
}
EOL
# nixos-install --flake /mnt/etc/nixos#zen
nixos-install