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.