Arch linux + btrfs installation
6/29/2026
Arch linux installation with btrfs file system
Written by: Kedar Shidhaye

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
- Arch Linux installation media
- UEFI-enabled system
- Internet connection
- Basic familiarity with Linux commands
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.