Восстановление набора данных ZFS
Я неожиданно удалил свой набор данных ZFS из пула ZFS. Я делаю это из GUI Nas4Free. В логах это было что-то вроде "ZFS destroy Main / Video". Затем я воссоздаю набор данных с тем же именем (Main/Video), и теперь все данные, которые были в этом наборе данных, исчезли. Можно ли восстановить информацию из удаленного набора данных или самого набора данных? Я настроил ежедневные снимки, но, насколько я понимаю, они хранятся в наборе данных, поэтому я не могу получить к ним доступ, не восстановив его набор данных.
1 ответ
В зависимости от того, как долго пул находился в сети после ошибки, а также от того, насколько пул был занят в течение этого периода, может быть возможно откатить его до предыдущей группы транзакций (т. Е. Использовать более старый uberblock), где файловая система еще присутствовала.
Вот скрипт, который использует этот подход:
http://www.solarisinternals.com/wiki/index.php/ZFS_forensics_scrollback_script
Вы должны работать с копией вашего диска (дисков), так как попытка восстановления разрушительна.
Ответ "откат к более раннему txg" - хороший ответ, если вы можете справиться с возвратом пула в более раннее состояние, а также повредите небольшой объем данных во всем zpool и верните все другие изменения zpool обратно в более раннее состояние.(ура!). Когда вы это делаете, ZFS заменяет старый "уберблок" обратно в корень своего дерева метаданных, что указывает на старую версию дерева блоков для вашего zpool. Вот загвоздка: если вы записали данные с тех пор, любые блоки, которые были перезаписаны в вашем пуле, будут свободным пространством в представлении новейшей версии, что означает, что данные бессмысленны, и он может использовать пространство для хранения новых записей. Если это произойдет, блок больше не будет соответствовать контрольной сумме, хранящейся в старой версии дерева блоков, что приведет к повреждению. Это может произойти с чем угодно в том же zpool, который был перезаписан, как для блоков данных файлов, так и для метаданных файловой системы, причем последнее менее вероятно, поскольку большинство пулов настроено на создание двух копий блоков метаданных.
Есть способ сделать это безопасно и без повреждений, однако это нужно спланировать заранее. Перед удалением файловой системы / zvol запустите
zpool checkpoint
- это дает, по сути, те же функции, что и сброс на более ранний уберблок, за исключением того, что гарантированно не повредит измененные данные и обеспечивает гораздо лучший пользовательский интерфейс, в котором вы не можете случайно сломать что-то. Автор этой функции написал хорошее описание того, как использовать его здесь.