Wiele systemów na jednej partycji, czyli sztuczki z BTRFS

Jedną z wielu ciekawostek systemu BTRFS jest obsługa “podwoluminów”, które mogą być używane w sposób całkowicie niezależny od reszty systemu plików — mechanizm przypomina bardzo typowy podział dysku na partycje, zdejmując jednak z użytkownika problematykę związaną ze złym rozłożeniem rozmiaru poszczególnych partycji i uciążliwą, często niemożliwą do wykonania podczas działania systemu modyfikacją układu.

Idąc dalej możemy nawet zrezygnować z tworzenia układu partycji i stworzyć dysk który jest w pełni zagospodarowany za pomocą BTRFS. Nie ma problemu z wystartowaniem komputera z takiego dysku — zarówno GRUB jak i Syslinux uruchomi się bez zbytnich kombinacji. Ale czy likwidując tablicę partycji musimy się ograniczać do jednej dystrybucji GNU/Linux? Niekoniecznie…

Proszę nie traktować poniższych instrukcji jako poradnika krok po kroku, a jedynie informacji o kluczowych punktach przygotowania dysku i systemów.

System plików

Przydało by się mieć ten system plików i móc go używać:

1
2
3
mkfs.btrfs /dev/sda
mount -o autodefrag,compress=lzo /dev/sda /mnt
cd /mnt

Niezbędna nam konfiguracja woluminów — zakładając, że mamy zamiar instalować dystrybucje Arch Linux oraz Gentoo:

1
for x in boot archlinux gentoo; do btrfs subvolume create ./$x; done

Bootloader

Kolejnym krokiem jest instalacja bootloadera. Z powodu użycia kompresji Syslinux nie będzie potrafił się uruchomić, tak więc zostaje nam GRUB2.

1
2
grub-install /dev/sda
vim ./boot/grub/grub.cfg

A oto i przykładowa konfiguracja:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
terminal_input console
terminal_output console
set timeout_style=menu
set timeout=5
insmod gzio
insmod btrfs
set root='hd0'
search --no-floppy --fs-uuid --set=root 99614c42-fdef-438a-aa70-d5d35d1c3e35

menuentry 'Arch Linux' {
    echo    'Loading Linux...'
    linux   /archlinux/boot/vmlinuz-linux root=UUID=99614c42-fdef-438a-aa70-d5d35d1c3e35 rootflags=rw,autodefrag,compress=lzo,subvol=archlinux
    echo    'Loading initial ramdisk ...'
    initrd  /archlinux/boot/initramfs-linux.img
}

menuentry 'Gentoo' {
    echo  'Loading Linux...'
    linux /gentoo/boot/kernel-3.16.3 root=UUID=99614c42-fdef-438a-aa70-d5d35d1c3e35 rootflags=rw,autodefrag,compress=lzo,subvol=gentoo
}

menuentry 'Memtest86+' {
    linux16 /boot/memtest
}

menuentry "iPXE" {
    linux16 /boot/ipxe autoboot
}

Systemy operacyjne

Kolejnym krokiem jest właściwa instalacja systemów w poszczególnych woluminach. Pacstrap czy instalacja stage gentoo nie jest kłopotliwa, jednak w przypadku dystrybucji Fedora, bądź innych używających graficznego instalatora niezbędne będzie ręczne zamontowanie naszego dysku z opcją subvol=nazwawoluminu przed rozpoczęciem instalacji plików na dysk. Nie zapomnijmy o zaktualizowaniu konfiguracji bootloadera.

Podsumowanie

BTRFS daje nam wiele możliwości których trudno szukać w jakimkolwiek innym (poza ZFS) systemie plików. Warto poznać na własną rękę wszystkie funkcje i zastosować je do własnych, nietypowych problemów.