Btrfs

Jakiś czas temu kupiłem dysk z przeznaczeniem tylko na dane. I zostało mi sporo wolnego miejsca na dysku systemowym. Akurat to nie jest problem, bo pewnie za jakiś czas się przyda, ale problemem zaczęło być miejsce dostępne na /rootfs mojego Gentoo. Z czasem mam coraz więcej aplikacji i po prostu zaczynam się obawiać, że któregoś razu mi braknie miejsca. I tu przechodzimy do akcji pod kryptonimem „operacja dysk”.

Zastanawiałem się jak podzielić dysk i doszedłem do wniosku, że trzymanie się sztywnych partycji nie ma sensu, bo i po co się ograniczać niepotrzebnie ;) Po szybkiej analizie możliwości (LVM czy Btrfs) wybrałem migrację niemal całego dysku na Btrfs. Czy to dobry wybór? Czas pokaże. Przekonały mnie po prostu subvolumeny (i możliwość robienia snapshotów tychże).

No dobra. Wiem na co chcę się przenieść, teraz trzeba wybrać sposób, by tego dokonać. Wersja „przeinstaluję system” jest bezsensowna, bo po co orać sprawnie działający system, który ma się dobrze. W takim razie trzeba go przenieść. To samo z danymi na partycji /home. Pierwszy pomysł – przenieść gdzieś aktualny system i go uruchomić i zająć się resztą – bezsensu. Grml? Nawet pisałem jakiś czas temu jak go uruchomić z ISO z poziomu GRUBa. Tylko jeden mały problem – ma stare btrfs-progs. Szybko szukając czegoś innego trafiłem na SystemRescueCD. Plusy? Oparte na Gentoo, ma nowe btrfs-progs, na wiki Gentoo jest napisane jak uruchomić ISO z poziomu GRUB2. No to do dzieła!

menuentry "Sysrescd" {
  set      iso=/ISOs/OS/Linux/systemrescuecd-x86-4.0.0.iso
  loopback loop (hd2,1)/${iso}
  linux    (loop)/isolinux/rescue64 nomodeset vga=791 docache setkmap=pl isoloop=${iso}
  initrd   (loop)/isolinux/initram.igz
}

Gdzie iso to ścieżka do pliku na partycji. Nie można oczywiście zapomnieć o jej wskazaniu w opcji loopback – (hd2,1) oznacza pierwszą partycję trzeciego dysku (mała uwaga – nie musi się zgadzać z kolejnością dysków widzianą przez system).

Proces migracji? Nic szczególnego. Backup rootfs, backup /home, usunięcie partycji, utworzenie jednej dużej z btrfs jako system plików. Następnie stworzenie subvolumenów – dla systemu i home, przerzucenie danych do subvolumenów. I na koniec zostaje tylko poprawka w /etc/fstab:

/dev/sda2    /    btrfs     rw,subvol=gentoo,compress=lzo,space_cache    1 2
/dev/sda2    /home btrfs    subvol=home,compress=lzo,space_cache    0 0

Oraz poprawka w GRUB2:

linux  /gentoo-3.13.0 quiet rootfstype=btrfs root=/dev/sda2 rootflags=subvol=gentoo

Po reboocie system wstał normalnie. Nie będę się wypowiadał czy szybciej czy wolniej, bo to i tak by były subiektywne opinie. Zostało już tylko zobaczyć jak to się wszystko będzie sprawowało na dłuższą metę.