All Projects → Deebble → arch-btrfs-install-guide

Deebble / arch-btrfs-install-guide

Licence: other
Arch Linux installation guide with btrfs and snapper, this guide is based on the information from unicks.eu guide https://www.youtube.com/watch?v=TKdZiCTh3EM, and Arch Linux UEFI step-by-step installation guide https://www.youtube.com/watch?v=dOXYZ8hKdmc from ALU.

Programming Languages

shell
77523 projects
NSIS
403 projects

Projects that are alternatives of or similar to arch-btrfs-install-guide

Dotfiles
Configuration for Arch Linux, sway, kitty, kakoune, zsh and more + scripted installation guide
Stars: ✭ 385 (+1103.13%)
Mutual labels:  archlinux, arch-linux, btrfs, grub
arch-secure-boot
UEFI Secure Boot for Arch Linux + btrfs snapshot recovery
Stars: ✭ 60 (+87.5%)
Mutual labels:  archlinux, snapper, btrfs, btrfs-snapshots
dotfiles
dotfiles of simonvic daily used enviroment
Stars: ✭ 75 (+134.38%)
Mutual labels:  archlinux, arch-linux
Anlinux Resources
Image and Script for LinuxOnAndroid App
Stars: ✭ 135 (+321.88%)
Mutual labels:  archlinux, arch-linux
simplyarch
The blazing fast ⚡ Arch Linux ⚡ installation script that puts you on control 🌟
Stars: ✭ 38 (+18.75%)
Mutual labels:  archlinux, arch-linux
Cylon
A CLI TUI menu driven bash shell script supporting updates, maintenance, backups and system checks for an Arch based Linux distro
Stars: ✭ 121 (+278.13%)
Mutual labels:  archlinux, arch-linux
Anlinux Adfree
AnLinux, Ad free version.
Stars: ✭ 127 (+296.88%)
Mutual labels:  archlinux, arch-linux
Pacback
Advanced Version Control for Arch Linux
Stars: ✭ 146 (+356.25%)
Mutual labels:  archlinux, arch-linux
Aurdroid
Android AUR [Arch Linux user Repository] packages browser
Stars: ✭ 88 (+175%)
Mutual labels:  archlinux, arch-linux
Ugrub
Create an ultimate multiboot USB flash drive with Grub2 bootloader
Stars: ✭ 177 (+453.13%)
Mutual labels:  archlinux, grub
An Idiots Guide To Installing Arch On A Lenovo Carbon X1 Gen 6
so you wanted to install arch huh
Stars: ✭ 165 (+415.63%)
Mutual labels:  archlinux, arch-linux
Image Bootstrap
⛅️ Creates (chroots and) bootable virtual machine images; command line tool (Python 3)
Stars: ✭ 178 (+456.25%)
Mutual labels:  archlinux, arch-linux
Sielo Legacy
An open source browser made with Qt and WebEngine
Stars: ✭ 113 (+253.13%)
Mutual labels:  archlinux, arch-linux
Dotfiles
My bspwm dotfiles. Grab whatever you need! :)
Stars: ✭ 111 (+246.88%)
Mutual labels:  archlinux, arch-linux
Archfi
Arch Linux Fast Installer : tutorial installer
Stars: ✭ 2,156 (+6637.5%)
Mutual labels:  archlinux, arch-linux
Kindd
A kindful dd, written in qt-quick.
Stars: ✭ 93 (+190.63%)
Mutual labels:  archlinux, grub
Archinstall
Arch Linux installer - guided, templates etc.
Stars: ✭ 140 (+337.5%)
Mutual labels:  archlinux, arch-linux
Arch Linux Installer
Arch-Linux-Install-Script/Arch Linux 安装脚本
Stars: ✭ 192 (+500%)
Mutual labels:  archlinux, arch-linux
Mkinitcpio Systemd Tool
Provisioning tool for systemd in initramfs (systemd-tool)
Stars: ✭ 60 (+87.5%)
Mutual labels:  archlinux, btrfs
Jlivecd
Live cd/dvd customization tool
Stars: ✭ 72 (+125%)
Mutual labels:  archlinux, arch-linux

Note: This guide isn't actively maintained and some information might be old

arch-btrfs-install-guide

This is an Arch UEFI installation guide with btrfs and snapper. This guide doesn't contain all the information needed to install Arch. It is meant to be used with the Arch installation guide on the Arch wiki, it only contains the diffrences for installing btrfs and snapper, and some other tips. The btrfs and snapper setup is based on this guide from unicks.eu https://www.youtube.com/watch?v=TKdZiCTh3EM. I recommend watching the video from unicks.eu, watching an Arch Linux installation tutorial. My favorite Arch Linux UEFI installation tutorial was from Average Linux User(https://www.youtube.com/watch?v=dOXYZ8hKdmc)

This guide is meant to be used with the Arch installation guide on the Arch wiki.

Reminders:

