После долгих экспериментов и экспериментов я нашел решение, хотя и с довольно большим компромиссом.
Прежде всего, варианты, которые я должен был исключить:
Наличие второго удаленного ZFS-сервера с зеркальным пулом не было возможным из-за стоимости. Если бы это был вариант, это был бы наилучший подход, использующий отправку / получение ZFS для отправки снимков в удаленный пул.
Наличие второго локального зеркального пула ZFS, с которого я мог бы удалить диски, чтобы забрать их домой. Это более выполнимо, чем первый вариант, но мне понадобится второй пул, чтобы всегда иметь два диска на месте (или использовать две копии данных на одном локальном диске). В настоящее время у меня есть четыре диска, и на сервере больше нет места для пятого. Это был бы справедливый подход, но все же не идеальный.
С помощью ZFS присоединяйте и отключайте, чтобы вращать диск резервного копирования в зеркальный пул и из него. Это хорошо работает, но каждый раз при добавлении диска приходится выполнять полную пересылку. Это занимает недопустимо много времени, поэтому я не мог на это рассчитывать.
Мое решение похоже на использование attach
и detach
, однако оно использует online
и offline
. Преимущество заключается в том, что выполняется повторное преобразование дельты по сравнению с полным восстановлением, но недостатком является то, что пул всегда сообщает о DEGRADED
состоянии (в пуле всегда два диска; вращающиеся offline
удаленные диски помечаются, когда они находятся в удаленном хранилище и в хранилище, а затем подключаются к сети). когда они на месте).
Итак, краткий обзор моей установки:
У меня есть один ZFS-сервер и четыре одинаковых диска. ZFS настроен на использование зеркального пула. Два из четырех дисков являются постоянными членами этого пула. Два других диска вращаются; один всегда находится во внешнем хранилище, другой является частью пула, чтобы действовать в качестве готовой резервной копии.
Когда приходит время вращать резервные копии:
Я жду zfs scrub
завершения, чтобы разумно убедиться, что резервный диск не содержит ошибок
Я zfs offline
диск, который будет удален. После его оффлайн я hdparm -Y /dev/id
бы раскрутил его. Через минуту я частично снимаю салазки диска (этого достаточно, чтобы обеспечить его потерю мощности), а затем оставляю его еще на минуту, прежде чем полностью вытащить диск, чтобы убедиться, что он перестал вращаться. Диск помещается в статическую сумку, а затем в защитный чехол и выходит за пределы площадки.
Я ввожу другой внешний диск. Он устанавливается в поддон для горячей замены и раскручивается. Я использую zfs online
для восстановления диска в пул и запускаю частичное повторное копирование, чтобы сделать его параллельным.
Эта система гарантирует, что в любой момент у меня есть два ONLINE
зеркальных диска и один OFFLINE
удаленный диск (который был очищен). Четвертый диск либо повторно загружается, либо подключается к сети, что дает преимущество в том, что в случае сбоя работающего накопителя, вероятно, пул по-прежнему будет состоять из двух подключенных дисков.
Это хорошо работало последние пару недель, но я все равно считаю это хакерским подходом. Я буду следить, если у меня возникнут какие-либо серьезные проблемы.
Обновление: после работы с этим в течение пары месяцев я обнаружил, что в моем реальном использовании восстановление занимает одинаковое время для отсоединения / подключения и автономного / онлайн-подключения. В моем тестировании я не думаю, что я запускал скраб - мое предположение состоит в том, что если диск для скраба отключен, то для него требуется полная переустановка.