1. Disable Secure Boot. ZFS modules can not be loaded if Secure Boot is enabled.

  2. Download latest Arch Linux live image and boot from it.

  3. Connect to the Internet.

  4. Set root password or /root/.ssh/authorized_keys.

  5. Start SSH server:

    systemctl restart sshd
  6. Connect from another computer:

    ssh root@
  7. Use bash shell. Other shells are not tested:

  8. Target disk

    List available disks with:

    find /dev/disk/by-id/

    If using virtio as disk bus, use /dev/disk/by-path/.

    Declare disk array:

    DISK='/dev/disk/by-id/ata-FOO /dev/disk/by-id/nvme-BAR'

    For single disk installation, use:

  9. Set partition size:

    Set swap size, set to 1 if you don’t want swap to take up too much space:


    Root pool size, use all remaining disk space if not set:

  10. Add ZFS repo:

    curl -L |  pacman-key -a -
    pacman-key --lsign-key $(curl -L
    curl -L > /etc/pacman.d/mirrorlist-archzfs
    tee -a /etc/pacman.conf <<- 'EOF'
    #Include = /etc/pacman.d/mirrorlist-archzfs
    Include = /etc/pacman.d/mirrorlist-archzfs
  11. Check kernel version:

    uname -r
  12. Find a ZFS package compatible with the kernel:

    Search kernel version string (e.g. 5.18.7) in both pages:

    Such as:

    curl -L \
    | grep zfs-linux-[0-9] \
    | grep -v src.tar \
    | grep "5.18.7"
    # ...<a href="zfs-linux-2.1.5_5.18.7.arch1.1-1-x86_64.pkg.tar.zst">...

    Result: https/…/archive_archzfs/zfs-linux-2.1.5_5.18.7.arch1.1-1-x86_64.pkg.tar.zst

  13. Find compatible zfs-utils package:

    Search ZFS version string (e.g. 2.1.5) in both pages above:

    curl -L \
    | grep zfs-utils-2.1.5 \
    | grep -v src.tar
    # ...<a href="zfs-utils-2.1.5-1-x86_64.pkg.tar.zst">...

    Result: https/…/archzfs/x86_64/zfs-utils-2.1.5-2-x86_64.pkg.tar.zst

  14. Download both then install:

    pacman -U link-to-zfs.zst link-to-utils.zst
  15. Load kernel modules:

    modprobe zfs