Btrfs na Linuxie — snapshoty, RAID i kompresja
Czym jest Btrfs?
Btrfs (B-tree File System, wymawiane “butter FS”) to nowoczesny system plików typu copy-on-write, wbudowany bezpośrednio w jądro Linux. Rozwijany od 2007 roku, dziś jest domyślnym systemem plików w Fedorze, openSUSE i Steam Deck.
W porównaniu do ext4 oferuje:
- Snapshoty — natychmiastowe kopie systemu plików
- Subwoluminy — logiczne partycje bez repartycjonowania
- Przezroczystą kompresję — oszczędność miejsca w locie
- Sumy kontrolne — ochrona przed cichym uszkodzeniem danych
- Wbudowany RAID — bez potrzeby mdadm czy LVM
W przeciwieństwie do ZFS, Btrfs jest częścią oficjalnego jądra — nie wymaga instalacji dodatkowych modułów.
Subwoluminy
Subwolumin to coś pomiędzy katalogiem a partycją. Wygląda jak zwykły folder, ale ma własne snapshoty, limity i opcje montowania.
# Utworzenie systemu plików Btrfs
sudo mkfs.btrfs /dev/sdb
# Montowanie
sudo mount /dev/sdb /mnt
# Utworzenie subwoluminów
sudo btrfs subvolume create /mnt/@
sudo btrfs subvolume create /mnt/@home
sudo btrfs subvolume create /mnt/@snapshots
# Lista subwoluminów
sudo btrfs subvolume list /mnt
Montowanie subwoluminów
Każdy subwolumin można zamontować osobno:
# W /etc/fstab:
# /dev/sdb / btrfs subvol=@,compress=zstd 0 0
# /dev/sdb /home btrfs subvol=@home,compress=zstd 0 0
sudo mount -o subvol=@ /dev/sdb /
sudo mount -o subvol=@home /dev/sdb /home
Dzięki temu snapshot systemu nie obejmuje katalogu domowego i odwrotnie.
Snapshoty
Snapshoty w Btrfs to migawki subwoluminu. Tworzenie jest natychmiastowe dzięki mechanizmowi copy-on-write — dane nie są kopiowane, dopóki nie zostaną zmienione.
# Snapshot tylko do odczytu (idealny do backupu)
sudo btrfs subvolume snapshot -r /mnt/@ /mnt/@snapshots/@_2026-02-06
# Snapshot do zapisu (np. do testów)
sudo btrfs subvolume snapshot /mnt/@ /mnt/@snapshots/@_test
# Lista snapshotów
sudo btrfs subvolume list -s /mnt
# Usunięcie snapshotu
sudo btrfs subvolume delete /mnt/@snapshots/@_test
Przywracanie ze snapshotu
# Zmień nazwę bieżącego subwoluminu
sudo mv /mnt/@ /mnt/@_broken
# Utwórz zapisywalny snapshot z kopii zapasowej
sudo btrfs subvolume snapshot /mnt/@snapshots/@_2026-02-06 /mnt/@
# Restart — system wraca do stanu ze snapshotu
sudo reboot
Automatyczne snapshoty z Snapper
snapper to narzędzie od SUSE, które automatyzuje snapshoty — tworzy je przed i po aktualizacjach, a stare usuwa według polityki retencji:
# Instalacja
sudo apt install snapper # Debian/Ubuntu
sudo dnf install snapper # Fedora
# Konfiguracja dla głównego subwoluminu
sudo snapper -c root create-config /
# Ręczny snapshot
sudo snapper -c root create --description "before upgrade"
# Lista snapshotów
sudo snapper -c root list
# Porównanie zmian między snapshotami
sudo snapper -c root diff 1..2
Kompresja
Btrfs obsługuje przezroczystą kompresję — pliki są kompresowane w locie przy zapisie i dekompresowane przy odczycie.
# Włączenie kompresji zstd (zalecane)
sudo mount -o compress=zstd /dev/sdb /mnt
# Lub w /etc/fstab:
# /dev/sdb / btrfs compress=zstd 0 0
Dostępne algorytmy:
- zstd — najlepszy balans wydajności i kompresji (zalecany)
- lzo — najszybszy, najsłabsza kompresja
- zlib — najlepsza kompresja, najwolniejszy
# Sprawdzenie współczynnika kompresji
sudo compsize /mnt
# Przykładowy wynik:
# Type Perc Disk Usage Uncompressed
# TOTAL 68% 15G 22G
# zstd 68% 15G 22G
RAID w Btrfs
Btrfs ma wbudowaną obsługę RAID — bez mdadm i LVM:
# RAID1 (mirror) na dwóch dyskach
sudo mkfs.btrfs -m raid1 -d raid1 /dev/sdb /dev/sdc
# RAID10 na czterech dyskach
sudo mkfs.btrfs -m raid10 -d raid10 /dev/sd{b,c,d,e}
# Dodanie dysku do istniejącego systemu plików
sudo btrfs device add /dev/sdd /mnt
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
Uwaga: RAID5/6 w Btrfs ma znane problemy i nie jest zalecany do produkcji. Dla RAID5/6 lepiej użyć ZFS lub mdadm.
Btrfs vs ext4 vs ZFS
| Cecha | ext4 | Btrfs | ZFS |
|---|---|---|---|
| W jądrze | Tak | Tak | Nie (moduł) |
| Copy-on-write | Nie | Tak | Tak |
| Snapshoty | Nie | Tak | Tak |
| Kompresja | Nie | Tak | Tak |
| Sumy kontrolne | Metadane | Dane + metadane | Dane + metadane |
| RAID | Nie (mdadm) | Wbudowany | Wbudowany |
| Wymagania RAM | Niskie | Niskie | Wysokie (8 GB+) |
| Dojrzałość | Bardzo wysoka | Wysoka | Bardzo wysoka |
Kiedy ext4: prosty serwer, laptop, sprawdzona stabilność
Kiedy Btrfs: snapshoty, kompresja, desktop/laptop (Fedora, openSUSE)
Kiedy ZFS: duży storage, serwery NAS, krytyczna integralność danych
Przydatne komendy
# Informacje o systemie plików
sudo btrfs filesystem show
sudo btrfs filesystem df /mnt
sudo btrfs filesystem usage /mnt
# Scrub — weryfikacja integralności danych
sudo btrfs scrub start /mnt
sudo btrfs scrub status /mnt
# Defragmentacja
sudo btrfs filesystem defragment -r /mnt
# Sprawdzenie systemu plików (offline)
sudo btrfs check /dev/sdb
Podsumowanie
Btrfs to solidny wybór dla każdego, kto chce nowoczesny system plików bez instalowania dodatkowych modułów. Snapshoty, kompresja i subwoluminy sprawiają, że codzienne zarządzanie systemem jest wygodniejsze i bezpieczniejsze. Nie bez powodu Fedora, openSUSE i Valve wybrały go jako domyślny system plików.