Снимки Btrfs
Введение
Заголовок раздела «Введение»Что такое снимок Btrfs?
Заголовок раздела «Что такое снимок Btrfs?»Давайте начнём с основ:
Снимки Btrfs являются частью функционала подтомов. Вы можете спросить, что такое подтом? Представьте подтом как отдельную файловую систему внутри файловой системы Btrfs. Это позволяет вам разделять данные на разные части. Именно поэтому, например, в CachyOS у нас есть разные подтома для:
- Корневой файловой системы: (
/) - Домашнего каталога суперпользователя: (
/root) - Домашнего каталога пользователя: (
/home) - Каталогов Var: (
/var/cache,/var/tmp,/var/log) - Каталога Srv: (
/srv)
Имея разные подтома для этих каталогов, мы можем управлять ими независимо, применять разные настройки и, что самое важное, создавать для них снимки.
Именно здесь и рождается снимок. Снимок — это, по сути, копия подтома (по умолчанию для чтения и записи или только для чтения) в определённый момент времени. Это означает, что вы можете зафиксировать состояние вашей файловой системы, включая все файлы и каталоги, на данный момент.
Таким образом, снимки становятся точкой отсчёта во времени. Это значит, что когда целевой файл изменяется по сравнению с данными в снимке, снимок сохраняет исходный файл, а целевой объект создаёт новый файл с изменениями, при этом снимок остаётся неизменным навсегда. Поэтому некоторые пользователи называют снимок «данными, застывшими во времени».
Представьте, что вы делаете фотографию вашей файловой системы в определённый момент, и вы всегда можете вернуться к этой фотографии, когда вам это понадобится.
Одним из ключевых преимуществ снимков является их высокая эффективность в плане использования дискового пространства, поскольку это всего лишь ссылка на исходные данные до тех пор, пока не будут внесены изменения.
Но именно здесь снимок отличается от традиционной резервной копии. Допустим, ваш диск вышел из строя. Если бы у вас была традиционная резервная копия, вы могли бы восстановить свои данные из неё. Однако, если у вас были только снимки на вышедшем из строя диске, вы потеряли бы к ним доступ, так как они хранятся на том же диске.
Случаи, когда снимки полезны и бесполезны для восстановления
Заголовок раздела «Случаи, когда снимки полезны и бесполезны для восстановления»Они полезны для восстановления после:
- Сбоев или повреждений после обновлений системы.
- Неправильных конфигураций, которые мешают системе загрузиться.
- Случайного удаления или изменения файлов.
Они бесполезны для восстановления после:
- Проблем с загрузчиком.
- Аппаратных сбоев (например, выхода из строя жёстких дисков).
Управление снимками (GUI и CLI)
Заголовок раздела «Управление снимками (GUI и CLI)»Несколько моментов, которые следует учесть перед управлением снимками. Применимо как к CLI, так и к GUI методам.
- Рекомендуется хранить не более 10 снимков. После этого снимки становятся слишком старыми и менее полезными. В худшем случае, восстановление из старого снимка может привести к проблемам совместимости с новыми версиями программного обеспечения.
- В идеале снимки предназначены для восстановления. Хотя вы можете использовать их для отмены изменений в файлах без восстановления всего снимка.
- Добавляйте осмысленное описание при создании снимков. Это поможет вам позже определить назначение каждого снимка.
Btrfs Assistant (GUI)
Заголовок раздела «Btrfs Assistant (GUI)»Прежде чем продолжить, убедитесь, что у вас установлен btrfsmaintenance, чтобы воспользоваться функциями автоматического управления снимками.
Для тех, кто предпочитает управлять Btrfs, снимками и многим другим через графический интерфейс, Btrfs Assistant — это замечательный проект для новичков.
Настройка автоматической очистки снимков
Заголовок раздела «Настройка автоматической очистки снимков»Мы настроим автоматическую очистку снимков с помощью Btrfs Assistant. Это поможет эффективно управлять вашими снимками без ручного вмешательства.
Выполните следующие шаги:
-
Запустите Btrfs Assistant, открыв терминал и выполнив:
Terminal window btrfs-assistant-launcherКак вариант:
Terminal window sudo -E btrfs-assistant -
Перейдите на вкладку Snapper Settings (Настройки Snapper):

