Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
= Arch Linux step-by-step installation =
= =
== Boot the installation CD ==
== Create partition ==
cfdisk /dev/sda
* Create a partition with code 8300 (Linux)
== Format the partition ==
mkfs.btrfs -L "Arch Linux" /dev/sda1
== Mount the partition ==
mkdir /mnt/btrfs-root
mount -o defaults,relatime,discard,ssd,nodev,nosuid /dev/sda1 /mnt/btrfs-root
== Create the subvolumes ==
mkdir -p /mnt/btrfs/__snapshot
mkdir -p /mnt/btrfs/__current
btrfs subvolume create /mnt/btrfs-root/__current/root
btrfs subvolume create /mnt/btrfs-root/__current/home
== Mount the subvolumes ==
mkdir -p /mnt/btrfs-current
mount -o defaults,relatime,discard,ssd,nodev,subvol=__current/root /dev/sda1 /mnt/btrfs-current
mkdir -p /mnt/btrfs-current/home
mount -o defaults,relatime,discard,ssd,nodev,nosuid,subvol=__current/home /dev/sda1 /mnt/btrfs-current/home
== Install Arch Linux ==
nano /etc/pacman.d/mirrorlist
* Select the mirror to be used
pacstrap /mnt/btrfs-current base base-devel
genfstab -U -p /mnt/btrfs-current >> /mnt/btrfs-current/etc/fstab
nano /mnt/btrfs-current/etc/fstab
* copy the partition info for / and mount it on /run/btrfs-root (remember to remove subvol parameter! and add nodev,nosuid,noexec parameters)
== Configure the system ==
arch-chroot /mnt/btrfs-current /bin/bash
pacman -S btrfs-progs
nano /etc/locale.gen
* Uncomment en_US.UTF-8
echo LANG=en_US.UTF-8 > /etc/locale.conf
export LANG=en_US.UTF-8
ln -s /usr/share/zoneinfo/Europe/Kiev /etc/localtime
hwclock --systohc --utc
echo 'idv-HP-EliteBook-840-G1' > /etc/hostname
nano /etc/nsswitch
* set the hostname
pacman -S wicd
systemctl enable wicd.service
nano /etc/mkinitcpio.conf
* Remove fsck and add btrfs to HOOKS
mkinitcpio -p linux
groupadd idv
useradd -m -g idv -G users,wheel,storage,power,network -s /bin/bash -c "Ihor Dvoretskyi" idv
passwd idv
== Install boot loader ==
pacman -S grub-bios
grub-install --target=i386-pc --recheck /dev/sda
nano /etc/default/grub
* Edit settings (e.g., disable gfx, quiet, etc.)
grub-mkconfig -o /boot/grub/grub.cfg
== Unmount and reboot ==
umount /mnt/btrfs-current/home
umount /mnt/btrfs-current
umount /mnt/btrfs-root
== Post installation configuration ==
=== Power management ===
nano /etc/modprobe.d/blacklist.conf
* blacklist nouveau
Download and compile bbswitch from
nano /etc/mkinitcpio.conf
* Add "i915 bbswitch" to MODULES
* Add "/etc/modprobe.d/i915.conf /etc/modprobe.d/bbswitch.conf" to FILES
nano /etc/modprobe.d/i915.conf
options i915 modeset=1
options i915 i915_enable_rc6=1
options i915 i915_enable_fbc=1
options i915 lvds_downclock=1
nano /etc/modprobe.d/bbswitch.conf
options bbswitch load_state=0
options bbswitch unload_state=1
mkinitcpio -p linux
=== Hardening ===
chmod 700 /boot /etc/{iptables,arptables}
nano /etc/securetty
* Comment tty1
nano /etc/iptables/iptables.rules
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p icmp -j REJECT
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
systemctl enable iptables.service
nano /etc/sysctl.conf
* net.ipv4.conf.all.log_martians = 1
* net.ipv4.conf.all.rp_filter = 1
* net.ipv4.icmp_echo_ignore_broadcasts = 1
* net.ipv4.icmp_ignore_bogus_error_responses = 1
=== Snapshot ===
echo `date "+%Y%m%d-%H%M%S"` > /run/btrfs-root/__current/ROOT/SNAPSHOT
echo "Fresh install" >> /run/btrfs-root/__current/ROOT/SNAPSHOT
btrfs subvolume snapshot -r /run/btrfs-root/__current/ROOT /run/btrfs-root/__snapshot/ROOT@`head -n 1 /run/btrfs-root/__current/ROOT/SNAPSHOT`
cd /run/btrfs-root/__snapshot/
ln -s ROOT@`cat /run/btrfs-root/__current/ROOT/SNAPSHOT` fresh-install
rm /run/btrfs-root/__current/ROOT/SNAPSHOT
==== Software Installation ===
* Enable sudo for wheel

This comment has been minimized.

Copy link

CamilleBC commented May 18, 2017

23 mkdir -p /mnt/btrfs/__snapshot
24 mkdir -p /mnt/btrfs/__current

Shouldn't it be:

mkdir -p /mnt/btrfs-root/__snapshot
mkdir -p /mnt/btrfs-root/__current


I'm getting a ERROR: cannot access '/mnt/btrfs-root/__current/root': No such file or directory when trying to use the subvolumes commands.

Sorry, I'm discovering BTRFS !


This comment has been minimized.

Copy link

costis-t commented Jun 1, 2017

Yes, you are right.


This comment has been minimized.

Copy link

18eed commented Jul 1, 2017

I am unsure what I am supposed to do for line 45:

Line 45: copy the partition info for / and mount it on /run/btrfs-root (remember to remove subvol parameter! and add nodev,nosuid,noexec parameters)

Here's mine: /dev/sde1 / btrfs rw,nodev,relatime,space_cache,subvolid=257,subvol=/__current/root,subvol=__current/root 0 0

What would I do based on that line?

thanks for helping is newbie!


This comment has been minimized.

Copy link

tostane commented Jan 9, 2019

I am trying this

/dev/sde1 /run/btrfs-root btrfs rw,nodev,relatime,space_cache 0 0

it seemed to work

watch for idv the user name it appears in few places and change it to the name you want.

I got it to reboot and at line 103 i was lost and i tried to update and get a gui but it was not talking to the net. i suspect it needed a driver and that is over my head. I am giving up on arch linux just to complicated to install.

by adding btrfs and btrfs_tools to debian i got it sort of working on debian but using older versions of btrfs I may have to try harder to get suse linux to work it seems to be newer.


This comment has been minimized.

Copy link

plum commented Jun 29, 2020

Very nice, clear. useful

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.