Tiks izdzēsta lapa "Btrfs Snapper Гайд". Pārliecinieties, ka patiešām to vēlaties.
Этот гайд — дополнение к официальному руководству по установке Arch Linux. Мы пропустим совсем базовые вещи, но подробно остановимся на создании отказоустойчивой системы с использованием файловой системы Btrfs, автоматических снимков Snapper и их интеграции в меню загрузки GRUB.
В отличие от ext4, Btrfs оперирует подтомами (subvolumes). Вместо жесткого разбиения диска на разделы для /, /home и т.д., мы создаем один раздел, а внутри него — логические подтома.
/ и /home делят общее свободное место.Мы используем подход с монтированием ESP (EFI System Partition) в /efi.
/boot остается обычной папкой на корневом подтоме Btrfs./boot. Это значит, что ядро (vmlinuz) и initramfs тоже попадают в снимок.Мы будем использовать "плоскую" разметку (flat layout), чтобы упростить откаты:
@ — Корень системы (/). Снимки включены.@home — Данные пользователя (/home). Снимки отключены (чтобы не потерять личные файлы при откате системы).@snapshots — Хранилище снимков (/.snapshots).@logs, @cache — Журналы и кэш (/var/log, /var/cache). Исключены из снимков, чтобы не засорять их и не терять логи ошибок при откате.@swap — Для файла подкачки.@srv — Для данных серверов (опционально).Настройка кириллицы в консоли установщика (опционально, но удобно):
loadkeys ru
setfont cyr-sun16
# Для экранов HiDPI (4k):
# setfont ter-c32b
Переключение раскладки: Ctrl+Shift.
Убедитесь, что загружены в UEFI (вывод должен быть 64):
cat /sys/firmware/efi/fw_platform_size
# Проверка интерфейсов
ip a
# Wi-Fi (если нужно)
iwctl
# Проверка соединения
ping archlinux.org
# Синхронизация времени (важно для HTTPS)
timedatectl set-ntp true
timedatectl status
Определим диск (например, /dev/nvme0n1 или /dev/sda):
lsblk
Допустим, наш диск — /dev/sda. Запускаем утилиту:
fdisk /dev/sda
Последовательность команд внутри fdisk для чистой установки:
g — Создать новую таблицу разделов GPT.n (новый раздел) -> Enter (номер 1) -> Enter (первый сектор) -> +512M (размер).t (тип) -> 1 (EFI System).n -> Enter (номер 2) -> Enter (первый сектор) -> Enter (всё оставшееся место).t -> 23 (Linux Filesystem).w — Записать изменения и выйти.В итоге имеем:
/dev/sda1 — EFI (512 МБ)/dev/sda2 — Linux Root (всё остальное)# EFI раздел в FAT32
mkfs.fat -F 32 /dev/sda1
# Корневой раздел в Btrfs (Force для перезаписи)
mkfs.btrfs -f /dev/sda2
Сначала монтируем корень во временную папку:
mount -o compress=zstd:1 /dev/sda2 /mnt
# Создаем структуру
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@srv
btrfs subvolume create /mnt/@logs
btrfs subvolume create /mnt/@cache
btrfs subvolume create /mnt/@snapshots
btrfs subvolume create /mnt/@swap
# Размонтируем для чистовой сборки
umount /mnt
Монтируем подтома с оптимальными опциями (noatime, compress=zstd:3).
# 1. Монтируем корень (@)
mount -o defaults,noatime,compress=zstd:3,subvol=@ /dev/sda2 /mnt
# 2. Создаем точки монтирования
mkdir -p /mnt/{home,srv,var/log,var/cache,.snapshots,efi,swap}
# 3. Монтируем подтома данных
mount -o defaults,noatime,compress=zstd:3,subvol=@home /dev/sda2 /mnt/home
mount -o defaults,noatime,compress=zstd:3,subvol=@srv /dev/sda2 /mnt/srv
mount -o defaults,noatime,compress=zstd:3,subvol=@snapshots /dev/sda2 /mnt/.snapshots
# 4. Монтируем тома, где сжатие не нужно (логи, кэш, swap)
mount -o defaults,noatime,subvol=@logs /dev/sda2 /mnt/var/log
mount -o defaults,noatime,subvol=@cache /dev/sda2 /mnt/var/cache
mount -o defaults,noatime,subvol=@swap /dev/sda2 /mnt/swap
# 5. Монтируем EFI раздел
mount /dev/sda1 /mnt/efi
В Btrfs для этого есть нативная команда (избегайте dd):
btrfs filesystem mkswapfile --size 4g --uuid clear /mnt/swap/swapfile
swapon /mnt/swap/swapfile
Устанавливаем базовую систему и необходимые инструменты для Btrfs и сети. > Не забудьте добавить intel-ucode или amd-ucode в зависимости от процессора.
pacstrap -K /mnt base linux linux-firmware btrfs-progs grub efibootmgr snapper grub-btrfs snap-pac inotify-tools vim networkmanager iwd openssh
Генерируем файл монтирования.
genfstab -U /mnt >> /mnt/etc/fstab
# Добавляем swap (genfstab может его пропустить)
echo "/swap/swapfile none swap defaults 0 0" >> /mnt/etc/fstab
Важно: Проверьте файл /mnt/etc/fstab. Убедитесь, что у всех Btrfs разделов (кроме EFI и swap) прописаны subvol=@… и compress=zstd:3 (там, где это нужно).
Входим в новую систему:
arch-chroot /mnt
(Здесь вы выполняете стандартные настройки: Timezone, Locale, Hostname, Passwd, User. Мы их пропускаем согласно задаче).
Настраиваем загрузчик так, чтобы он видел снимки.
Установка GRUB:
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=Arch
Настройка конфига: Откройте /etc/default/grub и раскомментируйте/добавьте строку, чтобы включить загрузку со снимков:
GRUB_BTRFS_SNAPSHOT_BOOT=true
Совет: Если у вас шифрование (LUKS), здесь также нужно добавить параметры ядра в GRUB_CMDLINE_LINUX.
Генерация меню:
grub-mkconfig -o /boot/grub/grub.cfg
Вывод должен содержать строку:
Found linux image…иFound initrd image…
Включаем сервисы, которые будут создавать снимки при установке пакетов и обновлять GRUB.
systemctl enable NetworkManager
systemctl enable sshd
# Автоматическое обновление меню GRUB при появлении новых снимков
systemctl enable grub-btrfsd.service
# Таймеры очистки старых снимков
systemctl enable snapper-timeline.timer
systemctl enable snapper-cleanup.timer
Выходим из chroot и перезагружаемся:
exit
umount -R /mnt
reboot
Почему после перезагрузки? Команда создания конфига Snapper конфликтует с уже существующей и смонтированной папкой .snapshots. Проще всего решить это в рабочей системе.
Войдите под root.
Отмонтируем .snapshots:
umount /.snapshots
Удаляем папку (она должна быть пустой):
rm -rf /.snapshots
Создаем конфигурацию Snapper для корня:
snapper -c root create-config /
Эта команда создает новую папку
/.snapshotsи подтом внутри неё, но нам нужно вернуть наш подтом@snapshots.
Удаляем подтом, созданный Snapper-ом, и возвращаем наш:
# Удаляем подтом, созданный автоматически
btrfs subvolume delete /.snapshots
# Создаем папку заново
mkdir /.snapshots
# Монтируем наш "правильный" подтом (он подтянется из fstab)
mount -a
# Исправляем права доступа (важно!)
chmod 750 /.snapshots
Настройка политики хранения: По умолчанию Snapper делает снимки каждый час, что может быстро забить диск. Откройте конфиг:
vim /etc/snapper/configs/root
Рекомендуемые изменения:
ALLOW_GROUPS="wheel" — разрешить пользователям группы wheel управлять снимками.TIMELINE_CREATE="no" — отключить почасовые снимки (если хотите делать их только при обновлении pacman).TIMELINE_LIMIT_…, уменьшив их (например, хранить только 5 последних часовых снимков).Теперь ваша система полностью настроена:
snap-pac).snapper rollback.Tiks izdzēsta lapa "Btrfs Snapper Гайд". Pārliecinieties, ka patiešām to vēlaties.