Double check what is the drives name you want to install on, it might not be /dev/sda. You need to install the userspace utilities for the different filesystems(xfsprogs, btrfs-progs, dosfstools). You can use ssh to connect to the computer you are installing Arch Linux on, so you can save time by copying the commands.

Ssh

I recommend connecting both of your devices to the same network because it will be much easier to connect with ssh to the computer you are installing Arch on. If you don't know what ssh is and how to connect from a different device https://www.youtube.com/watch?v=qWKK_PNHnnA.

Setting up ssh on the Arch iso is the same regardless of which OS your second computer uses.

Install and enable shh on the Arch ISO:

pacman -Sy --needed openssh
systemctl enable sshd.service

To connect you have to find your ip address:

ip address

It will output something like this: The first one is a loop, and it does not have the ip address.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

This one is ethernet, in this example I am connected to Wi-Fi and ethernet is disabled, so it does not have the ip address. If you are connected with ethernet it will have more things under it like Wi-Fi.

2: enp7s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 98:fa:9b:a0:b4:38 brd ff:ff:ff:ff:ff:ff

The third one is Wi-Fi because it starts with wl(wireless lan) The ip address(in brackets) is after inet.

3: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 50:e0:85:c4:b6:1b brd ff:ff:ff:ff:ff:ff
    inet [192.158.7.113]/24 brd 192.168.8.255 scope global dynamic noprefixroute wlp0s20f3
       valid_lft 62454sec preferred_lft 62454sec
    inet6 fdd4:62da:c89b:4600:9cae:915f:9bd5:b2e5/64 scope global dynamic noprefixroute 
       valid_lft 7078sec preferred_lft 3478sec
    inet6 fq80::cvfc:3bb6:5994:36c4/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Also set a password on the Arch ISO, it is needed to be able to connect.

passwd

Partitioning

The partition layout:

|EFI system partition (FAT32) | Label=EFI | /dev/your_drive1 | Suggested size is 512 MiB
Mountpoint:   /boot/efi  

Btrfs root partition | Label=ROOT | /dev/your_drive2 | Suggested size is 23-32 GiB
Subvolume:      @   @log        @tmp  @pkg                    @snapshots        |@home|
Mountpoint:     /   /var/log    /tmp  /var/cache/pacman/pkg   /.snapshots       |/home|

Opional XFS or ext4 home partition | Label=HOME | /dev/your_drive3 | rest of your free space                                              
Mountpoint:    /home

Optional Linux Swap | Label=Swap | /dev/your_drive4 | 2x times bigger than ram

Check what drives are available with lsblk:

lsblk
NAME        MAJ:MIN RM   SIZE 
sda           8:0    1  29.9G  
└─sda1        8:1    1  29.9G   
your_drive     259:0    0 953.9G  

Usually sda or sdb is your usb drive with the Arch ISO. Probably the biggest drive will be your computers hard drive.

You can also find scripts with the most popular system configurations in the install-scripts directory, I don't recommend executing the scripts, the best way is to copy the commands one-by-one incase you need to change something inbetween the commands.

I think the easiest to use partitioner is cfdisk

# cfdisk -z /dev/your_drive

Formatting

# mkfs.vfat -F 32 -n EFI /dev/your_drive1
# mkfs.btrfs -L ROOT /dev/your_drive2

If you have a separate home partition

# mkfs.xfs -L HOME /dev/your_drive3

Or

# mkfs.ext4 -L HOME /dev/your_drive3

If you have swap

# mkswap -L SWAP /dev/your_drive4

Mounting

mount /dev/your_drive2 /mnt
cd /mkt
btrfs sub cr /mnt/@
btrfs sub cr /mnt/@tmp
btrfs sub cr /mnt/@log
btrfs sub cr /mnt/@pkg
btrfs sub cr /mnt/@snapshots

If you have one partition for root and home

btrfs sub cr /mnt/@home
cd..
umount /mnt
mount -o relatime,space_cache=v2,ssd,compress=lzo,subvol=@ /dev/sda2 /mnt
mkdir -p /mnt/{boot/efi,home,var/log,var/cache/pacman/pkg,btrfs,tmp}
mount -o relatime,space_cache=v2,ssd,compress=lzo,subvol=@log /dev/sda2 /mnt/var/log
mount -o relatime,space_cache=v2,ssd,compress=lzo,subvol=@pkg /dev/sda2 /mnt/var/cache/pacman/pkg/
mount -o relatime,space_cache=v2,ssd,compress=lzo,subvol=@tmp /dev/sda2 /mnt/tmp

If you have one partition for root and home

mount -o relatime,space_cache=v2,ssd,compress=lzo,subvol=@home /dev/sda2 /mnt/home
mount -o relatime,space_cache=v2,ssd,compress=lzo,subvolid=5 /dev/sda2 /mnt/btrfs
mount /dev/your_drive1 /mnt/boot/efi/

If you have separate home partition

mount /dev/your_drive3 /mnt/home/

If you have swap

swapon /dev/your_drive4 

fstab

In the fstab file you should remove the entry with the root partition with the mount point '/', because the entry that is mounted at /btrfs, is the root partition (this is at least how I understood what unicks.eu said)

