Установка Arch с Btrfs-снапшотами с самого начала
Btrfs-снапшоты: мгновенные копии системы, которые почти не занимают места и позволяют откатиться после неудачного обновления за пару минут. Чтобы получить их с самого начала, достаточно при установке Arch Linux создать файловую систему btrfs, разбить её на подтома и поставить snapper. Ниже полная последовательность команд: от разметки до первого автоматического снапшота.
Зачем btrfs-снапшоты при установке
Снапшот: не копия файлов, а «слепок» состояния файловой системы. Btrfs работает по принципу copy-on-write: пока данные не меняются, снапшот и оригинал ссылаются на одни и те же блоки. Изменился файл, btrfs записывает новую версию, а старая остаётся в снапшоте. Поэтому сотня снапшотов занимает столько же места, сколько сами изменения.
Что это даёт на практике:
- Откат после
pacman -Syu. Обновился и сломал систему, загрузился в снапшот и вернулся к рабочему состоянию. - Страховка перед экспериментами. Поставил пакет из AUR, сломал конфиг, откатился.
- Сжатие zstd. Btrfs сжимает данные на лету, экономия места на системном разделе: 20–40%.
Снапшоты надо настроить на этапе установки: разбили диск на подтома сразу, откат будет чистым и быстрым. Отложили, придётся переустанавливать или переносить систему.
Как разметить диск под btrfs с подтомами
Разметка как при обычной установке: GPT, ESP на 1 ГБ, корневой раздел. Подробно про выбор схемы в статье «Разметка диска с нуля: GPT vs MBR». Дальше вместо ext4 создаём btrfs:
mkfs.fat -F 32 /dev/sda1
mkfs.btrfs -L arch /dev/sda2
Подтома: не разделы. Раздел один, а внутри него логические «разделы»: @ для корня, @home для домашних папок, @log для журналов, @snapshots для снапшотов. Снапшот корня не захватывает /home и /var/log: при откате данные и логи остаются нетронутыми.
Как настроить subvol=@, @home, @snapshots, @log
Монтируем раздел без опций и создаём подтома:
mount /dev/sda2 /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@log
btrfs subvolume create /mnt/@snapshots
umount /mnt
Теперь монтируем каждый подтом в свою точку. Опции compress=zstd,noatime задаём один раз, они применяются ко всей файловой системе:
mount -o compress=zstd,noatime,subvol=@ /dev/sda2 /mnt
mount --mkdir -o subvol=@home /dev/sda2 /mnt/home
mount --mkdir -o subvol=@log /dev/sda2 /mnt/var/log
mount --mkdir -o subvol=@snapshots /dev/sda2 /mnt/.snapshots
mount --mkdir /dev/sda1 /mnt/boot
ESP монтируется в /boot как обычно, он вне btrfs, и это нормально. Дальше установка:
pacstrap -K /mnt base linux linux-firmware btrfs-progs snapper snap-pac grub-btrfs grub efibootmgr
genfstab -U /mnt >> /mnt/etc/fstab
genfstab сам подхватит опции subvol=@ и compress=zstd из текущих монтирований. Проверь /mnt/etc/fstab: каждая строка btrfs должна содержать subvol=/@ или subvol=/@home. Если где-то subvolid вместо пути, замени на путь: при откате ID подтома меняется, а путь остаётся.
Для одного btrfs-раздела хуки в mkinitcpio не нужны: btrfs хук только для пулов из нескольких устройств, а GRUB сам передаст ядру rootflags=subvol=@. Для надёжности можно добавить btrfs в MODULES в mkinitcpio.conf: ArchWiki рекомендует, хотя на практике это не обязательно. Дальше chroot, загрузчик, locale: всё как в пошаговом руководстве по установке Arch 2026.
Как поставить snapper и настроить снапшоты
После первой загрузки создаём конфигурацию snapper для корня:
sudo snapper -c root create-config /
Snapper создаст подтом /.snapshots внутри @: он не нужен, у нас уже есть @snapshots. Удаляем и монтируем наш:
sudo btrfs subvolume delete /.snapshots
sudo mkdir /.snapshots
sudo mount -o subvol=@snapshots /dev/sda2 /.snapshots
Добавь строку в /etc/fstab, чтобы /.snapshots монтировался при загрузке. Включаем снапшоты по расписанию:
sudo systemctl enable --now snapper-timeline.timer snapper-cleanup.timer
snap-pac уже установлен: он делает pre/post-снапшоты при каждом pacman. Проверить: sudo pacman -Syu, и в списке снапшотов появятся пары до/после обновления.
Чтобы снапшоты появлялись в меню GRUB, включи демон grub-btrfs:
sudo systemctl enable --now grub-btrfsd
В GRUB появится пункт «snapshots»: загрузиться в любой снапшот можно прямо из меню.
Как откатиться
Самый простой путь: загрузиться в снапшот из GRUB и проверить, что система рабочая. Но это read-only состояние: изменения не сохранятся. Для полноценного отката загружаемся с live-USB:
mount /dev/sda2 /mnt
btrfs subvolume list /mnt
Находим нужный снапшот в /mnt/@snapshots/N/snapshot (N, номер). Переименовываем текущий корень и восстанавливаем снапшот:
mv /mnt/@ /mnt/@.broken
btrfs subvolume snapshot /mnt/@snapshots/N/snapshot /mnt/@
Перезагружаемся. Если всё работает, удаляем сломанный корень: btrfs subvolume delete /mnt/@.broken. Данные в /home и логи в /var/log не тронуты: они в своих подтомах.
Частые вопросы
Подтома: то же самое, что разделы?
Нет. Раздел: часть диска с собственной файловой системой. Подтом: именованное пространство внутри одной btrfs-файловой системы. Разделы нельзя быстро «откатить», подтома можно, через снапшоты.
Сколько места съедают снапшоты?
Почти ничего, пока данные не меняются. Снапшот хранит только разницу между состояниями. Десятки снапшотов на десктопе: обычно единицы гигабайт.
Нужен ли отдельный раздел под /home?
Нет. При схеме с подтомами /home живёт в @home внутри того же раздела. Откат корня не трогает домашние файлы: это и есть главный плюс.
Что делать, если корневой раздел заполнился?
Сначала почисти снапшоты: sudo snapper -c root list и sudo snapper -c root delete N. Потом pacman-кэш. Про переполнение корня в статье «Корневой раздел заполняется».
Заключение
Btrfs-снапшоты с самого начала: дешёвая страховка, которая окупается при первом же сломанном обновлении. Схема простая: один раздел btrfs, подтома @, @home, @log, @snapshots, snapper с snap-pac для автоматических снапшотов и grub-btrfs для загрузки в них. Настроил один раз, и откат системы занимает минуты, а не переустановку на полдня.
Полезные ресурсы
- Btrfs (ArchWiki): подтома, сжатие, снапшоты, известные проблемы
- Snapper (ArchWiki): конфигурации, расписания, восстановление
- Установка Arch с LVM. Сравнение: LVM-снапшоты против Btrfs
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии