Artix Linux Forum

Artix Linux => Tutorials and HOWTOs => Topic started by: Ed on 12 September 2025, 23:56:07

Title: Root on ZFS
Post by: Ed on 12 September 2025, 23:56:07
https://wiki.artixlinux.org/Main/InstallationOnZFS

I followed the instructions on your Wiki, and after the Chroot section they don't work.

[artix-live /]# mkinitcpio -P

==> ERROR: module not found: 'zavl'
==> ERROR: module not found: 'znvpair'
==> ERROR: module not found: 'zunicode'
==> ERROR: module not found: 'zcommon'
==> ERROR: module not found: 'zfs'
==> ERROR: module not found: 'spl'

Can I get any advise, or someone to give me some updated instructions?

Update: After a reinstall with linux-lts I got through the install with minimal errors.
Title: Re: Root on ZFS
Post by: Ed on 14 September 2025, 03:15:42
I got a working boot. Here is a copy of all my notes if anyone is interested. It still produces one error I was not able to source down.

Code: [Select]
curl -O https://archzfs.com/archzfs.gpg && pacman-key -a archzfs.gpg && pacman-key --lsign-key DDF7DB817396A49B2A2723F7403BD972F75D9D76

tee -a /etc/pacman.conf <<-'EOF'
[archzfs]
Server = https://archzfs.com/$repo/$arch
Server = https://mirror.sum7.eu/archlinux/archzfs/$repo/$arch
Server = https://mirror.biocrafting.net/archlinux/archzfs/$repo/$arch
Server = https://mirror.in.themindsmaze.com/archzfs/$repo/$arch
EOF

pacman -Sy --noconfirm base-devel gdisk dosfstools archzfs-dkms && modprobe zfs

INST_TZ=/usr/share/zoneinfo/America/Chicago && INST_HOST='localhost' && INST_LINVAR='linux-lts' && DISKON=/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_250GB_S59BNM0RA12361J && DISKTW=/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_250GB_S59BNM0RA12362P && INST_MNT=$(mktemp -d) && INST_UUID=$(dd if=/dev/urandom of=/dev/stdout bs=1 count=100 2>/dev/null |tr -dc 'a-z0-9' | cut -c-6)




sgdisk --zap-all $DISKON && sgdisk --zap-all $DISKTW

sgdisk -n1:0:+1G -t1:EF00 $DISKON && sgdisk -n1:0:+1G -t1:EF00 $DISKTW

sgdisk -a1 -n5:24K:+1000K -t5:EF02 $DISKON && sgdisk -a1 -n5:24K:+1000K -t5:EF02 $DISKTW

sgdisk -n2:0:+4G -t2:BE00 $DISKON && sgdisk -n2:0:+4G -t2:BE00 $DISKTW

sgdisk -n3:0:0 -t3:BF00 $DISKON && sgdisk -n3:0:0 -t3:BF00 $DISKTW



zpool create \
-f \
-o ashift=12 \
-d -o feature@async_destroy=enabled \
-o feature@bookmarks=enabled \
-o feature@embedded_data=enabled \
-o feature@empty_bpobj=enabled \
-o feature@enabled_txg=enabled \
-o feature@extensible_dataset=enabled \
-o feature@filesystem_limits=enabled \
-o feature@hole_birth=enabled \
-o feature@large_blocks=enabled \
-o feature@lz4_compress=enabled \
-o feature@spacemap_histogram=enabled \
-O acltype=posixacl \
-O canmount=off \
-O compression=lz4 \
-O devices=off \
-O normalization=formD \
-O relatime=on \
-O xattr=sa \
-O mountpoint=/boot \
-R $INST_MNT \
bpool_$INST_UUID \
mirror \
/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_250GB_S59BNM0RA12361J-part2 \
/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_250GB_S59BNM0RA12362P-part2


zpool create \
-f \
-o ashift=12 \
-O acltype=posixacl \
-O canmount=off \
-O compression=zstd \
-O dnodesize=auto \
-O normalization=formD \
-O relatime=on \
-O xattr=sa \
-O mountpoint=/ \
-R $INST_MNT \
rpool_$INST_UUID \
mirror \
/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_250GB_S59BNM0RA12361J-part3 \
/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_250GB_S59BNM0RA12362P-part3

zfs create -o canmount=off -o mountpoint=none bpool_$INST_UUID/BOOT && zfs create -o canmount=off -o mountpoint=none rpool_$INST_UUID/ROOT && zfs create -o canmount=off -o mountpoint=none rpool_$INST_UUID/DATA

