Article

Table of Contents
Theme:
Was this article helpful?

1  out of  1 found this helpful

Try Vultr Today with

$50 Free on Us!

Want to contribute?

You could earn up to $600 by adding new articles.

Install Arch Linux With Btrfs Snapshotting

Last Updated: Thu, Mar 9, 2017
Arch Linux Guides System Admin

Preface

Arch Linux is a general-purpose distribution well-known for its cutting-edge technology and flexible configuration. With Btrfs snapshots, we can take the advantage of its fast-pace while being confident of the system's stability. Let's start.

Prerequisites

  • A newly-created Vultr instance.

  • Some free time and patience.

Preparations

You can choose the Arch Linux ISO from the ISO library when creating the instance. If not, you can load that in the machine's settings. As the time of writing the newest (2017.01.01) ISO is available in the library. If that ISO is outdated, I recommend downloading it again.

After the machine starts, click View Console and boot the system up. We need to set up a root password for the environment so that we can access it from our working computer:

passwd

systemctl start sshd

Close the VNC window and connect to the machine via ssh:

ssh root@<your host ip here>

Install tmux so that we can keep our session across unstable connections:

pacman -Sy tmux

If the connection accidentally closes during the installation, simply ssh back to the machine and run:

tmux attach

Installation

First things first, let's partition the disk.

lsblk

mkfs.btrfs -m single -L arch /dev/vda

mount -o compress=lzo /dev/vda /mnt

Next comes the tricky part: creating subvolumes.

cd /mnt

btrfs su cr @

btrfs su cr @boot

btrfs su cr @home

btrfs su cr @log

btrfs su cr @pkg

btrfs su cr @srv

btrfs su cr @tmp

Then, mount the subvolumes.

cd /

umount /mnt

mount -o compress=lzo,subvol=@ /dev/vda /mnt

cd /mnt

mkdir -p {boot,home,srv,var/{log,cache/pacman/pkg,tmp}}

mount -o compress=lzo,subvol=@boot /dev/vda boot

mount -o compress=lzo,subvol=@home /dev/vda home

mount -o compress=lzo,subvol=@log /dev/vda var/log

mount -o compress=lzo,subvol=@pkg /dev/vda var/cache/pacman/pkg

mount -o compress=lzo,subvol=@srv /dev/vda srv

mount -o compress=lzo,subvol=@tmp /dev/vda var/tmp

Install the base system.

pacstrap -i /mnt base base-devel snapper vim

Configure the system.

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

arch-chroot /mnt

ln -s /usr/share/zoneinfo/Region/City /etc/localtime # Replace Region/City with your value

hwclock --systohc

vim /etc/locale.gen # Uncomment en_US.UTF-8 UTF-8 line

locale-gen

echo "LANG=en_US.UTF-8" > /etc/locale.conf

pacman -S networkmanager 

echo "your-hostname" > /etc/hostname # Replace your-hostname with your value

vim /etc/hosts # Configure 127.0.0.1 and ::1 lines accordingly

systemctl enable NetworkManager.service

Enable sshd for future remote logins.

vim /etc/ssh/sshd_config # Set PermitRootLogin yes

systemctl enable sshd.service

Note that the best practice is putting your public key into the ~/.ssh/authorized_keys file instead of enabling password login for root.

Configure the initramfs so that it satisfies our need for btrfs.

vim /etc/mkinitcpio.conf

Locate MODULES="..." and add btrfs into the list. Re-generate the initramfs:

mkinitcpio -p linux

Set the root password.

passwd

Install and configure the bootloader.

pacman -S grub

grub-install /dev/vda

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

Reboot and remove the ISO in your machine control panel.

exit

reboot

Connect to the server again (perhaps after a short while; wait until the boot completes). Note that the server fingerprint has changed, so you may need to alter your known_hosts file:

vim ~/.ssh/known_hosts

ssh root@<your host ip here>

Let's configure snapper, which automates the snapshotting procedure.

snapper -c root create-config /

Edit the config and alter TIMELINE_LIMIT_{HOURLY,DAILY,WEEKLY,MONTHLY,YEARLY} according to your needs.

vim /etc/snapper/configs/root

Enable the systemd timers.

systemctl enable snapper-timeline.timer

systemctl start snapper-timeline.timer

systemctl enable snapper-cleanup.timer

systemctl start snapper-cleanup.timer

Job's done!

The configuration of the system is now finished. For more detailed information about how to use snapper, consult the wiki page or snapper(8) for more information. Enjoy your new Arch Linux with btrfs auto-snapshotting system!

Want to contribute?

You could earn up to $600 by adding new articles.