Уже некоторое время я разрабатываю и использую в своём быту набор скриптов на Python для управления снимками системы. Ну а так как с названиями у меня не очень, назван этот комплект был Just Snapshot. Просто и очевидно.

Сегодня я наконец решился хоть немного показать его публике. Сразу отмечу, что пользователям Windows, как и хейтерам BTRFS, тут делать нечего.

Преимущества над популярным Timeshift

  • Возможность указать свои подразделы. То есть, Timeshift умеет бэкапить только разделы @ и @home, то есть стандартные разделы Ubuntu. В моём решении вы можете указать любое количество любых подразделов.
  • Рекурсивный бэкап. Если внутри подраздела есть ещё подразделы, они также будут скопированы.
  • Более простой CLI-интерфейс. Каждая операция представлена своим консольным скриптом, благодаря чему пользоваться ими проще, а справка по командам влезает на экран =)

Первоначальная настройка

Ну вот вы установили пакет. В первую очередь нужно выполнить скрипт jsnapshot-setup. И да, все скрипты начинаются со слова jsnapshot. После запуска данного скрипта (от рута, само собой) вам будет предложен ряд вопросов для настройки программы. А именно, у вас спросят, с каким диском работать, какие подразделы включить, как часто создавать автоматические снимки:

[melianmiko@fedora ~]$ sudo jsnapshot-setup 

STEP 1. Select your system disk.

Mounted BTRFS volumes:
 0 - /dev/sda1

Enter number of target device to use it.
Enter your choice ['0']: 0

STEP 2. Select subvolumes to backup.

Available BTRFS sub-volumes:
 0 - @

Enter numbers of volumes separated with space. Example, if you want to backup first and third, enter '0 2'.
Value: 0
Selected subvolume 256 /run/jsnapshot/disk/@

STEP 3. Configure auto-snapshot timetable.

Enter count of auto-snapshots for every period. If you don't need auto-backup in some period, enter zero (0).
Enter count of hourly snapshots.
Value: 3
Enter count of daily snapshots.
Value: 0
Enter count of weekly snapshots.
Value: 0
Enter count of monthly snapshots.
Value: 0

Configuration updated. Now you can use this application.
[melianmiko@fedora ~]$ 

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

Используйте команду jsnapshot-list. Обратите внимание, что название снимка — дата и время его создания. Именно эта строка используется для указания снимка при его удалении, изменении или восстановлении.

[melianmiko@fedora ~]$ sudo jsnapshot-list 
 Flag     Name                     Tags   Extra info
 ----     2021-11-08_21-01-01      H      Auto backup
 ----     2021-11-08_21-01-15      U      
[melianmiko@fedora ~]$ 

Обозначения:

  • В столбце Flag отображается статус снимка. На данный момент статуса два, помимо пустого. Первый - это статус FAIL. Если вы видите этот статус, значит снимок повреждён. Второй - BOOT, означающий, что в данный момент ОС запущена из данного снимка, и удалить его нельзя
  • В столбце Name отображается имя снимка, об этом говорилось чуть выше
  • В столбце Tags отображаются тэги. Тэги H\D\W\M ставятся для автоматически созданных снимков, и указывают на то, по какому из таймеров создан снимок. Тэг U означает снимок, созданный вручную. Эти снимки не будут удалены при очистке старых авто-снимков.
  • Последний столбец содержит описание, заданное при создании снимка

Как создать снимок

Просто используйте команду jsnapshot-create. По умолчанию она создаст снимок без описания, но вы можете указать его, используя флаг --info.

[melianmiko@fedora ~]$ sudo jsnapshot-list 
 Flag     Name                     Tags   Extra info
 ----     2021-11-08_21-01-01      H      Auto backup
 ----     2021-11-08_21-01-15      U      
 ----     2021-11-08_21-04-36      U      

[melianmiko@fedora ~]$ sudo jsnapshot-create --info "Clean Fedora 35 LXQT"
Notice:  Backup to: /run/jsnapshot/disk/_backups/2021-11-08_21-04-53
Notice:  Snapshot recursive: /run/jsnapshot/disk/@ => /run/jsnapshot/disk/_backups/2021-11-08_21-04-53/@
Notice:  Set snapshot info: Clean Fedora 35 LXQT
Notice:  Snapshot created.

[melianmiko@fedora ~]$ sudo jsnapshot-list 
 Flag     Name                     Tags   Extra info
 ----     2021-11-08_21-01-01      H      Auto backup
 ----     2021-11-08_21-01-15      U      
 ----     2021-11-08_21-04-36      U      
 ----     2021-11-08_21-04-53      U      Clean Fedora 35 LXQT

[melianmiko@fedora ~]$ 

Как удалить снимок

Используйте команду jsnapshot-delete. В параметрах команды укажите названия снимков, которые нужно удалить. Можно указать несколько.

[melianmiko@fedora ~]$ sudo jsnapshot-list 
 Flag     Name                     Tags   Extra info
 ----     2021-11-08_21-01-01      H      Auto backup
 ----     2021-11-08_21-01-15      U      
 ----     2021-11-08_21-04-36      U      
 ----     2021-11-08_21-04-53      U      Clean Fedora 35 LXQT

[melianmiko@fedora ~]$ sudo jsnapshot-delete 2021-11-08_21-01-15 2021-11-08_21-04-36
Notice:  Deleting snapshot /run/jsnapshot/disk/_backups/2021-11-08_21-01-15
Notice:  Deleting snapshot /run/jsnapshot/disk/_backups/2021-11-08_21-04-36

[melianmiko@fedora ~]$ sudo jsnapshot-list 
 Flag     Name                     Tags   Extra info
 ----     2021-11-08_21-01-01      H      Auto backup
 ----     2021-11-08_21-04-53      U      Clean Fedora 35 LXQT
[melianmiko@fedora ~]$ 

Как восстановить систему на один из снимков

Используйте команду jsnapshot-restore. Первый параметр — название снимка, который нужно восстановить. Второй — названия подразделов для восстановления, через запятую. Или all, для восстановления всего снимка. Обратите внимание, что для переключения на восстановленный снимок потребуется перезагрузка, которую вам нужно выполнить вручную.

[melianmiko@fedora ~]$ sudo jsnapshot-list 
 Flag     Name                     Tags   Extra info
 ----     2021-11-08_21-01-01      H      Auto backup
 ----     2021-11-08_21-04-53      U      Clean Fedora 35 LXQT

[melianmiko@fedora ~]$ sudo jsnapshot-restore 2021-11-08_21-04-53 all
Warning:  Recovering system with snapshot 2021-11-08_21-04-53
Notice:  Backup to: /run/jsnapshot/disk/_backups/2021-11-08_21-07-20
Notice:  Moving current system to new snapshot...
Notice:  Moving @ => /run/jsnapshot/disk/_backups/2021-11-08_21-07-20/@
Notice:  Recovering target snapshot...
Notice:  Restoring _backups/2021-11-08_21-04-53/@ => @
Warning:  Detected restored rootfs (@). Fstab will be patched in them!
Notice:  Patching fstab file: /run/jsnapshot/disk/@/etc/fstab
Notice:  Fstab saved
Notice:  Restore completed. Reboot is required to apply changes.

[melianmiko@fedora ~]$ sudo jsnapshot-list 
 Flag     Name                     Tags   Extra info
 ----     2021-11-08_21-01-01      H      Auto backup
 ----     2021-11-08_21-04-53      U      Clean Fedora 35 LXQT
 BOOT     2021-11-08_21-07-20      F      Auto-snapshot before restoring: 2021-11-08_21-04-53
[melianmiko@fedora ~]$ 

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


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