Измените настройки Snapshot Retention (Хранение снимков) следующим образом:
- Убедитесь, что выбрана конфигурация
root - Введите значение
0для Hourly (Ежечасно), Daily (Ежедневно), Weekly (Еженедельно), Monthly (Ежемесячно) и Yearly (Ежегодно). - Снимите флажок
Enable timeline snapshots(Включить снимки по расписанию). - Введите значение
10в полеNumber(Количество). - Поставьте ✅ напротив
Snapper cleanup enabled(Очистка Snapper включена). - Нажмите кнопку
Save(Сохранить) в правом верхнем углу иApply systemd changes(Применить изменения systemd) в правом нижнем. Теперьsnapper-cleanup.timerбудет включен для автоматической очистки старых снимков в соответствии с вашей конфигурацией.
- Убедитесь, что выбрана конфигурация
Удаление снимков с помощью Btrfs Assistant
Заголовок раздела «Удаление снимков с помощью Btrfs Assistant»-
Откройте Btrfs Assistant:
Terminal window btrfs-assistant-launcherКак вариант:
Terminal window sudo -E btrfs-assistant -
Перейдите на вкладку Snapper:

-
Выберите снимок(ки), который(е) вы хотите удалить из списка.
-
Нажмите кнопку
Delete(Удалить), расположенную в верхней части окна. -
Перегенерируйте записи вашего загрузчика, чтобы отразить изменения:
systemd-boot
Terminal window sudo sdboot-manage genGRUB
Terminal window sudo grub-mkconfig -o /boot/grub/grub.cfgLimine
Terminal window sudo limine-mkinitcpio
Ознакомьтесь с их Официальной Wiki для более подробного изучения того, что можно сделать.
Snapper (CLI)
Заголовок раздела «Snapper (CLI)»Теперь, когда мы рассмотрели, что такое снимок Btrfs и его варианты использования, давайте поговорим о том, как управлять ими с помощью инструмента под названием Snapper, созданного Arvin Schnell из openSUSE.
CachyOS по умолчанию использует следующую конфигурацию Snapper:
# subvolume to snapshotSUBVOLUME="/"
# filesystem typeFSTYPE="btrfs"
# btrfs qgroup for space aware cleanup algorithmsQGROUP=""
# fraction or absolute size of the filesystems space the snapshots may useSPACE_LIMIT="0.5"
# fraction or absolute size of the filesystems space that should be freeFREE_LIMIT="0.2"
# users and groups allowed to work with configALLOW_USERS=""ALLOW_GROUPS=""
# sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots# directorySYNC_ACL="no"
# start comparing pre- and post-snapshot in background after creating# post-snapshotBACKGROUND_COMPARISON="yes"
# run daily number cleanupNUMBER_CLEANUP="yes"
# limit for number cleanupNUMBER_MIN_AGE="1800"NUMBER_LIMIT="50"NUMBER_LIMIT_IMPORTANT="15"
# create hourly snapshotsTIMELINE_CREATE="no"
# cleanup hourly snapshots after some timeTIMELINE_CLEANUP="yes"
# limits for timeline cleanupTIMELINE_MIN_AGE="1800"TIMELINE_LIMIT_HOURLY="5"TIMELINE_LIMIT_DAILY="7"TIMELINE_LIMIT_WEEKLY="0"TIMELINE_LIMIT_MONTHLY="0"TIMELINE_LIMIT_YEARLY="0"
# cleanup empty pre-post-pairsEMPTY_PRE_POST_CLEANUP="yes"
# limits for empty pre-post-pair cleanupEMPTY_PRE_POST_MIN_AGE="1800"Вот список наиболее распространенных команд Snapper.
Получить текущую конфигурацию:
sudo snapper get-configПример вывода:
❯ snapper list-configsConfig │ Subvolume───────┼──────────root │ /Список доступных снимков + детали:
sudo snapper listПример вывода:
# │ Type │ Pre # │ Date │ User │ Cleanup │ Description │ Userdata────┼────────┼───────┼──────────────────────────┼──────┼─────────┼──────────────────────────────────────────────────────────────────────────┼─────────0 │ single │ │ │ root │ │ current │715 │ pre │ │ Thu 22 Jan 2026 16:14:07 │ root │ number │ pacman -S -y -u --config /etc/pacman.conf -- │716 │ post │ 715 │ Thu 22 Jan 2026 16:14:25 │ root │ number │ docker-buildx lilv sof-firmware zed │717 │ pre │ │ Sat 24 Jan 2026 11:19:48 │ root │ number │ pacman -S -y -u --config /etc/pacman.conf -- │718 │ post │ 717 │ Sat 24 Jan 2026 11:20:19 │ root │ number │ bpf cachyos-hello cachyos-wallpapers cpupower jdk-openjdk ldb less libev │719 │ pre │ │ Sat 24 Jan 2026 11:20:31 │ root │ number │ pacman -U --config /etc/pacman.conf -- /home/mario/.cache/yay/visual-s │720 │ post │ 719 │ Sat 24 Jan 2026 11:20:36 │ root │ number │ visual-studio-code-bin │721 │ pre │ │ Sat 24 Jan 2026 20:46:40 │ root │ number │ pacman -Syu plasma-login-manager │722 │ post │ 721 │ Sat 24 Jan 2026 20:46:48 │ root │ number │ cmake fastfetch harfbuzz harfbuzz-icu jdk21-openjdk lib32-harfbuzz lib32 │723 │ pre │ │ Sat 24 Jan 2026 20:46:53 │ root │ number │ pacman -R sddm-kcm cachyos-themes-sddm sddm │724 │ post │ 723 │ Sat 24 Jan 2026 20:46:56 │ root │ number │ cachyos-themes-sddm sddm sddm-kcm │725 │ pre │ │ Sun 25 Jan 2026 08:05:05 │ root │ number │ pacman -S -y -u --config /etc/pacman.conf -- │726 │ post │ 725 │ Sun 25 Jan 2026 08:05:11 │ root │ number │ plasma-login-manager │727 │ pre │ │ Sun 25 Jan 2026 15:55:28 │ root │ number │ pacman -S --config /etc/pacman.conf -- cachyos-extra-znver4/caligula │728 │ post │ 727 │ Sun 25 Jan 2026 15:55:30 │ root │ number │ caligula │- Вот краткое описание столбцов:
#: Указывает номер снимка, который используется в других командах.Type: Указывает, является ли снимок одиночным или частью пары pre/post.single: Эти снимки не имеют особого отношения к другим снимкам.pre: Эти снимки предназначены для создания до какого-либо системного изменения (например, редактирования файла или установки пакета).post: Как следует из названия, эти снимки относятся к снимкам, сделанным после системного изменения. Они связаны с соответствующимpreснимком.
Pre #: Дляpostснимков этот столбец указывает номер соответствующегоpreснимка.Date: Дата и время создания снимка.User: Пользователь, создавший снимок.Cleanup: Указывает алгоритм очистки, примененный к снимку.- В Snapper доступно несколько алгоритмов очистки, таких как
number,timelineиempty-pre-post. В этом примере используется алгоритмnumber, что означает, что старые снимки будут удаляться на основе предопределенного лимита. timeline: Снимки очищаются в зависимости от их возраста и частоты.empty-pre-post: Удаляет пары снимков pre/post с пустыми различиями.
- В Snapper доступно несколько алгоритмов очистки, таких как
Description: Краткое описание снимка, часто указывающее на причину его создания.Userdata: Дополнительные пользовательские данные, связанные со снимком. Для более подробной информации о столбцах вывода
Создать новый снимок:
sudo snapper create --type single --description "Мое описание снимка"Изменить снимок:
sudo snapper modify <опция> <номер_снимка>Доступные опции:
Options for 'modify' command: --description, -d <description> Description for snapshot. --cleanup-algorithm, -c <algo> Cleanup algorithm for snapshot. --userdata, -u <userdata> Userdata for snapshot. --read-only Set snapshot read-only. --read-write Set snapshot read-write. --default Set snapshot as default snapshot.Пример: Изменение описания снимка 729:
sudo snapper modify 729 --description 'Мое новое описание снимка'Удаление снимков:
Удалить один снимок:
sudo snapper delete <номер_снимка>Удалить диапазон снимков:
sudo snapper delete 718-721Снимки 718, 719, 720 и 721 будут удалены.
Документация Snapper
Заголовок раздела «Документация Snapper»Официальная man-страница команд Snapper:
Руководство по конфигурационному файлу Snapper:
Рекомендации и советы по Limine
Заголовок раздела «Рекомендации и советы по Limine»Настройка отображения снимков в загрузчике Limine
Заголовок раздела «Настройка отображения снимков в загрузчике Limine»- Ограничьте количество снимков, отображаемых в меню загрузчика Limine, чтобы избежать беспорядка:
- Создайте резервную копию файла конфигурации limine-snapper-sync:
Terminal window sudo cp /etc/limine-snapper-sync.conf /etc/limine-snapper-sync.conf.orig - Отредактируйте файл конфигурации limine-snapper-sync:
Ожидаемый фрагмент вывода:
Terminal window sudo nano /etc/limine-snapper-sync.confПри желании можно настроить формат имени снимка:Terminal window ### Max Snapshot Entries### Sets the limit for how many snapshot entries show up in the boot menu.### This depends on the size of your FAT32 boot partition and how many different kernel and module versions you want to keep.### A larger FAT32 boot partition allows more snapshot entries.MAX_SNAPSHOT_ENTRIES=10Terminal window ### Snapshot Name Format### Choose a format for how snapshot entries look in the Limine bootloader:### 0. ID=111 2023-12-20 10:59:59 (default)### 1. 111│2023-12-20 10:59:59### 2. 111 │ 2023-12-20 10:59:59### 3. 2023-12-20 10:59:59│111### 4. 2023-12-20 10:59:59 │ 111### 5. 2023-12-20 10:59:59### 6. 111### 7. 111│snapshot description### 8. 2023-12-20 10:59:59│snapshot description### 9. │snapshot descriptionSNAPSHOT_FORMAT_CHOICE=88— хороший выбор, так как он показывает дату и время вместе с описанием снимка. - Сохраните файл и выйдите, нажав
CTRL+O,Enter,CTRL+X.
Восстановление из снимка
Заголовок раздела «Восстановление из снимка»Limine
- В меню загрузчика Limine перейдите в меню Snapshots (Снимки):

