Поиск по сайту:

Создание снимков Btrfs с помощью Snapper в openSUSE

Используйте Snapper для автоматизации снимков Btrfs

Btrfs — это файловая система Linux, принятая в качестве файловой системы по умолчанию в популярных дистрибутивах Linux, таких как openSUSE и Fedora. Он имеет множество уникальных функций, недоступных в других файловых системах. Он основан на копировании при записи, что позволяет эффективно создавать снимки и клоны файловой системы. В этом руководстве мы увидим, что такое Snapper и как создавать снимки файловой системы Btrfs с помощью Snapper в openSUSE Linux.

Что такое Снаппер?

Snapper — это инструмент управления снимками файловой системы Linux, созданный Арвином Шнеллом, разработчиком программного обеспечения из SUSE. Используя Snapper, вы можете легко создавать, удалять, сравнивать и отменять изменения между снимками файловой системы Btrfs.

Snapper интегрирован в YaST и zypper для создания снимков Btrfs и управления ими в системах Linux на базе SUSE. Его также можно интегрировать с менеджером пакетов другого дистрибутива (например, DNF) с помощью плагина.

Snapper может автоматически создавать пару снимков до и после запуска YaST или zypper. Вы также можете вручную создать один снимок из командной строки или с помощью YaST.

Вы можете сравнить два снимка и восстановить предыдущий снимок в случае возникновения проблемы. Другими словами, Snapper можно использовать для просмотра старых версий файлов и возврата к предыдущему состоянию рабочей системы, если что-то пойдет не так.

Snapper автоматически создает временную шкалу снимков, поэтому вы можете легко узнать, когда был сделан снимок. Старые снимки автоматически очищаются для экономии дискового пространства.

Snapper имеет как интерфейс командной строки, так и графический интерфейс (модуль YaST). Таким образом, вы можете использовать Snapper как на серверах, так и на настольных компьютерах для создания снимков файловых систем Btrfs.

Snapper изначально разрабатывался только для SUSE и openSUSE. Теперь он работает в любом дистрибутиве Linux, который поддерживает файловую систему Btrfs и логические тома на основе LVM с тонким предоставлением.

Раньше Snapper поддерживал файловую систему EXT4, но сейчас ее поддержка прекращена. Использование Snapper в файловых системах EXT4 крайне не рекомендуется!

Установить Snapper в Linux

Чтобы использовать Snapper, разделы должны иметь файловые системы Btrfs.

По умолчанию SUSE и openSUSE используют файловую систему Btrfs для корневого раздела. Если вы решите использовать Btrfs в качестве корневой файловой системы во время новой установки openSUSE, Snapper будет автоматически настроен для YaST2 и Zypper. Поэтому всякий раз, когда вы используете YaST2 или Zypper, снимки будут делаться автоматически. Вы также можете в любое время вручную делать снимки.

В других дистрибутивах Linux вам может потребоваться установить Snapper и настроить его с помощью менеджера пакетов по умолчанию.

Чтобы установить Snapper в Arch Linux и его вариантах, таких как EndeavourOS и Manjaro Linux, запустите:

sudo pacman -S snapper

Установите Snapper в Fedora:

sudo dnf install snapper

Установите Snapper в Debian, Ubuntu:

sudo apt install snapper

Он также доступен для различных других дистрибутивов Linux. Перейдите по ссылка для скачивания Snapper, получите необходимую версию для вашей версии Linux и установите ее.

Как уже говорилось, Snapper интегрирован в YaST2 и Zypper, поэтому снимок корневой файловой системы автоматически создается при завершении каждой транзакции YaST/Zypper.

В других дистрибутивах Linux вам может потребоваться установить плагины Snapper для интеграции Snapper с вашими менеджерами пакетов.

Например, если вы используете Fedora, вы можете установить плагин DNF Snapper для автоматического создания снимков файловой системы при запуске команды dnf.

sudo dnf install snapper python3-dnf-plugin-snapper

Создание снимков файловой системы Btrfs с помощью Snapper

Все команды, приведенные ниже, протестированы в последней версии openSUSE Tumbleweed.

1. Просмотр конфигурации Snapper

По умолчанию YaST создает конфигурацию Snapper под названием «root» для вашей корневой файловой системы. Вы можете просмотреть существующую конфигурацию моментального снимка с помощью команды:

sudo snapper list-configs

Пример вывода:

Config | Subvolume
-------+----------
root   | /        

Список конфигураций Snapper

2. Создайте новую конфигурацию Snapper для корневой файловой системы.

Если вы используете системы Linux, отличные от openSUSE/SUSE, вам необходимо вручную создать конфигурацию для вашей корневой файловой системы, выполнив следующую команду:

sudo snapper create-config /

Приведенная выше команда будет

  • создайте новый файл конфигурации в /etc/snapper/configs/root на основе шаблона по умолчанию из /usr/share/snapper/config-templates.
  • создайте новый подтом в каталоге /.snapshots и сохраните будущие снимки для корневой конфигурации в этом каталоге.

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

3. Настройте автоматические снимки временной шкалы

Создание снимков включается автоматически, если корневой раздел (/) достаточно велик (примерно более 16 ГБ). Если размер корневого раздела меньше 16 ГБ, все функции Snapper и автоматические снимки отключаются, чтобы предотвратить создание полного раздела /.

Чтобы проверить, включены ли автоматические снимки, отредактируйте файл /etc/snapper/configs/root:

sudo nano /etc/snapper/configs/root

Убедитесь, что для следующей опции установлено значение «да».

TIMELINE_CREATE="yes"

Если временная шкала включена, Snapper по умолчанию будет создавать снимок один раз в час.

Чтобы отключить функцию автоматического создания снимков временной шкалы, просто установите для вышеуказанной функции значение «нет».

TIMELINE_CREATE="no" 

Если функция автоматического создания снимков временной шкалы включена, Snapper будет хранить определенное количество снимков каждый час, день, неделю, месяц и год в зависимости от настроек конфигурации, определенных в файле /etc/snapper/configs/root.

Проверим текущие настройки конфигурации:

[...]
TIMELINE_MIN_AGE="1800"
TIMELINE_LIMIT_HOURLY="10"
TIMELINE_LIMIT_DAILY="10"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="10"
TIMELINE_LIMIT_YEARLY="10"
[...]

В соответствии с приведенной выше конфигурацией Snapper будет хранить 100 ежечасных, 10 ежедневных, 10 ежемесячных и 10 ежегодных снимков, если включена функция автоматического создания снимков временной шкалы.

4. Список снимков

Чтобы просмотреть доступные снимки с помощью Snapper, запустите:

sudo snapper list

Пример вывода:

  # | Type   | Pre # | Date                                | User | Used Space | Cleanup | Description           | Userdata     
----+--------+-------+-------------------------------------+------+------------+---------+-----------------------+--------------
 0  | single |       |                                     | root |            |         | current               |              
 1* | single |       | Thursday 04 August 2022 12:54:37 PM | root |  13.82 MiB |         | first root filesystem |              
 2  | single |       | Thursday 04 August 2022 05:16:07 PM | root |  20.25 MiB | number  | after installation    | important=yes
 3  | pre    |       | Thursday 04 August 2022 05:28:12 PM | root |   1.64 MiB | number  | zypp(packagekitd)     | important=yes
 4  | post   |     3 | Thursday 04 August 2022 05:29:38 PM | root |  27.98 MiB | number  |                       | important=yes
