Восстановить пул ZFS после его создания

Восстановить пул ZFS после его создания

Я переустановил систему Ubuntu 14.04 и попытался смонтировать существующий диск zfs. Это один диск со всеми данными на нем. ОС находится на другом диске, диск zfs содержит только данные.

Имя пула — crystal.

В спешке (да.) я сделалzpool create crystal /dev/disk-by-id/...etc...

Бассейн сейчас пуст.

Есть ли способ восстановить исходный пул и/или извлечь данные?

решение1

К сожалению:Нет, не совсем.

В ZFS есть, как ни странно, в основном две деструктивные операции: zfs destroyи zpool create. В частности, командаzpool destroy являетсянетразрушительно, и на самом деле его довольно легко исправить, если только вы быстро осознаете свою ошибку;он просто устанавливает флаг, и в этом случае zpool import -Dон ваш друг.

Эти команды являются деструктивными по схожим, но немного разным причинам:

  • zfs destroyявляется деструктивным, поскольку он удаляет ссылки на уничтожаемый набор данных, поэтому нет возможности найти его на диске с помощью стандартных инструментов. (Но см. такжеэтот вопрос.)
  • zpool createявляется разрушительным, поскольку он перезаписывает все überblocks пула, что означает, что код ZFS не может найти начало структур данных дерева Merkle на диске. Как только корень дерева не может быть найден, остальные данные становятся недоступными.

Оба эти фактора усугубляются сложным форматом ZFS на диске, что еще больше усложняет любые попытки восстановления. В большинстве других файловых систем файлы будутв целомбыть смежными или в небольшом количестве отдельных мест. С ZFS вполне возможно, что данные будут буквально разбросаны по всему диску, и после любой из приведенных выше команд не останется ничего, что указывало бы, какие части где находятся. Чтобы сделать ситуацию еще хуже, вы, безусловно, ищете сжатые блоки данных, а также, возможно, такие вещи, как дедуплицированные данные. (Дедупликация маловероятна в вашем сценарии, но она, безусловно, возможна в общем случае.)

Этомощьможно привлечь некоторых экспертов ZFS для восстановления ваших данных, но обычные службы восстановления данных вряд ли смогут вам помочь на этом этапе, а общедоступное программное обеспечение для восстановления файловой системы даже не понимает ZFS. Если вы найдете людей, которые захотят работать с вами, это также будеточеньдорого; я видел упоминания о ценахначинаяв пятизначном долларовом диапазоне для аналогичных сценариев.

Лучшим решением на данном этапе, вероятно, будет восстановить последнюю резервную копию данных и продолжить жить дальше.

Честно говоря, я немного озадачен, почему вам удалось перезаписать пул командой, похожей на ту, что указана в вашем вопросе. В моей системе с ZFS On Linux 0.6.4, создав похожий сценарий, zpoolотказывается от createоперации с ошибкой "недопустимая спецификация vdev", в которой говорится, что резервное устройство is part of exported pool '...'. Вы должны были получить похожую ошибку, если только вы явно не передали -fzpool для принудительного выполнения операции, в этом случае вы сообщаете ZFS, что да, вы на самом деле действительнохотетьчтобы сделать это. Которыйособеннов случае ZFS обычнонетчто ты хочешь делать.

Связанный контент