К btrfs приглядывался давно, даже на дисках с различными медиа-данными использовал около года, но расширенной функциональностью этой замечательной файловой системы не пользовался.
А вот появилось обновление — два новеньких SSD, было решено во время переноса системы заодно перейти на btrfs.
Всё отлично — RAID0 для данных RAID1 для метаданных средствами файловой системы, сжатие на лету, корень в одном суб-томе (subvolume), домашняя папка в другом, веб-сайты в третьем. Всё это грузится прямо с UEFI в Linux EFI stub без GRUB и других загрузчиков, работает быстро и удобно.
И вот дошло дело до снимков (snapshot), их я хотел использовать для резервных копий суб-томов средствами всё того же драйвера btrfs.
Поиск выдает несколько релевантных решений, но одни решения слишком громоздки (синхронизация резервных копий, через сеть, создание каких-то репозиториев, вложенных потоков и т.д.) и навязывают свою архитектуру, другие не имеют адекватной ротации резервных копий (можно указать только один интервал и количество копий в нём).
Решение принято — новому инструменту быть!
Получился небольшой скрипт на PHP, который при запуске читает конфигурацию из простого JSON файла вида:
И создает по указанному пути снимок, а так же при повторном запуске контролирует количество снимков, удаляя устаревшие.
В указанном примере конфигурации мы получим папку /backup, внутри которой будут отдельные папки для снимков корня и домашней папки. Снимки создаются только для чтения, таким образом мы имеем прямой доступ к любому снимку с сохранением прав доступа и без опасности повредить созданный снимок.
Так как btrfs поддерживает CoW (Copy on Write), то место занятое снимком определяется количеством и объемом измененных файлов с последнего снимка. При удалении снимка все файлы, которые есть только в нем, и больше нигде удаляются, освобождая свободное пространство.
Итого имеем мгновенный доступ к любому снимку и экономию занятого пространства (что вдвойне правда при наличии сжатия файловой системы).
Добавить сбрасывание последнего снимка (инкрементально) дополнительно на другой btrfs раздел, иначе получается не совсем резервное копирование, а просто машина времени.
Нужно будет добавить в readme настройку создания снимков перед установкой/удалением/обновлением пакетов (тут уже будет нужна помощь сообщества, так как пользуюсь Ubuntu, и не в курсе как сделать такое для систем с RPM или чем-то более экзотичным).
Хорошо было бы создать deb/rpm/? пакеты для популярных (и не очень) дистрибутивов, но раньше этого делать не приходилось, не в курсе что да как.
Возможно что-то ещё подскажете:)
https://github.com/nazar-pc/just-backup-btrfs
Надеюсь, статья и решение будут полезными, делитесь рецептами использования 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 в комментариях.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
А вы используете btrfs?
35.24% Всё ещё не верю что она стабильна117
18.07% Не вижу смысла переходить с другой любимой файловой системы (в комментариях)60
2.41% Нет по другой причине (в комментариях)8
20.78% Задумался, нужно попробовать69
12.95% Использую, но как ext4, без дополнительной функциональности (subvolumes, snapshots, raid)43
10.54% Использую с расширенной функциональностью35
Проголосовали 332 пользователя. Воздержался 121 пользователь.