Уже достаточно давно для создания и управления снапшотами на файловой системе btrfs я использую скрипт, о котором писал здесь. Напомню, что этот скрипт создаёт снапшот определённого подтома btrfs в определённой папке, а также удаляет устаревшие снапшоты.
Такая связка (btrfs + подтома + этот скрипт) работает, с моей точки зрения, вполне нормально. Не знаю даже, что мне нравится больше: возможность быстро восстановить неудачно обновлённую систему (редко, но бывает) или возможность восстановить неудачно обновлённый документ.
Но однажды мне очень захотелось поэкспериментировать, и я за пару дней взял, и переделал этот скрипт на Питоне. Зачем? Да просто захотелось. Почему на Питоне? А почему нет? Тем более, что в Линуксах Питон обычно устанавливается по умолчанию. В общем, повозился я несколько дней, и получилось у меня это.
Итак, последние две недели я использую собственный скрипт. Называется он snapshot_rotate. От прежнего он имеет одно (нет, всё-таки два) отличия:
- Написан на Python 3. Поскольку у меня не было возможности провести полномасштабное тестирование, не могу пока точно сказать, все ли версии третьего Питона поддерживаются. Уверен только за текущий Питон 3.10
- Мой скрипт по умолчанию создаёт обычные, не-read-only снапшоты. Впрочем, можно использовать ключ -r (я добавил такую возможность).
Впрочем, достаточно всего лишь ввести snapshot_rotate -h, и получить справку:
Take and rotate snapshots on a btrfs file system
usage: snapshot_rotate [-h] [-r] [-q] source target snap_name count
Take and rotate snapshots on a btrfs file system
positional arguments:
source path to make snapshot of
target snapshot directory
snap_name base name for snapshots,to be appended to date
count number of snapshots in the timestamp-@snap_name format to keep at one time for
a given snap_name.
options:
-h, —help show this help message and exit
-r, —readonly create readonly snapshot
-q, —quiet be quiet
В остальном мало что изменилось. Например, команда:
sudo /usr/local/bin/snapshot_rotate / /.snapshots daily 8
создаст в папке /.snapshots снимок файловой системы / (подтом @) с именем типа 2022-04-15—09-31-43-@daily. То есть предполагается, что это — ежедневный снимок (daily), и в папке их должно быть не более восьми. По мере добавления новых снимков старые будут удаляться.
Для автоматизации процесса создания снапшотов я по-прежнему использую anacrontab, куда вставил следующие строки:
1 10 daily_snap /usr/local/bin/snapshot_rotate / /.snapshots daily 9 -q
1 15 data_snap /usr/local/bin/snapshot_rotate /home /.snapshots data 12 -q
1 20 update_grub update-grub
Напомню, что запуск update-grub необходим, чтобы иметь возможность загружаться в сохранённые системные снапшоты непосредственно через grub.
Хочу также отметить:
- Повторюсь, у меня не было возможности полноценного тестирования скрипта. Поэтому вы можете его использовать, но я ничего не гарантирую. 🙁
- Допускаю, что в какой-нибудь из старых версий Python3 скрипт не будет работать.
- При наличии желания или необходимости можно создать подобный скрипт для zfs или добавить поддержку zfs в этот скрипт, чтобы он оправдывал своё название.
- Неплохо было бы ещё что-нибудь полезное создать…
На сегодня, пожалуй, всё!
Максим Перехрест