How to Install Fedora on a Raspberry Pi

Install Fedora on a Raspberry Pi 4 or 5 by downloading the official Fedora ARM image and writing it to a microSD card or USB drive with the Fedora Media Writer or dd.

You have a Raspberry Pi and a blank SD card

You have a Raspberry Pi 5 sitting on the desk. You want to run a headless server for your home lab, or maybe you want a lightweight desktop that doesn't feel like a toy. You downloaded an image, flashed it, and the Pi just blinks an LED and does nothing. Or you got it booting, but the filesystem is tiny and SSH is locked down. Fedora on ARM works well, but the process differs from x86. You need the right image, the right tool, and a few tweaks to get the system usable.

What's actually happening

Fedora provides official images for aarch64, which covers the Raspberry Pi 4 and Pi 5. The Pi 3 is supported but lacks the performance headroom for modern workloads. Pi 1 and Pi 2 are not supported. The images come as raw disk images compressed with xz. You are not installing via a graphical installer. You are writing a complete disk image to storage.

The image contains the boot firmware, the kernel, and the root filesystem. When the Pi boots, the onboard firmware reads the bootloader from the SD card or USB drive, loads the kernel, and mounts the root partition. If the image does not match the hardware, or if the filesystem is not expanded, the system will be unusable. The raw image preserves the exact partition layout Fedora expects. Writing to a partition instead of the whole device breaks the bootloader chain.

Flash the image

You can use Fedora Media Writer for a graphical experience, or dd for a terminal-based workflow. The dd method works on any Linux machine and gives you full control. Verify the device path before writing. Writing to the wrong device destroys data instantly.

Here's how to identify your SD card and write the image safely.

# List block devices to find the SD card.
# Look for a device matching your card's capacity.
# The device name is usually /dev/mmcblk0 or /dev/sdX.
lsblk -f

# Decompress the image file.
# The raw image is too large to handle efficiently while compressed.
# Adjust the filename to match your download.
unxz Fedora-Server-41-1.5.aarch64.raw.xz

# Write the image to the block device.
# Use the whole device, not a partition.
# bs=4M speeds up the write. status=progress shows completion percentage.
# Double-check the of= argument. A typo here is irreversible.
sudo dd if=Fedora-Server-41-1.5.aarch64.raw of=/dev/mmcblk0 bs=4M status=progress

# Flush buffers to disk.
# This ensures all data is written before you remove the card.
# Skipping this can corrupt the filesystem on the first boot.
sync

Flash the whole device. Writing to a partition breaks the bootloader and leaves you with a brick.

First boot and expansion

Insert the microSD card into the Pi and power on. Wait for the activity LED to settle. For Server and Minimal images, the system boots to a console login. The default user is fedora with password fedora on some images. Change the password immediately.

The image filesystem is sized for the minimum boot requirements. You need to expand the partition and the filesystem to use the full capacity of the card. Fedora uses Btrfs by default on Server and Workstation images. Btrfs handles snapshots and compression, but it requires explicit resizing after the partition grows.

Here's how to expand the storage and enable remote access.

# Expand the partition to fill the remaining space on the card.
# growpart modifies the partition table without touching the filesystem.
# The number 3 refers to the root partition index. Verify with lsblk if unsure.
sudo growpart /dev/mmcblk0 3

# Resize the filesystem to match the new partition size.
# Btrfs is the default filesystem on Fedora Server and Workstation.
# This command tells Btrfs to use all available space in the partition.
sudo btrfs filesystem resize max /

# Enable and start the SSH daemon.
# This allows remote access immediately and across reboots.
# Headless management is impossible without SSH.
sudo systemctl enable --now sshd

# Check the IP address assigned to the network interface.
# You will need this to connect via SSH.
# The interface name is usually eth0 for wired or wlan0 for Wi-Fi.
ip addr show

Expand the filesystem before you fill the disk. Btrfs snapshots will fail if you run out of space.

Verify the installation

Connect to the Pi via SSH from your workstation. Run commands to confirm the system is healthy. Check the release version, disk space, and service status. Run systemctl status sshd to see if the service is active. Check the status before you try to restart it.

Here's how to confirm the installation is complete and ready for work.

# Verify the release version.
# This confirms the kernel and base packages match the image you flashed.
cat /etc/fedora-release

# Check filesystem usage.
# The root partition should show the full capacity of your card.
# If the size is small, the resize step failed.
df -h /

# Check for boot errors.
# The -xe flags add explanatory text and jump to the end of the journal.
# Look for red [FAILED] lines or kernel warnings.
journalctl -xe

Run journalctl -xe first. Read the actual error before guessing.

Common pitfalls and errors

The Pi 4 onboard Wi-Fi driver has known stability issues in some Fedora releases. A USB Wi-Fi adapter is more reliable for headless setups. If the network interface does not appear, check the kernel logs. SELinux denials show up in journalctl -t setroubleshoot with a one-line summary. Read those before disabling SELinux.

You may encounter errors during expansion or boot. The error messages point to the root cause. Do not force commands when the output indicates a mismatch.

growpart: failed to get disk info: /dev/mmcblk0: No such file or directory

This error means the device path is wrong. The SD card might be mounted as /dev/mmcblk1 or the kernel has not detected the card. Run lsblk to find the correct path.

btrfs filesystem resize max /
Resize '/dev/mmcblk0p3' failed: Device or resource busy

This error indicates the filesystem is mounted read-only or another process is holding the lock. Reboot the system and run the resize command again. Btrfs requires an exclusive lock for some operations.

ssh: connect to host 192.168.1.50 port 22: Connection refused

This error means SSH is not listening. The sshd service might not be enabled, or the firewall is blocking the port. Fedora enables firewalld by default. Run sudo firewall-cmd --add-service=ssh --permanent and sudo firewall-cmd --reload to open the port. Reload the firewall after every rule change. Otherwise the runtime config and the persistent config diverge.

If the boot menu is gone, GRUB rescue is your friend, not your enemy. Use it to repair the boot configuration.

Choose the right variant

Fedora offers multiple images for ARM. Pick the one that matches your workload. The decision depends on your hardware, your use case, and your tolerance for configuration.

Use Fedora Server when you are running headless services and want the smallest attack surface. Use Fedora Workstation when you need a graphical desktop with GNOME and direct HDMI output. Use Fedora Minimal when you are building a custom container host or embedded appliance. Use a USB drive instead of SD when you need better write endurance and faster random I/O. Use the Pi 5 when you require multi-core performance for compilation or virtualization. Stick to the Pi 4 when you are constrained by power budgets or existing case compatibility.

After the install, run sudo dnf upgrade --refresh to pull the latest packages. This is your weekly maintenance command. Do not use dnf system-upgrade here. That command is for crossing major Fedora releases. Fedora's release cadence is six months. Plan upgrades on that cycle.

Trust the package manager. Manual file edits drift, snapshots stay.

Where to go next