Pull to refresh

Just backup btrfs

Reading time 2 min
Views 18K
К 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), то место занятое снимком определяется количеством и объемом измененных файлов с последнего снимка. При удалении снимка все файлы, которые есть только в нем, и больше нигде удаляются, освобождая свободное пространство.

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

Планы


Добавить сбрасывание последнего снимка (инкрементально) дополнительно на другой btrfs раздел, иначе получается не совсем резервное копирование, а просто машина времени.

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

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

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

Где взять


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

Надеюсь, статья и решение будут полезными, делитесь рецептами использования btrfs в комментариях.
Only registered users can participate in poll. Log in, please.
А вы используете btrfs?
35.24% Всё ещё не верю что она стабильна 117
18.07% Не вижу смысла переходить с другой любимой файловой системы (в комментариях) 60
2.41% Нет по другой причине (в комментариях) 8
20.78% Задумался, нужно попробовать 69
12.95% Использую, но как ext4, без дополнительной функциональности (subvolumes, snapshots, raid) 43
10.54% Использую с расширенной функциональностью 35
332 users voted. 121 users abstained.
Tags:
Hubs:
+9
Comments 25
Comments Comments 25

Articles