Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В данной статье будет проведено сравнение средств резервного копирования, но сначала стоит узнать, как они быстро и хорошо справляются с восстановлением данных из резервных копий.
Для простоты сравнения будет рассматриваться восстановление из полной резервной копии, тем более что данный режим работы поддерживают все кандидаты. Для простоты цифры взяты уже усредненными (среднее арифметическое из нескольких запусков). Результаты будут сведены в таблицу, в которой также будет информация и о возможностях: наличие веб-интерфейса, простота в настройке и работе, способность к автоматизации, наличие различных дополнительных возможностей (к примеру, проверка целостности данных) и т.п. Графики будут показывать загрузку сервера, где данные и будут применяться (не сервера для хранения резервных копий).
Восстановление данных
В качестве опорной точки будут использоваться rsync и tar, поскольку именно на них обычно основаны простейшие скрипты для снятия резервных копий.
Rsync справился с тестовым набором данных за 4 минуты и 28 секунд, показав
такую нагрузку
Процесс восстановления уперся в ограничение дисковой подсистемы сервера хранения резервных копий (пилообразные графики). Также четко видно загрузку одного ядра без особых проблем (низкий iowait и softirq — нет проблем с диском и сетью соответственно). Поскольку две другие программы, а именно rdiff-backup и rsnapshot, основаны на rsync, а также предлагают в качестве средства восстановления обычный rsync, — у них будет примерно такой же профиль нагрузки и время восстановления резервной копии.
Tar справился чуть быстрее, за
2 минуты и 43 секунды:
Полная загрузка системы была выше в среднем на 20% из-за возросшего softirq — возросли накладные расходы при работе сетевой подсистемы.
Если архив дополнительно сжать, то время восстановления возрастает до 3 минут 19 секунд с
такой нагрузкой на основном сервере (распаковка на стороне основного сервера):
Процесс распаковки занимает оба процессорных ядра, поскольку работает два процесса. В целом — ожидаемый результат. Также сравнимый результат (3 минуты и 20 секунд) получился при запуске gzip на стороне сервера с резервными копиями, профиль нагрузки на основном сервере был весьма похожим на запуск tar без компрессора gzip (см. предыдущий график).
В rdiff-backup можно синхронизировать последнюю сделанную резервную копию с помощью обычного rsync (результаты будут аналогичными), но более старые резервные копии все равно надо восстанавливать с помощью программы rdiff-backup, которая справилась с восстановлением за 17 минут и 17 секунд, показав
такую нагрузку:
Возможно так и было задумано, во всяком случае для ограничения скорости авторы предлагают такое решение. Сам процесс восстановление резервной копии занимает чуть меньше половины одного ядра, с пропорционально сравнимой производительностью (т.е. в 2-5 раз медленнее) по диску и сети с rsync.
Rsnapshot для восстановления предлагает использовать обычный rsync, поэтому его результаты будут аналогичными. В целом, так оно и получилось.
Burp с задачей восстановления резервной копии справился за 7 минут и 2 секунды с
такой нагрузкой:
Отработал достаточно быстро, и, по крайней мере, гораздо удобнее чистого rsync: не надо помнить какие-либо флаги, простой и интуитивный cli-интерфейс, встроенная поддержка нескольких копий, — правда раза в два медленнее. Если данные надо восстанавливать из последней сделанной резервной копии — можно воспользоваться rsync, с небольшими оговорками.
Примерно такую же скорость и нагрузку показала программа BackupPC при включении режима передачи rsync, развернув резервную копию за
7 минут и 42 секунды:
А вот в режиме передачи данных с tar BackupPC справился медленнее: за 12 минут и 15 секунд, нагрузка по процессору при этом была в целом ниже
в полтора раза:
Duplicity без шифрования показал чуть лучшие результаты, справившись с восстановлением резервной копии за 10 минут и 58 секунд. Если активировать шифрование с помощью gpg — время восстановления возрастает до 15 минут и 3 секунд. Также при создании репозитория для хранения копий можно указать размер архива, который будет использован при разбиении потока входящих данных. В целом, на обычных жестких дисках, так же в связи с однопоточным режимом работы, особой разницы нет. Она, возможно, появится при разных размерах блоков, когда используются гибридные хранилища. Нагрузка на основном сервере при восстановлении была такой:
без шифрования
с шифрованием
Duplicati показал сравнимую скорость восстановления, справившись за 13 минут и 45 секунд. Еще порядка 5 минут заняла проверка корректности восстановленных данных (суммарно около 19 минут). Нагрузка при этом была
достаточно высокой:
Когда шифрование aes активировалось внутренними средствами, время восстановления составило 21 минуту 40 секунд, причем загрузка по процессору была максимальной (оба ядра!) во время восстановления; при проверке данных был активен только один поток, занимающий одно процессорное ядро. Проверка данных после восстановления заняла те же 5 минут (суммарно почти 27 минут).
Результат
Чуть быстрее duplicati управился с восстановлением при использовании для шифрования внешней программы gpg, но в целом отличия от предыдущего режима — минимальны. Время работы составило 16 минут 30 секунд, с проверкой данных в 6 минут. Нагрузка была
такой:
AMANDA, использующая tar, справилась за 2 минуты 49 секунд, что, в принципе, весьма близко к обычному tar. Нагрузка на систему в принципе
такая же:
При восстановлении резервной копии средствами zbackup получились следующие результаты:
шифрование, сжатие lzma
Время работы 11 минут и 8 секунд
Время работы 11 минут и 8 секунд
шифрование aes, сжатие lzma
Время работы 14 минут
Время работы 14 минут
шифрование aes, сжатие lzo
Время работы 6 минут, 19 секунд
Время работы 6 минут, 19 секунд
В целом, неплохо. Все упирается в скорость процессора на сервере резервного копирования, что достаточно четко видно по времени работы программы с разными компрессорами. Со стороны сервера резервного копирования запускался обычный tar, так что если сравнить с ним — восстановление работает в 3 раза медленнее. Возможно, стоит проверить работу в многопоточном режиме, с числом потоков больше двух.
BorgBackup в режиме без шифрования справился чуть медленнее tar, за 2 минуты 45 секунд, однако, в отличие от того же tar, появилась возможность дедупликации репозитория. Нагрузка при этом получилась
следующей:
Если активировать шифрование на основе blake, то скорость восстановления резервной копии чуть замедляется. Время восстановления в этом режиме 3 минуты 19 секунд, а нагрузка вышла
такая:
Шифрование aes работает чуть медленнее, время восстановления 3 минуты 23 секунды, нагрузка особо
не поменялась:
Поскольку Borg может работать в многопоточном режиме — загрузка процессора максимальна, при этом при активации дополнительных функций просто растет время работы. По всей видимости, стоит исследовать многопоточность работы аналогично zbackup.
Restic справился с восстановлением чуть помедленнее, время работы составило 4 минуты 28 секунд. Нагрузка при этом выглядела
так:
По всей видимости процесс восстановления работает в несколько потоков, но эффективность не такая высокая, как у BorgBackup, но сравнимо по времени с обычным rsync.
С помощью UrBackup получилось восстановить данные за 8 минут и 19 секунд, нагрузка при этом была
такой:
Все так же видно не сильно высокую нагрузку, даже ниже, чем у tar. Местами всплески, но не более загрузки одного ядра.
Выбор и обоснование критериев для сравнения
Как было сказано в одной из предыдущих статей, система резервного копирования должна соответствовать следующим критериям:
- Простая в работе
- Универсальность
- Стабильность
- Быстрота
Стоит рассмотреть каждый пункт отдельно более детально.
Простота работы
Лучше всего, когда есть одна кнопка «Сделать все хорошо», но если вернуться к реальным программам — удобнее всего будет некоторый привычный и стандартный принцип работы.
Большинству пользователей, вероятнее всего, будет лучше, если не надо запоминать кучу ключей для cli, настраивать кучу разных, зачастую малопонятных опций через web или tui, настраивать оповещения о неудачной работе. Сюда же относится возможность легко «вписать» решение для резервного копирования в существующую инфраструктуру, а также автоматизация процесса резервного копирования. Тут же возможность установки пакетным менеджером, или в одну–две команды вида «скачать и распаковать».
curl ссылка | sudo bash
— сложный метод, поскольку надо проверить, что прилетает по ссылке.К примеру, из рассмотренных кандидатов простым решением является burp, rdiff-backup и restic, имеющие мнемонически запоминаемые ключи для разных режимов работы. Чуть более сложным — borg и duplicity. Самым сложным была AMANDA. Остальные по простоте использования где-то посередине. В любом случае, если надо больше 30 секунд на чтение руководства пользователя, или надо сходить в Google или другой поисковик, а также пролистать длинную простыню help — решение сложное, так или иначе.
Часть рассмотренных кандидатов умеют автоматически отправить сообщение по e-mail\jabber, другие же полагаются на настроенные оповещения в системе. При этом чаще всего сложные решения имеют не совсем очевидные настройки оповещений. В любом случае, если программа снятия резервной копии выдаст ненулевой код возврата, который будет правильно понят системным сервисом периодических задач (улетит сообщение системному администратору или сразу в мониторинг) — ситуация простая. А вот если система резервного копирования, работающая не на сервере резервных копий, не может без настройки, очевидным способом сказать о проблеме — сложность уже избыточная. В любом случае выдача предупреждений и других сообщений только в веб-интерфейс и\или в журнал — плохая практика, поскольку чаще всего они будут проигнорированы.
Что же касается автоматизации — простая программа умеет читать переменные окружения, задающие ее режим работы, либо имеет развитый cli, способный полностью дублировать поведение при работе через веб-интерфейс, к примеру. Сюда же относится возможность поточной работы, наличие возможностей для расширения и т.п.
Универсальность
Частично перекликается с предыдущим подразделом в части автоматизации, не должно быть особой проблемой «вписать» процесс резервного копирования в существующую инфраструктуру.
Стоит отметить, что использование нестандартных портов (ну кроме веб-интерфейса) для работы, реализация шифрования нестандартным способом, обмен данными нестандартным протоколом — признаки неуниверсального решения. По большей части все кандидаты так или иначе их имеют по очевидной причине: простота и универсальность обычно не совместимы. В качестве исключения — burp, есть и другие.
В качестве признака — возможность работы используя обычный ssh.
Скорость работы
Самый противоречивый и спорный пункт. С одной стороны — запустили процесс, он отработал максимально быстро и не мешает основным задачам. С другой — всплеск трафика и нагрузки на процессор на время резервного копирования. Еще стоит отметить, что самые быстрые программы для снятия копий обычно самые бедные по функциям, важным для пользователей. Опять же: если для того, чтобы достать один несчастный текстовый файлик размером несколько десятков байт с паролем, а из-за него стоит весь сервис (да-да, я понимаю, что тут процесс резервного копирования чаще всего не виновен), и надо перечитать последовательно все файлы в репозитории или развернуть целый архив — система резервного копирования ни разу не быстрая. Еще один пункт, который часто становится камнем преткновения — скорость разворачивания резервной копии из архива. Тут явное преимущество у тех, кто может просто скопировать или переместить файлы в нужное место без особых манипуляций (rsync к примеру), но чаще всего проблему надо решать организационным способом, эмпирическим путем: измерять время восстановления резервной копии и открыто об этом сообщать пользователям.
Стабильность
Следует понимать так: с одной стороны, должна быть возможность развернуть обратно резервную копию по-любому, с другой — устойчивость к различным проблемам: обрыв сети, отказ диска, удаление части репозитория.
Сравнение средств резервного копирования
Время создания копии | Время восстановления копии | Простая установка | Простая настройка | Простое использование | Простая автоматизация | Нужен ли клиент\сервер? | Проверка целостности репозитория | Разностные копии | Работа через pipe | Универсальность | Самостоятельность | Прозрачность репозитория | Шифрование | Сжатие | Дедупликация | Web-интерфейс | Заливка в облако | Поддержка Windows | Балл | ||
Rsync | 4m15s | 4m28s | да | нет | нет | нет | да | нет | нет | да | нет | да | да | нет | нет | нет | нет | нет | да | 6 | |
Tar | pure | 3m12s | 2m43s | да | нет | нет | нет | нет | нет | да | да | нет | да | нет | нет | нет | нет | нет | нет | да | 8,5 |
gzip | 9m37s | 3m19s | да | ||||||||||||||||||
Rdiff-backup | 16m26s | 17m17s | да | да | да | да | да | нет | да | нет | да | нет | да | нет | да | да | да | нет | да | 11 | |
Rsnapshot | 4m19s | 4m28s | да | да | да | да | нет | нет | да | нет | да | нет | да | нет | нет | да | да | нет | да | 12,5 | |
Burp | 11m9s | 7m2s | да | нет | да | да | да | да | да | нет | да | да | нет | нет | да | нет | да | нет | да | 10,5 | |
Duplicity | no encryption | 16m48s | 10m58s | да | да | нет | да | нет | да | да | нет | нет | да | нет | да | да | нет | да | нет | да | 11 |
gpg | 17m27s | 15m3s | |||||||||||||||||||
Duplicati | no encryption | 20m28s | 13m45s | нет | да | нет | нет | нет | да | да | нет | нет | да | нет | да | да | да | да | да | да | 11 |
aes | 29m41s | 21m40s | |||||||||||||||||||
gpg | 26m19s | 16m30s | |||||||||||||||||||
Zbackup | no encryption | 40m3s | 11m8s | да | да | нет | нет | нет | да | да | да | нет | да | нет | да | да | да | нет | нет | нет | 10 |
aes | 42m0s | 14m1s | |||||||||||||||||||
aes+lzo | 18m9s | 6m19s | |||||||||||||||||||
BorgBackup | no encryption | 4m7s | 2m45s | да | да | да | да | да | да | да | да | да | да | нет | да | да | да | да | нет | да | 16 |
aes | 4m58s | 3m23s | |||||||||||||||||||
blake2 | 4m39s | 3m19s | |||||||||||||||||||
Restic | 5m38s | 4m28s | да | да | да | да | нет | да | да | да | да | да | нет | да | нет | да | нет | да | да | 15,5 | |
UrBackup | 8m21s | 8m19s | да | да | да | нет | да | нет | да | нет | да | да | нет | да | да | да | да | нет | да | 12 | |
Amanda | 9m3s | 2m49s | да | нет | нет | да | да | да | да | нет | да | да | да | да | да | нет | да | да | да | 13 | |
BackupPC | rsync | 12m22s | 7m42s | да | нет | да | да | да | да | да | нет | да | нет | нет | да | да | нет | да | нет | да | 10,5 |
tar | 12m34s | 12m15s |
Легенда таблицы:
- Зеленый, время работы меньше пяти минут, или ответ «Да» (кроме столбца «Нужен клиент\сервер?»), 1 балл
- Желтый, время работы пять-десять минут, 0.5 балла
- Красный, время работы больше десяти минут, или ответ «Нет» (кроме столбца «Нужен клиент\сервер?»), 0 баллов
Согласно вышеприведенной таблице наиболее простым, быстрым, а вместе с тем удобным и мощным инструментом для резервного копирования является BorgBackup. Второе место занял Restic, остальные рассмотренные кандидаты разместились примерно одинаково с разбросом в один-два балла в конце.
Благодарю всех, кто дочитали цикл до конца, предлагаю обсудить варианты, предложить свои, если есть. По мере обсуждения таблица может быть дополнена.
Результатом цикла станет заключительная статья, в которой будет попытка вывести идеальное, быстрое и управляемое средство для резервного копирования, позволяющее в кратчайшие сроки развернуть обратно копию и вместе с тем — иметь удобство и простоту в настройке и сопровождении.
Анонс
Резервное копирование, часть 1: Зачем нужно резервное копирование, обзор методов, технологий
Резервное копирование, часть 2: Обзор и тестирование rsync-based средств резервного копирования
Резервное копирование, часть 3: Обзор и тестирование duplicity, duplicati
Резервное копирование, часть 4: Обзор и тестирование zbackup, restic, borgbackup
Резервное копирование, часть 5: Тестирование bacula и veeam backup for linux
Резервное копирование, часть 6: Сравнение средств резервного копирования
Резервное копирование, часть 7: Выводы