Btrfs / Copy‑on‑Write / Subvolume — стислий конспект

← Головна

Практичні нотатки для Debian: як використати CoW, підтоми та знімки.

🧩 CoW
📦 Subvolumes
🕒 Snapshots
🔐 LUKS
🧰 Scrub/Defrag

Copy‑on‑Write (CoW)

Замість того, щоб перезаписувати старі дані новими, Btrfs зберігає їх окремо. Це як створювати нову версію документа замість редагування старого.

Технічно: при зміні файлу нові дані записуються в нові блоки на диску, а метадані оновлюються атомарно — вся операція або завершується повністю, або не відбувається взагалі. Старі блоки залишаються доступними доки на них є посилання (знімки).

Що це дає:

  • Миттєві знімки — можна за секунду «сфотографувати» стан всієї системи. Не потрібно копіювати гігабайти файлів.
  • Відкат системи — зламалося після оновлення? Повертаєшся до попереднього знімка за хвилину.
  • Захист від збоїв — якщо світло вимкнули під час запису, старі дані залишаються цілими. Файли не пошкоджуються.
  • Перевірка цілісності — система автоматично виявляє пошкоджені файли (контрольні суми для всього).

Btrfs коротко

  • Сучасна CoW‑файлова система з контрольними сумами.
  • Підтримує підтоми (subvolumes), миттєві знімки, онлайн‑масштабування, компресію.
  • Ідеально для швидких відкатів, бекапів та перевірки цілісності.

Subvolume (підтом)

Логічний «корінь» у межах Btrfs. Можна монтувати окремо й робити знімки незалежно. Типово: @ (root), @home, додатково за потреби @var, @log.

Швидкий старт

sudo mkfs.btrfs -L rootfs /dev/nvme0n1p2 sudo mount /dev/nvme0n1p2 /mnt sudo btrfs subvolume create /mnt/@ sudo btrfs subvolume create /mnt/@home sudo umount /mnt

/etc/fstab (приклад)

UUID=<uuid> / btrfs subvol=@,compress=zstd:3,noatime,ssd,discard=async 0 0 UUID=<uuid> /home btrfs subvol=@home,compress=zstd:3,noatime,ssd,discard=async 0 0

Знімки та відкат

# RO‑знімок (миттєво) sudo btrfs subvolume snapshot -r /@ /@_snap_$(date +%F) # Відкат із Live/іншого root sudo btrfs subvolume snapshot /@_snap_2025-10-24 /@_rollback

Реплікація / бекап

# Повний прийом на сервері sudo btrfs send /mnt/@_snap_NEW | ssh backup 'btrfs receive /btrfs_backups/host' # Інкремент від попереднього RO‑знімка sudo btrfs send -p /mnt/@_snap_OLD /mnt/@_snap_NEW | \ ssh backup 'btrfs receive /btrfs_backups/host'

Обслуговування

# Перевірка цілісності (раз на місяць) sudo btrfs scrub start -Bd / # Дефрагментація з компресією sudo btrfs filesystem defragment -r -czstd /home/anton

Квоти / ліміти

sudo btrfs quota enable / sudo btrfs qgroup show -r / sudo btrfs qgroup limit 200G /home

Діагностика

sudo btrfs filesystem df / sudo btrfs filesystem usage -T / sudo btrfs subvolume list -t / sudo btrfs device stats / sudo btrfs check --readonly /dev/nvme0n1p2

Нотатки для Debian

  • Окремі підтоми для /, /home; за бажанням /var, /log, /cache.
  • Для VM/БД можна вимкнути CoW для директорії: mkdir /vm && chattr +C /vm.
  • Повнодискове шифрування — через LUKS під Btrfs.
  • Автознімки: snapper, timeshift або свої скрипти + systemd таймери.