Arch Linux on Raspberry Pi 5
If you already have Raspberry Pi OS running on an SD card and you want to switch to Arch Linux ARM booting from an NVMe drive with the linux-rpi-16k
kernel, this post is for you.
Activate NVMe
Run lsblk
. Does it show the NVMe device /dev/nvme0n1
? If not, we need to append this to /boot/firmware/config.txt
at the end:
dtparam=nvme
dtparam=pciex1_gen=3
Changes in config.txt
need to be followed up by a reboot to see the changes.
Wipe the NVMe SSD
Make sure you don't have any important data remaining on your SSD.
sudo umount /dev/nvme0n1p?
sudo wipefs --all --force /dev/nvme0n1p?
sudo wipefs --all --force /dev/nvme0n1
sudo dd if=/dev/zero of=/dev/nvme0n1 bs=1024 count=1
Clone the boot volume to your NVMe SSD
git clone https://github.com/geerlingguy/rpi-clone.git
cd rpi-clone
sudo cp rpi-clone rpi-clone-setup /usr/local/sbin
sudo rpi-clone nvme0n1
You could now boot from your NVMe SSD if all you need is Raspberry Pi OS. This is a good timing to check if your NVMe drive works at all. Otherwise, continue to download Arch Linux ARM.
Clear both partitions
sudo mount /dev/nvme0n1p2 --mkdir /nvme
sudo rm -rf /nvme/*
sudo mount /dev/nvme0n1p1 --mkdir /nvme/boot
sudo rm -rf /nvme/boot/*
Install Arch Linux
wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-aarch64-latest.tar.gz
sudo apt install libarchive-tools
sudo bsdtar -xpf ArchLinuxARM-rpi-aarch64-latest.tar.gz -C /nvme/
Install linux-rpi-16k
For the following kernel download, change the URL to the latest version.
wget http://mirror.archlinuxarm.org/aarch64/core/linux-rpi-16k-6.6.23-1-aarch64.pkg.tar.xz
sudo rm -rf /nvme/boot/*
sudo tar xf linux-rpi-16k-6.6.23-1-aarch64.pkg.tar.xz -C /nvme/boot/
Update /etc/fstab
Get the PARTUUID
from running blkid
and edit your /nvme/etc/fstab
accordingly:
PARTUUID=0b322c87-01 /boot vfat defaults 0 2
PARTUUID-0b322c87-02 / ext4 defaults,noatime 0 1
Activate NVMe boot again
Add this to the end of /nvme/boot/config.txt
:
dtparam=nvme
dtparam=pciex1_gen=3
Update root device
Edit the root
parameter in /nvme/boot/cmdline.txt
:
root=/dev/nvme0n1p2 rw rootwait console=serial0,115200 console=tty1 fsck.repair=yes
Unmount
sync
sudo umount -R /nvme
Boot from NVMe
The password for alarm
is alarm
. You can su -
with the password root
to get root access.
Repair your installation
pacman-key --init
pacman-key --populate archlinuxarm
pacman -R linux-aarch64 uboot-raspberrypi
pacman -Syu --overwrite "/boot/*" linux-rpi-16k
This will modify your boot config files, so you need to verify their contents again.
Fix IPv6 connectivity
To avoid IPv6 connectivity problems later, install networkmanager
and enable the service:
pacman -S networkmanager
systemctl enable NetworkManager
Now you can reboot
.
My configuration
OS: Arch Linux ARM aarch64
Host: Raspberry Pi 5 Model B Rev 1.0
Kernel: 6.6.25-1-rpi-16k
Packages: 251 (pacman)
Shell: fish 3.7.1
CPU: ARMv8 rev 1 (v8l) (4) @ 2.80 GHz
Memory: 191.64 MiB / 7.86 GiB (2%)
Disk (/): 3.19 GiB / 476.44 GiB (1%) - btrfs
Local IP (end0): 192.168.0.2/24 *
Locale: en_US.UTF-8
Thank you
The information in this post is based on these amazing people:
- Jeff Geerling for the
rpi-clone
fork and showing how to boot from NVMe - Sven Kiljan for the steps to replace
uboot
withlinux-rpi