Just backup btrfs

в 9:46, , рубрики: backup, btrfs, linux, резервное копирование, системное администрирование, файловая система

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

А вот появилось обновление — два новеньких SSD, было решено во время переноса системы заодно перейти на btrfs.
Всё отлично — RAID0 для данных RAID1 для метаданных средствами файловой системы, сжатие на лету, корень в одном суб-томе (subvolume), домашняя папка в другом, веб-сайты в третьем. Всё это грузится прямо с UEFI в Linux EFI stub без GRUB и других загрузчиков, работает быстро и удобно.
И вот дошло дело до снимков (snapshot), их я хотел использовать для резервных копий суб-томов средствами всё того же драйвера btrfs.

Поиск выдает несколько релевантных решений, но одни решения слишком громоздки (синхронизация резервных копий, через сеть, создание каких-то репозиториев, вложенных потоков и т.д.) и навязывают свою архитектуру, другие не имеют адекватной ротации резервных копий (можно указать только один интервал и количество копий в нём).

Решение принято — новому инструменту быть!

И что получилось?

Получился небольшой скрипт на PHP, который при запуске читает конфигурацию из простого JSON файла вида:

[
    {
        "source_mounted_volume"         : "/",
        "destination_within_partition"  : "/backup/root",
        "date_format"                   : "Y-m-d_H:i:s",
        "keep_snapshots"                : {
            "hour"    : 60,
            "day"     : 24,
            "month"   : 30,
            "year"    : 48
        }
    },
    {
        "source_mounted_volume"         : "/home",
        "destination_within_partition"  : "/backup/home",
        "date_format"                   : "Y-m-d_H:i:s",
        "keep_snapshots"                : {
            "hour"    : 120,
            "day"     : 48,
            "month"   : 60,
            "year"    : 96
        }
    }
]

И создает по указанному пути снимок, а так же при повторном запуске контролирует количество снимков, удаляя устаревшие.

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

Так как btrfs поддерживает CoW (Copy on Write), то место занятое снимком определяется количеством и объемом измененных файлов с последнего снимка. При удалении снимка все файлы, которые есть только в нем, и больше нигде удаляются, освобождая свободное пространство.

Итого имеем мгновенный доступ к любому снимку и экономию занятого пространства (что вдвойне правда при наличии сжатия файловой системы).

Планы

Нужно будет добавить в readme настройку создания снимков перед установкой/удалением/обновлением пакетов (тут уже будет нужна помощь сообщества, так как пользуюсь Ubuntu, и не в курсе как сделать такое для систем с RPM или чем-то более экзотичным).

Хорошо было бы создать deb/rpm/? пакеты для популярных (и не очень) дистрибутивов, но раньше этого делать не приходилось, не в курсе что да как.

Возможно что-то ещё подскажете:)

Где взять

https://github.com/nazar-pc/just-backup-btrfs

Надеюсь, статья и решение будут полезными, делитесь рецептами использования btrfs в комментариях.

Автор: nazarpc

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js