- Выберите снимок и ядро, из которых вы хотите восстановиться:


- Ваша система теперь находится в режиме
read-only mode(только для чтения). Должно появиться всплывающее уведомление, указывающее на обнаружение снимка и предлагающее восстановиться из него:
- Нажмите
Restore now(Восстановить сейчас). Откроется окно терминала с запросом и попросит несколько подтверждений:Пример запроса на восстановление Snapshot ID : 2Date : 2026-01-26 11:19:14Description : nc-gitRestore method : replaceConfirm restore of snapshot 2 using the "replace" method?Type [y]es to restore, [l]ist to display all snapshots, or [c]ancel to abort.Your input: yesEnter a description for the "backup" of the subvolume: @Your input: @ - Введите
yesи, при желании, добавьте описание для резервного снимка. - Начнется процесс восстановления. По завершении снова введите
yesв новом запросе, чтобы перезагрузить систему:Terminal window The restore is complete. Please reboot now:Type [y]es to reboot, [n]o or [c]ancel to abort rebooting.Your input: yes
GRUB
-
В меню загрузчика GRUB загрузитесь в желаемый снимок и ядро, из которых вы хотите восстановиться.
-
После загрузки откройте Btrfs Assistant:
Terminal window btrfs-assistant-launcherКак вариант:
Terminal window sudo -E btrfs-assistant -
Перейдите на вкладку Snapper → вкладку “Browse/Restore” (Обзор/Восстановление) и выберите снимок, из которого вы загрузились:

-
Нажмите кнопку
Restore(Восстановить) и перезагрузите систему, чтобы применить изменения.