Дисклеймер: Ваши данные - ваша забота и ответственность.
Дисклеймер 2: Данный текст не является абсолютно полным руководством (по размеру понятно). BTRFS не является файловой системой, которую можно изучить "на ходу". (впрочем, из-за этого этот текст и появился)
Я буду писать сюда то, что не смог найти в интернете сразу или считаю очень важным.
- Создайте ФС
- В пустой ФС создайте subvolume, который будете использовать как корневой. Я предпочитаю
@
и буду использовать это имя дальше, тогда команда:sudo btrfs subvolume create @
- Укажите
subvol=@
в опциях монтирования в fstab (или в вашем менеджере точек монтирования)
Не указывайте созданный сабволюм как сабволюм по умолчанию (btrfs subsolume set-default
). Так просто проще.
- Смонтируйте вашу файловую систему без опции
subvol
. Можно добавить запись в fstab без такой опции для удобства - Перейдите в точку монтирования и (опционально) создайте там папку со снепшотами. Я использую
snapshots
и буду использовать это имя дальше. - Сделайте снепшот
btrfs subvolume snapshot исходный_сабволюм путь_к_снапшоту
. Лучше всего добавить флаг -r, чтобы снапшот нельзя было изменить (read-only).
- Запуститесь с другой ФС (с флешки, например)
- Смонтируйте систему без указания опции
subvol
- Переименуйте
@
в@_old
(или во что угодно). - (Если ваш бекап read-only) Создайте read-write снапшот со снапшота-бекапа:
btrfs subvolume snapshot snapshots/my_backup @_new
- Переименуйте новый снапшот в
@
:mv @_new @
- Засуньте куда-нибудь старый снапшот (
@_old
) или удалите (rm -rf
) - Загрузитесь назад в систему
Этот способ только проходит тестированиe (отлично работает на компьютере разработчика). Скрипт разработан не полностью (хоть и готов к работе) и часть функционала подлежит изменению.
- Положите файл
snapshot.sh
в место, куда вы хотите складывать снепшоты (а так же chmod +x и т.д.). Переименовывать нельзя. - Положите файл
create-snapshot-and-backup.sh
куда-нибудь и настройте константы в начале файла - Настройте SSH конфиг у рутового пользователя (чтобы он мог подключиться к вашему серверу), импортируйте свой GPG ключ (им будет шифроваться копия)
- Для бекапа вызовите последний файл от рута с аргументами: тип копии (manual, automatic, там можно любое сочетание символов), ssh хост (как для команды ssh), удалённый путь на удалённом сервере, айди вашего ключа GPG, который доступен с вашего пользователя. Пример:
sudo ./create-snapshot.sh manual RPi /mnt/basic/Backups/DESKTOP-IJK2GUG/snapshots EB32416FC83FF911339E786815C7CA7871925C20