11  | pre    |       | Friday 05 August 2022 02:07:22 PM   | root |   4.12 MiB | number  | zypp(zypper)          | important=no 
12  | post   |    11 | Friday 05 August 2022 02:09:07 PM   | root |  33.29 MiB | number  |                       | important=no 
13  | pre    |       | Friday 05 August 2022 02:33:19 PM   | root | 176.00 KiB | number  | yast snapper          |              
14  | pre    |       | Friday 05 August 2022 02:39:30 PM   | root | 128.00 KiB | number  | zypp(zypper)          | important=no 
15  | post   |    14 | Friday 05 August 2022 02:39:48 PM   | root |   5.65 MiB | number  |                       | important=no 
16  | post   |    13 | Friday 05 August 2022 04:11:00 PM   | root |  32.00 KiB | number  |                       |              
17  | pre    |       | Friday 05 August 2022 04:11:27 PM   | root |  64.00 KiB | number  | yast snapper          |              
20  | post   |    17 | Friday 05 August 2022 06:48:50 PM   | root |   2.33 MiB | number  |                       |              

Получение списка снимков

Как видно из приведенного выше вывода, существует три типа снимков. Они известны как single, pre и post соответственно.

Каждый снимок имеет порядковый номер, а также точную дату и время создания снимка. Снимок #0 всегда относится к текущей системе.

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

Пара снимков корневой файловой системы создается во время каждой транзакции YaST или Zypper. Эти снимки называются до и после.

Один моментальный снимок создается непосредственно перед выполнением транзакции (Pre). Это означает, что после успешной проверки транзакции и успешного теста транзакции. И еще один снимок создается после завершения транзакции (Post).

Каждый снимок «до» принадлежит определенному снимку «после». Снимки поста знают, какие предварительные снимки ему принадлежат.

Имея снимки до и после, мы можем увидеть, какие изменения произошли с файловой системой во время работы YaST/Zypper.

Откуда вы знаете, что Snapper действительно делает снимки файловой системы? Легкий! Откройте YaST и внесите некоторые изменения в конфигурацию или установите/удалит пакет с помощью менеджера пакетов Zypper. Snapper автоматически делает снимок файловой системы во время каждой транзакции.

Например, я собираюсь установить пакет «gedit» с помощью zypper:

sudo zypper install gedit

Теперь перечислите снимки с помощью команды:

sudo snapper list

Пример вывода:

  # | Type   | Pre # | Date                                | User | Used Space | Cleanup | Description           | Userdata     
----+--------+-------+-------------------------------------+------+------------+---------+-----------------------+--------------
 0  | single |       |                                     | root |            |         | current               |              
 1* | single |       | Thursday 04 August 2022 12:54:37 PM | root |  56.28 MiB |         | first root filesystem |              
 2  | single |       | Thursday 04 August 2022 05:16:07 PM | root |  20.25 MiB | number  | after installation    | important=yes
 3  | pre    |       | Thursday 04 August 2022 05:28:12 PM | root |   1.64 MiB | number  | zypp(packagekitd)     | important=yes
 4  | post   |     3 | Thursday 04 August 2022 05:29:38 PM | root |  27.98 MiB | number  |                       | important=yes
11  | pre    |       | Friday 05 August 2022 02:07:22 PM   | root |   4.12 MiB | number  | zypp(zypper)          | important=no 
12  | post   |    11 | Friday 05 August 2022 02:09:07 PM   | root |  33.29 MiB | number  |                       | important=no 
13  | pre    |       | Friday 05 August 2022 02:33:19 PM   | root | 176.00 KiB | number  | yast snapper          |              
14  | pre    |       | Friday 05 August 2022 02:39:30 PM   | root | 128.00 KiB | number  | zypp(zypper)          | important=no 
15  | post   |    14 | Friday 05 August 2022 02:39:48 PM   | root |   5.65 MiB | number  |                       | important=no 
16  | post   |    13 | Friday 05 August 2022 04:11:00 PM   | root |  32.00 KiB | number  |                       |              
17  | pre    |       | Friday 05 August 2022 04:11:27 PM   | root |  64.00 KiB | number  | yast snapper          |              
20  | post   |    17 | Friday 05 August 2022 06:48:50 PM   | root |   2.74 MiB | number  |                       |              
21  | pre    |       | Tuesday 09 August 2022 04:10:44 PM  | root | 992.00 KiB | number  | zypp(zypper)          | important=no 
22  | post   |    21 | Tuesday 09 August 2022 04:10:49 PM  | root |   1.64 MiB | number  |                       | important=no 