You need to remove this entry:

/dev/sda2 UUID=3edd5f74-69b7-4d64-b894-aa9f879ddf01
LABEL=ROOT              /               btrfs           rw,relatime,compress=lzo,ssd,space_cache=v2,subvolid=256,subvol=/@,subvol=@  

GRUB

Thes are the commands for installing GRUB used in ALU's tutorial.

pacman --needed -Sy grub efibootmgr
grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot/efi 
grub-mkconfig -o /boot/grub/grub.cfg
mkdir /boot/efi/EFI/BOOT
cp /boot/efi/EFI/GRUB/grubx64.efi /boot/efi/EFI/BOOT/BOOTX64.EFI

To guarantee that GRUB boots, create a startup script (/boot/efi/startup.nsh) for GRUB with these contents(you can change the name):

bcf boot add 1 fs0:\EFI\GRUB\grubx64.efi "GRUB bootloader"
exit

You can now reboot.

/tmp cleanup

This section was definitely not copied from https://github.com/egara/arch-btrfs-installation Because of /tmp is another subvolume mounted as a traditional partition on /fstab, temporary files won't be deleted by default when the system boots. This can cause some problems like preventing insync to start normally for example, because it uses a temporary file called insync1000.sock and if this file already exists, it won't run. In order to clean up /tmp directory on every reboot, add this configuration file /etc/tmpfiles.d/tmp.conf with this content:

# Cleaning up /tmp directory everytime system boots
D! /tmp 1777 root root 0

Snapper

I suggest setting snapper up after you have a working system.

Install the required packages for snapper and btrfs:

pacman -S snapper grub-btrfs

Check your btrfs subvolumes:

btrfs sub list /

They should look something like this:

ID 256 gen 810 top level 5 path @
ID 257 gen 781 top level 5 path @tmp
ID 258 gen 810 top level 5 path @log
ID 259 gen 804 top level 5 path @pkg
ID 260 gen 10 top level 5 path @snapshots
ID 264 gen 34 top level 256 path var/lib/portables
ID 265 gen 35 top level 256 path var/lib/machines

Create a snapper config for root:

snapper -c root create-config /

Check your btrfs subvolumes:

btrfs sub list /

Now you have a new subvolume for snapshot but there is a problem because the subvolume is below the root subvolume, if you rollback with this configuration /.snapshots will disappear because it depends on the root subvolume.

ID 256 gen 810 top level 5 path @
ID 257 gen 781 top level 5 path @tmp
ID 258 gen 810 top level 5 path @log
ID 259 gen 804 top level 5 path @pkg
ID 260 gen 10 top level 5 path @snapshots
ID 264 gen 34 top level 256 path var/lib/portables
ID 265 gen 35 top level 256 path var/lib/machines
ID 267 gen 87 top level 257 path /.snapshots

To fix it you have to delete the /.snapshots subvolume and make the /.snapshots directory again

btrfs sub del /.snapshots/
mkdir /.snapshots

Now you have to mount the /.snapshots directory in /etc/fstab

nano -w /etc/fstab

Add this line to /etc/fstab(remember to put your drive instead of the example in the beginning)

/dev/your_drive2 	/.snapshots  		btrfs     	rw,relatime,compress=lzo,ssd,space_cache=v2,subvol=@snapshots	0 0

Mount /.snapshots:

mount /.snapshots/

Check if you have done it correctly with df -Th, it should look something like this:

df -Th 
Filesystem     Type      Size  Used Avail Use% Mounted on
dev            devtmpfs  3.9G     0  3.9G   0% /dev
run            tmpfs     3.9G  1.5M  3.9G   1% /run
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /
tmpfs          tmpfs     3.9G   70M  3.8G   2% /dev/shm
tmpfs          tmpfs     4.0M     0  4.0M   0% /sys/fs/cgroup
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /btrfs
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /tmp
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /var/cache/pacman/pkg
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /var/log
/dev/nvme0n1p1 vfat      511M  564K  511M   1% /boot/efi
/dev/nvme0n1p3 xfs       921G  144G  778G  16% /home
tmpfs          tmpfs     784M   72K  784M   1% /run/user/1000
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /.snapshots

To enable that snapshots show up in GRUB Enable grub-btrfs.path to refresh the shapshot list

systemctl enable grub-btrfs.path

And enable the snapshot list in the GRUB config

nano /etc/default/grub

Set this option:

GRUB_DISABLE_RECOVERY=false

You can exit, now you only have to regenerate the config

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

Snapper config

To enable pre-post pacman snapshots install snap-pac

pacman -S snap-pac

To enable boot snapshots enable snapper-boot.timer

systemctl enable snapper-boot.timer

You can also enable hourly snapshots and a limit to the number of shanpshots you want or other options in the snapper config

nano /etc/snapper/configs/root

To enable hourly snapshots and snapshot cleanup, you have to enable cronie

pacman -S --needed cronie
systemctl enable cron.service
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].