Cloud Boxi

Снимки Btrfs: откат за минуту вместо вечера с бэкапом

Чаще всего файлы теряются не из-за сломанного диска, а из-за случайного удаления. От этого защищают снимки файловой системы, и настроить их можно за вечер.

Я выбрал Btrfs по двум причинам: контрольные суммы данных и дешёвые снимки. Контрольные суммы показывают, что файл испортился при чтении, а зеркало позволяет взять целую копию со второго диска. Снимки занимают место только под изменившиеся данные, поэтому их можно делать хоть каждый час.

Зеркало из двух дисков

Создаём файловую систему сразу на двух дисках с зеркалированием и данных, и метаданных:

sudo mkfs.btrfs -L data -d raid1 -m raid1 /dev/sdb /dev/sdc
sudo mount -o compress=zstd:1,noatime LABEL=data /mnt/pool

Сжатие zstd:1 почти не нагружает процессор, а уже сжатые фотографии и видео Btrfs определяет сам и пропускает. На документах и архивах выигрыш заметный.

Подтома

Снимок можно сделать только с подтома, поэтому данные должны лежать в нём, а не в корне файловой системы:

sudo btrfs subvolume create /mnt/pool/data
sudo btrfs subvolume create /mnt/pool/snapshots

У меня они смонтированы как /srv/data и /srv/.snapshots, отдельными строками в /etc/fstab с опцией subvol=.

Снимок каждый час

Снимок только для чтения создаётся одной командой и занимает меньше секунды:

sudo btrfs subvolume snapshot -r /srv/data /srv/.snapshots/data-2026-03-01_1400

Скрипт btrfs-snapshot.sh делает это по таймеру и удаляет всё, кроме последних 48 снимков. Двух суток мне хватает: обычно я замечаю пропажу файла в тот же день, а всё более старое есть в бэкапе.

Как вернуть файл

Снимок выглядит как обычная папка, поэтому файл достаточно скопировать обратно:

ls /srv/.snapshots/
cp -a /srv/.snapshots/data-2026-03-01_1400/docs/договор.pdf /srv/data/docs/

Никакого восстановления из бэкапа, никакой распаковки. Один такой случай окупает всю настройку.

Обслуживание

Раз в месяц запускаю проверку всех данных. На двух дисках по 8 ТБ она идёт несколько часов, но сервером при этом можно пользоваться:

sudo btrfs scrub start /srv/data
sudo btrfs scrub status /srv/data
sudo btrfs device stats /srv/data

Если в device stats появились ненулевые счётчики ошибок, пора смотреть SMART этого диска и готовить замену.

Снимки не бэкап. Они лежат на тех же дисках, поэтому пожар, скачок напряжения или ошибка файловой системы заберут их вместе с данными. Для этого нужна отдельная копия.