Вот оно! Snapper сделал снимки до и после выполнения команды zypper.

5. Просмотр состояния снимка

Мы можем проверить, что изменилось во время работы YaST или Zypper.

Для этого просто запустите следующую команду с индексным номером снимков до и после:

sudo snapper status 21..22

Во время транзакции вы увидите весь список новых добавленных/удаленных файлов.

[...]
c..... /usr/share/icons/hicolor/icon-theme.cache
+..... /usr/share/icons/hicolor/scalable/apps/org.gnome.gedit.svg
+..... /usr/share/icons/hicolor/symbolic/apps/org.gnome.gedit-symbolic.svg
+..... /usr/share/licenses/gedit
+..... /usr/share/licenses/gedit/COPYING
+..... /usr/share/man/man1/gedit.1.gz
+..... /usr/share/metainfo/org.gnome.gedit.appdata.xml

Здесь,

  • 'c' означает, что файл изменен.
  • «+» означает, что файл добавлен.
  • '-' означает, что файл удален.

6. Просмотр разницы в снимках

Мы также можем увидеть разницу между снимками до и после.

sudo snapper diff 21..22

Или укажите параметр «меньше», чтобы просмотреть вывод постранично.

sudo snapper diff 21..22 | less

Посмотреть разницу в снимках

7. Вернуть или отменить изменения

Если вам не нравятся изменения, внесенные YaST или Zypper, вы можете вернуться к предыдущему состоянию системы, используя команду:

sudo snapper undochange 21..22

Snapper вернет все файлы (текстовые и двоичные), включая разрешения, права собственности и расширенные атрибуты, а также удалит и заново создаст файлы и каталоги. Временные метки файлов не восстанавливаются. Некоторые файлы исключены, например. /etc/mtab.

Вам необходимо перезагрузить систему, чтобы изменения вступили в силу. Потому что Snapper не будет уведомлять ядро об изменениях, как это делают YaST или Zypper.

8. Создайте снимки Btrfs вручную.

Snapper автоматически создает снимки. Однако вы также можете вручную создавать снимки Btrfs.

Чтобы создать новый снимок, просто запустите:

sudo snapper create --desc "Snapshot After Fresh Installation"

Здесь --desc указывает описание снимка.

Давайте проверим, создан ли снимок, перечислив доступные снимки.

sudo snapper list

Пример вывода:

  # | Type   | Pre # | Date                                | User | Used Space | Cleanup | Description                       | Userdata     
----+--------+-------+-------------------------------------+------+------------+---------+-----------------------------------+--------------
 0  | single |       |                                     | root |            |         | current                           |              
 1* | single |       | Thursday 04 August 2022 12:54:37 PM | root |  16.00 KiB |         | first root filesystem             |              
 2  | single |       | Thursday 04 August 2022 05:16:07 PM | root |  20.25 MiB | number  | after installation                | important=yes
 3  | pre    |       | Thursday 04 August 2022 05:28:12 PM | root |   1.64 MiB | number  | zypp(packagekitd)                 | important=yes
 4  | post   |     3 | Thursday 04 August 2022 05:29:38 PM | root |  27.98 MiB | number  |                                   | important=yes
11  | pre    |       | Friday 05 August 2022 02:07:22 PM   | root |   4.12 MiB | number  | zypp(zypper)                      | important=no 
12  | post   |    11 | Friday 05 August 2022 02:09:07 PM   | root |  33.29 MiB | number  |                                   | important=no 
13  | pre    |       | Friday 05 August 2022 02:33:19 PM   | root | 176.00 KiB | number  | yast snapper                      |              
14  | pre    |       | Friday 05 August 2022 02:39:30 PM   | root | 128.00 KiB | number  | zypp(zypper)                      | important=no 
15  | post   |    14 | Friday 05 August 2022 02:39:48 PM   | root |   5.65 MiB | number  |                                   | important=no 
16  | post   |    13 | Friday 05 August 2022 04:11:00 PM   | root |  32.00 KiB | number  |                                   |              
17  | pre    |       | Friday 05 August 2022 04:11:27 PM   | root |  64.00 KiB | number  | yast snapper                      |              
20  | post   |    17 | Friday 05 August 2022 06:48:50 PM   | root |   2.33 MiB | number  |                                   |              
21  | single |       | Tuesday 09 August 2022 03:50:04 PM  | root |  16.00 KiB |         | Snapshot After Fresh Installation |         