zfs create -o mountpoint=legacy -o canmount=noauto bpool_$INST_UUID/BOOT/default && zfs create -o mountpoint=/      -o canmount=noauto rpool_$INST_UUID/ROOT/default

zfs mount rpool_$INST_UUID/ROOT/default && mkdir $INST_MNT/boot && mount -t zfs bpool_$INST_UUID/BOOT/default $INST_MNT/boot

zfs create -o mountpoint=/ -o canmount=off rpool_$INST_UUID/DATA/default

for i in {usr,var,var/lib};
do
zfs create -o canmount=off rpool_$INST_UUID/DATA/default/$i
done

for i in {home,root,srv,usr/local,var/log,var/spool,var/tmp};
do
zfs create -o canmount=on rpool_$INST_UUID/DATA/default/$i
done

chmod 750 $INST_MNT/root && chmod 1777 $INST_MNT/var/tmp

zfs create -o canmount=on rpool_$INST_UUID/DATA/default/var/www

mkfs.vfat -n EFI ${DISKON}-part1 && mkdir $INST_MNT/boot/efi && mount -t vfat ${DISKON}-part1 $INST_MNT/boot/efi && mkfs.vfat -n EFI ${DISKTW}-part1

basestrap $INST_MNT base base-devel vi grub connman connman-openrc openrc linux-firmware dosfstools efibootmgr iptables elogind-openrc mkinitcpio dracut
basestrap $INST_MNT $INST_LINVAR ${INST_LINVAR}-headers

error: command failed to execute correctly

basestrap $INST_MNT archzfs-dkms

echo bpool_$INST_UUID/BOOT/default /boot zfs rw,xattr,posixacl 0 0 >> $INST_MNT/etc/fstab
echo UUID=$(blkid -s UUID -o value ${DISKON}-part1) /boot/efi vfat umask=0022,fmask=0022,dmask=0022 0 1 >> $INST_MNT/etc/fstab

mv $INST_MNT/etc/mkinitcpio.conf $INST_MNT/etc/mkinitcpio.conf.original

tee $INST_MNT/etc/mkinitcpio.conf <<EOF
HOOKS=(base udev autodetect modconf block keyboard zfs filesystems)
EOF

echo $INST_HOST > $INST_MNT/etc/hostname

ln -sf $INST_TZ $INST_MNT/etc/localtime

tee -a $INST_MNT/etc/pacman.conf <<-'EOF'
[archzfs]
Server = https://archzfs.com/$repo/$arch
Server = https://mirror.sum7.eu/archlinux/archzfs/$repo/$arch
Server = https://mirror.biocrafting.net/archlinux/archzfs/$repo/$arch
Server = https://mirror.in.themindsmaze.com/archzfs/$repo/$arch
EOF

echo "en_US.UTF-8 UTF-8" >> $INST_MNT/etc/locale.gen && echo "LANG=en_US.UTF-8" >> $INST_MNT/etc/locale.conf

  
   artix-chroot $INST_MNT /usr/bin/env  DISK=$DISK \
INST_UUID=$INST_UUID bash --login

tee /etc/init.d/zfs-mount << 'EOF'
#!/usr/bin/openrc-run

start() {
/usr/bin/zfs mount -a
}
EOF

chmod +x /etc/init.d/zfs-mount && rc-update add zfs-mount boot

locale-gen

rc-update add connmand default

zpool set cachefile=/etc/zfs/zpool.cache rpool_$INST_UUID && zpool set cachefile=/etc/zfs/zpool.cache bpool_$INST_UUID

passwd

mkinitcpio -P

echo 'export ZPOOL_VDEV_NAME_PATH=YES' >> /etc/profile
source /etc/profile

sed -i "s|rpool=.*|rpool=\`zdb -l \${GRUB_DEVICE} \| grep -E '[[:blank:]]name' \| cut -d\\\' -f 2\`|"  /etc/grub.d/10_linux

grub-install

grub-mkconfig -o /boot/grub/grub.cfg

exit

zfs snapshot -r rpool_$INST_UUID/ROOT/default@install && zfs snapshot -r bpool_$INST_UUID/BOOT/default@install && umount $INST_MNT/boot/efi

zpool export bpool_$INST_UUID && zpool export rpool_$INST_UUID

[Admin edit: code tags]