Практичні нотатки для 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 таймери.