Создание снимков Btrfs

9. Просмотр содержимого снимков

Все снимки хранятся в каталоге /.snapshots для корневой конфигурации. Каждый снимок хранится в отдельной директории. Если вы перейдете в каталог моментальных снимков, вы увидите полную корневую файловую систему.

sudo ls /.snapshots/17/snapshot
bin  boot  dev	etc  home  lib	lib64  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

Просмотр содержимого снимков файловой системы

10. Настройка конфигурации Snapper для домашнего каталога

в SUSE/openSUSE YaST не настраивает Snapper для вашего каталога /home. По умолчанию конфигурация Snapper устанавливается только для корневой файловой системы.

Вам необходимо вручную настроить конфигурацию Snapper для вашего домашнего каталога. Для этого запустите:

sudo snapper -c home create-config /home

Приведенная выше команда будет

  • создайте новый файл конфигурации в /etc/snapper/configs/home на основе шаблона по умолчанию из /usr/share/snapper/config-templates.
  • создайте новый субтом в каталоге /home/.snapshots и сохраните будущие снимки для домашней конфигурации в этом каталоге.

Убедитесь, что файл конфигурации для каталога /home создан, перечислив файлы конфигурации Snapper:

sudo snapper list-configs 
Config | Subvolume
-------+----------
home   | /home    
root   | /        

Да, он создан! С этого момента вы можете просмотреть список снимков для каталога /home.

sudo snapper -c home list
 # | Type   | Pre # | Date                               | User | Used Space | Cleanup  | Description | Userdata
---+--------+-------+------------------------------------+------+------------+----------+-------------+---------
0  | single |       |                                    | root |            |          | current     |         
1  | single |       | Tuesday 09 August 2022 05:00:26 PM | root |  16.00 KiB | timeline | timeline    |         

Внимание: Обратите внимание: всякий раз, когда вы хотите использовать Snapper для каталога /home, вы должны использовать параметр -c home во всех командах.

Чтобы вручную создать снимок для каталога /home, запустите:

sudo snapper -c home create --description "First snapshot for /home directory"

11. Откат из загрузочных снимков

Восстановление вашей системы Linux до предыдущего известного рабочего состояния с помощью Snapper — весьма полезная функция.

Если вы по незнанию что-то неправильно настроили или после обновления системы у вас сломалась система, вы можете легко вернуться к предыдущему состоянию без потери каких-либо данных.

Перезагрузите систему. В меню загрузки выберите параметр "Запустить загрузчик из снимка, доступного только для чтения".

Запустить загрузчик из снимка, доступного только для чтения

Список снимков указан по дате в следующем окне. Самый последний снимок отображается первым. Выберите снимок, который хотите загрузить, и нажмите Enter, чтобы войти в систему.

Выберите снимок для загрузки

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

Если все в порядке, как и ожидалось, выполните откат, выполнив следующую команду из своего терминала.

sudo snapper rollback

Пример вывода:

Ambit is classic.
Creating read-only snapshot of default subvolume. (Snapshot 32.)
Creating read-write snapshot of current subvolume. (Snapshot 33.)
Setting default subvolume to snapshot 33.

Снимок отката

После завершения отката перезагрузите систему. На экране загрузки выберите загрузочную запись по умолчанию, чтобы перезагрузиться в восстановленную систему. Снимок состояния файловой системы до создания отката. Подтом по умолчанию для root будет заменен новым снимком для чтения и записи.

При желании вы можете добавить описание снимка с помощью опции -d. Это полезно, чтобы легко запомнить, когда вы выполнили откат. Например:

