Arch linux + btrfs installation

6/29/2026

Arch linux installation with btrfs file system

Written by: Kedar Shidhaye

Arch Linux installation screenshot showing Btrfs partitions.

Installing Arch Linux with Btrfs, Snapshots, and Timeshift

This guide walks through installing Arch Linux using the Btrfs filesystem with subvolumes, snapshot support through Timeshift, and a desktop environment of your choice.


Prerequisites


Note: If you have a Ethernet cable, skip this step.

1. Connect to Wi-Fi

Start the iwctl utility:

iwctl

List available wireless devices

device list

Note the device name (for example, wlan0).

Scan and list available networks

station <device_name> get-networks

Note the network name (for example, my_wifi).

Connect to a network

station <device_name> connect <network_name>

Enter your Wi-Fi password when prompted.

Verify connectivity

ping -c 3 archlinux.org

2. Configure Keyboard Layout, Time, and Locale

Set keyboard layout

loadkeys us

Verify UEFI boot mode

cat /sys/firmware/efi/fw_platform_size

A result of 64 indicates a 64-bit UEFI system.

List available time zones

timedatectl list-timezones

Set timezone

timedatectl set-timezone Asia/Kolkata

Enable network time synchronization

timedatectl set-ntp true

3. Partition and Format the Disk

Launch the partition manager:

cfdisk

Create the following partitions:

Partition Size Filesystem
EFI System Partition 1 GB FAT32
Swap 4 GB Linux Swap
Root Remaining Space Btrfs

Format the Partitions

Format the Linux partition as Btrfs

mkfs.btrfs /dev/<linux_partition>

Format the EFI partition

mkfs.fat -F 32 /dev/<boot_partition>

Create and enable swap

mkswap /dev/<swap_partition>
swapon /dev/<swap_partition>

Mount the Root Partition

mount /dev/<linux_partition> /mnt

Create Btrfs Subvolumes

btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@logs
btrfs subvolume create /mnt/@root
btrfs subvolume create /mnt/@tmp
btrfs subvolume create /mnt/@opt

Unmount the partition:

umount /mnt

Remount Using Compression

mount -o noatime,compress=zstd,space_cache=v2,subvol=@ /dev/<linux_partition> /mnt

Create the required mount points:

mkdir -p /mnt/{boot/efi,root,tmp,var/log,opt,home}

Mount Remaining Subvolumes

mount -o noatime,compress=zstd,space_cache=v2,subvol=@home /dev/<linux_partition> /mnt/home

mount -o noatime,compress=zstd,space_cache=v2,subvol=@tmp /dev/<linux_partition> /mnt/tmp

mount -o noatime,compress=zstd,space_cache=v2,subvol=@logs /dev/<linux_partition> /mnt/var/log

mount -o noatime,compress=zstd,space_cache=v2,subvol=@root /dev/<linux_partition> /mnt/root

mount -o noatime,compress=zstd,space_cache=v2,subvol=@opt /dev/<linux_partition> /mnt/opt

Mount the EFI partition

mount /dev/<boot_partition> /mnt/boot/efi

4. Install the Base System

Install Arch Linux and required packages:

pacstrap /mnt base base-devel nano grub efibootmgr networkmanager linux linux-firmware sof-firmware btrfs-progs dosfstools

Generate the filesystem table:

genfstab -U /mnt >> /mnt/etc/fstab

Enter the new installation:

arch-chroot /mnt

5. Configure the Installed System

Enable Networking

systemctl enable NetworkManager

Configure Initramfs for Btrfs

Edit:

nano /etc/mkinitcpio.conf

Ensure the modules line contains:

MODULES=(btrfs)

Regenerate initramfs:

mkinitcpio -P

Install GRUB Bootloader

grub-install /dev/sda

Edit GRUB configuration:

nano /etc/default/grub

Set:

GRUB_DISABLE_OS_PROBER=false

Generate the GRUB configuration:

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

Set Root Password

passwd

Create a User Account

useradd -m -G wheel -s /bin/bash kedar

Set the user password:

passwd kedar

Configure Sudo Access

Open the sudoers file:

EDITOR=nano visudo

Uncomment:

%wheel ALL=(ALL:ALL) ALL

This allows users in the wheel group to use sudo.


Update the System

pacman -Syu

Configure Time

ln -sf /usr/share/zoneinfo/Asia/Kolkata /etc/localtime

hwclock --systohc

Configure Locale

Edit locale definitions:

nano /etc/locale.gen

Uncomment:

en_US.UTF-8 UTF-8

Generate locales:

locale-gen

Create locale configuration:

nano /etc/locale.conf

Add:

LANG=en_US.UTF-8

Configure Hostname

nano /etc/hostname

Example:

karma

6. Finish Installation

Exit the chroot environment:

exit

Unmount all partitions:

umount -R /mnt

Flush pending writes:

sync

Reboot:

reboot

7. Install a Desktop Environment

Option 1: GNOME

Install GNOME and GDM:

sudo pacman -S gdm gnome

Enable the display manager:

sudo systemctl enable --now gdm.service

Option 2: KDE Plasma

Install KDE Plasma:

sudo pacman -S xorg plasma plasma-workspace kde-applications

Enable SDDM:

sudo systemctl enable sddm.service

Enable networking:

sudo systemctl enable NetworkManager.service

Reboot after installation.


8. Configure Timeshift Snapshots

Install Timeshift and required Btrfs tools:

sudo pacman -S timeshift btrfs-progs

Install GRUB snapshot integration:

sudo pacman -S firefox grub-btrfs inotify-tools

Open Timeshift and create your first snapshot using the graphical interface.

After creating a snapshot, regenerate the GRUB menu:

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

Reboot:

sudo reboot

Conclusion

You now have an Arch Linux installation using Btrfs subvolumes, transparent Zstandard compression, Timeshift snapshots, and GRUB snapshot integration. This setup provides a solid foundation for system recovery and long-term maintenance while preserving Arch Linux’s flexibility and performance.