===== Install arch linux with zfs root ===== - Obtain latest ISO from archlinux.org and burn it to an ISO - Boot up and change / size \ - mount a swap partition - mount -o remount,size=16G /run/archiso/cowspace - Add zfs support - curl -s https://archzfs.leibelt.de/media/setup/init | bash - zgenhostid -f 0x00bab10c - Partition Disk(s) - Create EFI partitionsgdisk -n "1:1m:+512m" -t "1:ef00" /dev/sda - I suggest a swap partition large enough to hold RAM (my system has 16g) contents if you intend to use hibernatesgdisk -n "2:0:+16g" -t "2:8200" /dev/sda - Allocate the remainder to the ZFS poolsgdisk -n "3:0:-10m" -t "3:bf00" /dev/sda - Create the ZFS pool - I suggest using the partition UUID for the device name. root@archiso ~ # ls -l /dev/disk/by-partuuid|grep sda3 lrwxrwxrwx 1 root root 10 Sep 2 10:21 1aea6cc8-8333-4d5c-a9e6-e0a51296391d -> ../../sda3 - We will be using [[https://zfsbootmenu.org|zfsbootmenu]] which is currently using OpenZFS 2.3 zpool create -f -o ashift=12 \ -O compression=lz4 \ -O acltype=posixacl \ -O xattr=sa \ -O relatime=on \ -o autotrim=on \ -o compatibility=openzfs-2.3-linux \ -m none zroot /dev/disk/by-partuuid/1aea6cc8-8333-4d5c-a9e6-e0a51296391d - Export / Import the ZFS poolzpool export zroot && zpool import -NR /mnt zroot - Create the ZFS file systems including the home directory for the normal user account. zfs create -o mountpoint=none zroot/ROOT zfs create -o mountpoint=/ -o canmount=noauto zroot/ROOT/arch zfs mount zroot/ROOT/arch zfs mount zroot/ROOT/arch /mnt - Set up EFI and swap partitions mkfs.vfat -F32 /dev/sda1 mkswap /dev/sda2 - Install the systempacstrap /mnt linux linux-headers linux-firmware base vim amd-ucode networkmanager sudo openssh rsync - Populate the fstab echo "$(blkid /dev/sda1|cut -d\ -f2) /boot/efi vfat defaults 0 2" >> /mnt/etc/fstab echo "$(blkid /dev/sda2|cut -d\ -f2) none swap defaults 0 0" >> /mnt/etc/fstab - Move into the install - arch-chroot /mnt - Set up arch system - Timeln -sf /usr/share/zoneinfo/America/New_York /etc/localtime hwclock --systohc - localesed -i 's/#\(en_US\.UTF-8\)/\1/' /etc/locale.gen locale-gen echo "LANG=en_US.UTF-8" > /etc/locale.conf - vconsoleecho -e "KEYMAP=us\n#FONT=latarcyrheb-sun32" > /etc/vconsole.conf - hostname/hostsecho tas > /etc/hostname - set root passwordpasswd root - Create a normal user and add to sudoers/wheel groupuseradd -G wheel some_user passwd some_user mkdir -p ~some_user && chown some_user ~some_user - edit sudoers with visudo to uncomment one of the wheel stanzas EDITOR=vim visudo - create home for some_usermkdir -p ~some_user && chown some_user ~some_user - su - some_user - Install parusudo pacman -S --needed base-devel git git clone https://aur.archlinux.org/paru.git cd paru makepkg -si - Install zfs supportparu -S zfs-utils paru -S zfs-dkms - exit to rootexit - finish setup - zgenhostid -f 0x00bab10c - edit /etc/mkinitcpio.conf and modify the HOOKS line adding //resume// and //zfs// vim /etc/mkinitcpio.conf grep ^HOOKS /etc/mkinitcpio.conf HOOKS=(base udev autodetect microcode modconf kms keyboard keymap zfs consolefont block filesystems resume) mkinitcpio -P - fix up user home directoriesrm -rf ~some_user; mv /root /_root - set up servicessystemctl disable zfs-import-cache.service systemctl mask zfs-import-cache.service systemctl enable zfs-import-scan.service zfs-mount.service zfs.target zfs-volumes.target zfs-import.target zfs-zed.service NetworkManager - Set up the EFI and install zfsbootmenu zfs set org.zfsbootmenu:commandline="rw quiet" zroot/ROOT mkdir /boot/efi mount /boot/efi mkdir -p /boot/efi/EFI/ZBM curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi cp /boot/efi/EFI/ZBM/VMLINUZ.EFI /boot/efi/EFI/ZBM/VMLINUZ-BACKUP.EFI pacman -S refind refind-install rm /boot/refind_linux.conf cat << EOF >> /boot/efi/EFI/refind/refind_linux.conf menuentry "zbm boot" { loader /EFI/ZBM/VMLINUZ.EFI options "quiet loglevel=0 zbm.skip" } menuentry "zbm menu" { loader /EFI/ZBM/VMLINUZ.EFI options "quiet loglevel=0 zbm.show" } menuentry "zbm backup menu" { loader /EFI/ZBM/VMLINUZ-BACKUP.EFI options "quiet loglevel=0 zbm.show" } EOF - Exit and reboot exit umount -n -R /mnt zpool export zroot reboot - Finish up - Log in as root zfs create -o mountpoint=none zroot/homes zfs create -o mountpoint=/root zroot/homes/root zfs create -o mountpoint=/home/USER zroot/homes/USER cp -r /etc/skel/. ~ cp -r /etc/skel/. ~some_user chown -R some_user:some_user ~some_user chmod 750 ~some_user zfs snapshot zroot/ROOT/arch@initial exit