New file system root since rollback on 13/08/2022

Если ваша система находится в состоянии, когда вы не хотите выполнять откат, ничего не делайте. Просто перезагрузитесь, чтобы загрузиться в текущем состоянии системы. А затем выберите другой снимок или запустите систему восстановления.

Обратите внимание, что эта функция поддерживает только корневую конфигурацию.

12. Удалить снимки

Чтобы удалить снимок, просто укажите имя конфигурации и номер снимка, как показано ниже. Следующие команды удалят снимок 17 корневой конфигурации:

sudo snapper -c root delete 17

Аналогично, чтобы удалить снимок домашней конфигурации, команда будет такой:

sudo snapper -c home delete <snapshot-no>

Чтобы удалить несколько снимков (например, 10 и 11) одновременно, укажите номера снимков через пробел, как показано ниже:

sudo snapper -c root delete 10 11

Внимание! После удаления предварительного снимка всегда следует удалять соответствующий пост-снимок, и наоборот.

Вы также можете удалить ряд снимков, например снимки с 10 по 20 домашней конфигурации, запустив:

sudo snapper -c home delete 10-20

Чтобы немедленно освободить дисковое пространство, используемое снимками, используйте опцию --sync:

sudo snapper -c root delete --sync 30

Устранение неполадок — снижение нагрузки ввода-вывода

Snapper создает два снапшота и сравнивает их во время каждой транзакции YaST/Zypper. Это приведет к высокой нагрузке ввода-вывода.

Чтобы уменьшить нагрузку на ввод-вывод, отредактируйте файл /etc/snapper/configs/root:

sudo nano /etc/snapper/configs/root

Установите нет для следующих параметров.

[...]
BACKGROUND_COMPARISON="no"
[...]
EMPTY_PRE_POST_CLEANUP="no"

Уменьшите нагрузку ввода-вывода

Первая строка отключает фоновое сравнение, а вторая — ежедневную очистку. Сохраните файл и закройте его.

Графический интерфейс Snapper

Snapper также имеет графический пользовательский интерфейс, с помощью которого вы можете создавать снимки файловой системы Btrfs и управлять ими с помощью пары щелчков мыши.

Запустите Snapper из меню. В openSUSE он доступен под другим названием «Снимки файловой системы YaST».

Вот как выглядит графический интерфейс Snapper в openSUSE.

Интерфейс Snapper

В приведенном выше окне показан список доступных снимков в корневой конфигурации. Вы можете переключиться на другую конфигурацию (например, домашнюю) из раскрывающегося списка «Текущая конфигурация».

Конфигурация переключателя в графическом интерфейсе Snapper

Отсюда вы можете создавать новые снимки, изменять их и удалять снимки, если они больше не нужны.

Отменить изменения через графический интерфейс Snapper

Чтобы восстановить снимок, выберите нужный снимок из списка и нажмите кнопку «Показать изменения».

Выберите снимок

В следующем окне выберите файлы и папки в исходном снимке для восстановления и, наконец, нажмите кнопку «Восстановить выбранное». Вам будет предложено подтвердить восстановление снимка. Нажмите «Да», чтобы продолжить.

Восстановить снимок

Снимок восстановлен!

Заключение

В этом руководстве мы обсудили, что такое Snapper и как мы можем использовать Snapper для создания снимка Btrfs до и после запуска YaST или zypper, сравнения двух снимков и возврата между двумя снимками в openSUSE. Мы также рассмотрели, как выполнить откат от загрузочного снимка, доступного только для чтения, чтобы восстановить систему до предыдущего рабочего состояния.

Наконец, мы научились использовать инструмент Snapper GUI для выполнения всех операций по управлению снимками через графический интерфейс.

Snapper — недооцененный инструмент, который легко обрабатывает снимки файловой системы. Вам не понадобится какой-либо сторонний инструмент для создания снимков файловой системы, если базовой файловой системой является Btrfs.

Ресурсы:

  • Репозиторий Snapper на GitHub
  • Веб-сайт Snapper

Статьи по данной тематике