Základní instalace Debianu na BTRFS
Základní instalace OS Debian na BTRFS.
Jak nainstalovat Debian 10 s využitím BTRFS.
Warning
U všech příkazů platí: dvakrát měř, jednou řež!
HW
Systém budeme instalovat na dva identické disky, s využitím Linuxového SW Raidu 1 s BTRFS systémem nad tímto RAIDem.
Note
Nebudeme využívat BTRFS RAID "like" systém, ale starý dobrý SW Raid pomocí mdadm.
Příprava
V instalačním procesu systému musíme nastavit oddíly pro RAID 1. Potom nastavíme souborové systémy a přípojné body pro tyto oddíly.
- Vytvoříme první primární oddíl na začátku disku ve velikosti 500MB jako fyzický svazek pro RAID (využije se pro boot, EXT2).
- Vytvoříme drudý primární oddíl na začátku disku ve velikosti 95% (nebo 100% - dle uvážení) jako fyzický svazek pro RAID (využije se na zbytek systému, BTRFS)
První RAID svazek zformátujeme jako ext2, připojený k /boot a dáme mu název BOOT. Druhý RAID svazek zformátujeme jako BTRFS žurnálovací systém, připojený k / a dáme mu název SYSTEM.
Note
Jako příznak nastavíme u obou oddílů noatime.
Rozložení disku by mělo vypadat nějak takto:

Note
Nebudeme vytvořet žádný oddíl pro SWAP, protože použijeme ZRAM swapping - nastavíme to později.

Dokončíme instalaci základního systému, a nainstalujeme Grub na první disky. Nerestartujeme v tuto chvíli!, ale vrátíme se v instalaci do příkazové řádky a nainstalujeme Grub na druhý disk.
Rozložení disku
Proces vytvoření je celkem snadný:
#!/bin/bash # 1. Mount the disk mount /dev/md1 /mnt # 2. Create snapshot of the current root / as a subvolume btrfs subvolume snapshot /mnt /mnt/@root # Create other subvolumes for: # * variable files btrfs subvolume create /mnt/@var # * home directories btrfs subvolume create /mnt/@home # * lxc containers btrfs subvolume create /mnt/@lxc # * postgresql database btrfs subvolume create /mnt/@database # * tmp btrfs subvolume create /mnt/@tmp # * snapshots btrfs subvolume create /mnt/@snapshots
Kontrola, zda jsou poddíly vytvořeny:
# btrfs subvolume list /mnt
Příkaz by měl vypsat něco jako toto:
ID 259 gen 3522 top level 5 path @root ID 260 gen 3523 top level 5 path @var ID 261 gen 3524 top level 5 path @home ID 262 gen 3525 top level 5 path @lxc ID 263 gen 3526 top level 5 path @database ID 264 gen 3527 top level 5 path @mail ID 264 gen 3528 top level 5 path @tmp ID 265 gen 3529 top level 5 path @snapshots
Note
Pododdíl tmp byl vytvořen pro to, aby dočasné soubory nebyly součástí snapshotů @root pododdílu. Snapshoty @tmp pododdílu se nebudeme nikdy vytvářet, protože všechny soubory s adresáři tmp jsou dočasné.
Editace fstab
Upravíme soubor /mnt/@root/etc/fstab a změníme takto:
# /etc/fstab: static file system information. # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda1 during installation LABEL=SYSTEM / btrfs subvol=@root,noatime,defaults 0 0 LABEL=SYSTEM /var btrfs subvol=@var,noatime,defaults 0 0 LABEL=SYSTEM /home btrfs subvol=@home,noatime,defaults 0 0 LABEL=SYSTEM /lxc btrfs subvol=@lxc,noatime,defaults 0 0 LABEL=SYSTEM /database btrfs subvol=@database,noatime,defaults 0 0 LABEL=SYSTEM /tmp btrfs subvol=@tmp,noatime,defaults 0 0 LABEL=SYSTEM /.snapshots btrfs subvol=@snapshots,noatime,defaults 0 0 # Boot partition LABEL=BOOT /boot ext2 noatime,defaults 0 2
Aktualizace Grubu
Upravíme /mnt/@root/etc/default/grub a změníme:
# Add rootflags: GRUB_CMDLINE_LINUX_DEFAULT="quiet rootflags=subvol=@root"
Attention!
Pozor! Upravujeme GRUB ve vytvořeném snapshotu, který přestane být identický s /etc/default/grub, proto se musíme chrootnout - viz níže!
Přesun adresářů na nové místo
#!/bin/bash cd / # move everything to new locations mv home/* @home mv var/* @var # prepare directories which will be used as mounting points mkdir -p /mnt/@root/{lxc,database,.snapshots} # We need to update tmp permissions: chmod 1777 /mnt/@root/tmp # prepare the chroot: for i in /boot /dev /dev/pts /proc /sys /run; do mount --bind $i /mnt/@root/$i; done # chroot chroot /mnt/@root mount / update-grub # install grub to both disks grub-install /dev/sda grub-install /dev/sdb
Nyní restartujeme, systém by měl nabootovat do @root pododdílu. Oveříme to pomocí:
mount
Ve výpisu připojených oddílů by měl být kořenový / připojen z @root pododdílu. Ostatní oddíly také.
Úklid
Warning
Pozor! Pokud není všechno v tomto kroku ok, nepokračuj!
Smažeme starou hierarchii, který byla vytvořena během úvodní instalace systému:
#!/bin/bash # Cleanup! # Execute only if everything is ok! mount /dev/md1 /mnt cd /mnt # remove all except our subvolumes ls -1 . | egrep -v '@' | xargs echo # list one by one, inverse match @, execute rm -rf ls -1 . | egrep -v '@' | xargs rm -rf umount /mnt
# check filesystem
btrfs filesystem df /
Data, single: total=1.53GiB, used=811.14MiB System, single: total=4.00MiB, used=16.00KiB Metadata, single: total=264.00MiB, used=30.06MiB GlobalReserve, single: total=16.00MiB, used=0.00B
UEFI
Co když ale používám UEFI a legacy mód nemám dostupný nebo ho nechci použít?
Rozdělení disků
Disky rozdělím stejně, jenon na každém disku vytvořím jako první UEFI oddíl ve formátu FAT32. Něco jako:

Z principu jak UEFI funguje, nemůžu použít jednoduché řešení s RAID1, ale musím data kopírovat ručně na oba disky. Jak to ale udělat aby se to nepokazilo? Na to jsem nepřišel a raději jedu v legacy módu .)
Zdroje
- https://www.funtoo.org/BTRFS_Fun#Playing_with_subvolumes_and_snapshots
- https://phocean.net/2016/03/20/a-journey-with-btrfs.html
- https://www.vandorp.biz/2017/08/debian-installer-adventures/
- http://www.abclinuxu.cz/blog/kenyho_stesky/2014/1/btrfs-v-modu-raid1-jako-korenovy-fs
- http://www.beginninglinux.com/btrfs
- https://rootco.de/2018-01-19-opensuse-btrfs-subvolumes/
- https://outflux.net/blog/archives/2018/04/19/uefi-booting-and-raid1/
- https://wiki.debian.org/UEFI