LINUX.ORG.RU

Восстановление ZFS. Поиск удаленного Zvol 4 дня спустя.

 , ,


1

3

Недавно мне довелось столкнуться с задачей, когда клиент случайно удалил важный Zvol, содержащий множество документов пользователей, но его отсутствие заметили, только через на следующий рабочий день + время на ожидание обслуживающего персонала, кода пул активно эксплуатировался (прошло близко к 100 000 транзакций).

Классическое решение с анализом MOS, поиском объектов не увенчалось успехом. Проверка связок UB/MOS также была безрезультатной и фактически отражало лишь последние 20 минут жизни пула. При этом часть связок уже имела явные проблемы неполноты древа из-за перезаписанных блоков с метаданными.

Все осложнялось используемым сжатием LZ4. Коммерческие продукты такие как PC3000Express, UFS Explorer, Klennet Recovery в данной ситуации также ничем не помогли.

Пришлось рассмотреть задачу иначе: написать анализатор объектов ZFS (поиск сжатых и несжатых DMU и Indirect blocks). Собрать информацию с пула и проанализировать осиротевшие метаданные, которых в результате поиска обнаружилось заметно больше, чем через MOS.

Дальнейший метод строился на определении особенностей нужного Zvol, чтобы понять какого рода древо нас ожидает и сколько уровней. Для Zvol с заявленным размером 300ГБ и около 200Гб занятого (фактические в аллокации) и блоке в 64кб нас ожидает структура L3-L2-L1 - L0 (данные).

После того как появилось понимание чего ждать в древе, то был проведен анализ все связок L3-L2 (как приближенная оценка с высокой гранулярностью) чтобы отбросить все то, что не является структурами искомого Zvol.

Дальше выяснилось, что из-за принципа CoW ZFS за 100 000 транзакций уже успела переписать немало. Отдельно целого объекта уже не существует ни в одной копии. Сбор из сотен обрывков в итоге дал результат, что удалось собрать виртуальный диск, который уже содержал около 75-80% живых файлов.

Подробнее я изложил на хабре в публикации «Восстановление данных с ZFS: задача со звёздочкой об удалённом Zvol»

К сожалению там с аудиторией не получилось диалога (он отсутствовал, вероятно сильно специфическая тема). Хотелось бы обсудить с профильным сообществом перспективы развития подобных методов восстановления данных и какие реальные потребности пользователей возникают.

Профильное сообщество рекомендует регулярные бекапы по расписанию на дисковые СХД или ленточные библиотеки.

Нет, вы конечно сделали маленькое чудо, но по факту – нужда в нем возникла только от сломанных процессов у вашего заказчика.

Vsevolod-linuxoid ★★★★★
()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

Резервные копии - это само собой, но хватает случаев, когда своевременно бэкапы не делаются, либо из-за каких-то ошибок неполные или некорректны. Потому конечно интереснее определить вектор беседы в ключе, что делать, когда уже все совсем плохо и как решить. Мной предложена достаточно новая методика реконструкции объектов, пусть и с недостатками.

hddmasters
() автор топика

Если klennet не помог, то скорее всего, данные уже давно ушли в небытие и были переписаны нахрен. Но так как ты написал что-то что помогло больше, чем кленнет, то тут тебе вряд ли кто вообще что-то сказать может. Таких мало, кто настолько глубоко сможет разобраться в устройстве ZFS, ты крут, чувак. Поэтому и диалога не будет - просто на этом уровне никого нету.

anonymous
()

думаю профильное сообщество низкоуровневого ковыряния в системном драйвере ты найдешь нигде в единичных экземплярах, с мира по нитке… :(

pfg ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Если бы везде были правильные бекапы, то отрасли восстановления данных с хранилищ бы не существовало. Но данная тема как раз о ней.

firkax ★★★★★
()

Хотелось бы обсудить с профильным сообществом перспективы развития подобных методов восстановления данных и какие реальные потребности пользователей возникают.

Но что обсуждать именно в техническом плане тут непонятно. В нетехническом: конечно, использование всех шансов восстановить данные вместо того, чтобы сказать «оно повредилось, сделать ничего нельзя» - совершенно правильный подход, но весьма редкий в последнее время, т.к. всем лень нормально работать. Приятно наблюдать что такое всё ещё есть.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Структура хранения описана в драйвере ФС. И документация охватывает далеко не всё к этой ФС. Ты какой-то клоун, что-ли до слов докапываться? Людей, способных настолько низкоуровнево работать с ZFS крайне мало. И вряд ли они сидят на хабрах и ЛОРах.

anonymous
()
Ответ на: комментарий от firkax

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

anonymous
()
Ответ на: комментарий от firkax

Дело не в лени, а в ответственности.

Восстановление данных – всегда без гарантий, даже у ТСа в описанном случае не все восстановилось.

И занимать позицию «если у вас нет бекапов, то считайте, что данные пропали» исполнители часто вынуждены.

Потому что позицию «данные можно попробовать восстановить, но без гарантий» некоторые заказчики трактуют как «бекапы не нужны, если что, восстнановят, а коль не смогут, штраф им».

Потому безопаснее не делать оговорок, а просто говорить «Нет, нужна нормальная СРК».

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от firkax

тыкну в тебя грязным пальцем и скажу, что не думаю, что тс напрямую читал носитель и парсил структуры данных из него в сыром виде…
а используя стандартные функции и структуры драйвера фс написал поверх необходимую логику для поиска неиндексированных кластеров данных.
считай создал собственный рековери удаленного по собственному тз.

pfg ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Заказчики могут думать что угодно, главное чтобы условия договора соблюдали. Оправдывать мыслями каких-то глупых заказчиков свою недобросовестность это крайне сомнительная позиция.

firkax ★★★★★
()
Ответ на: комментарий от pfg

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

hddmasters
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Не все восстановлено лишь потому, что из-за CoW принципа работы файловой системы уже случилась перезапись достаточно большого объема информации на пуле. CoW одновременно и прелесть и проклятье данной файловой системы.

hddmasters
() автор топика
Ответ на: комментарий от pfg

Все же буду надеяться на лучшее. Может и встретятся специалисты, которые расскажут в чем недостатки метода и что я не учел при его реализации.

hddmasters
() автор топика
Ответ на: комментарий от Dimez

Исследовательская работа и разработка программного обеспечения не перекладывала на плечи клиента. Потому цена весьма обычная для DR лабораторий. Точная цена не может быть озвучена по условиям договора с клиентом.

hddmasters
() автор топика
Ответ на: комментарий от ValdikSS

Что-то мне кажется, что мне не совсем туда, учитывая мой профиль деятельности.

hddmasters
() автор топика
Ответ на: комментарий от firkax

В публикации на хабре как раз подробно и изложено как велась разборка сырых данных на пуле и не использовались никакие драйвера. Только прямой доступ к диску с полностью самостоятельным анализом.

В принципе и описано множество проблем на этом пути, которые пришлось преодолеть. Одна из весьма непростых проблем - это определение сжатых блоков, которые в ZFS могут быть произвольного размера. Т.е. такого понятия как кластер в ZFS нет, но хоть есть минимальная единица гранулярности, которая позволяет хоть от чего-то отталкиваться.

hddmasters
() автор топика
Ответ на: комментарий от Dimez

Все очень сильно зависит от сложности конкретной задачи. Восстановление данных из простых поврежденных ZFS пулов может обходиться клиенту от эквивалентна 300$, сложные случаи легко могут перебить цену на порядок и для очень больших систем и того более. Все очень-очень сильно зависит от количества дисков участников, их состояния и сложности организации.

hddmasters
() автор топика
Ответ на: комментарий от hddmasters

Ну учитывая статью - да :)

Тогда на меня с моей ext3 посмотрели как на дурака, сказали, если бы я хотя бы lvm туда накрутил, то точно бы сразу развернули.

Dimez ★★★★★
()
Ответ на: комментарий от Dimez

Тогда на меня с моей ext3 посмотрели как на дурака,

Уже в те времена много для кого Ext2/3 не были проблемой.

сказали, если бы я хотя бы lvm туда накрутил, то точно бы сразу развернули.

Как и LVM при первом столкновении было что-то непонятное, но после нескольких минут в дисковом редакторе стало уже все относительно понятным без чтения документации.

Как обычно играет человеческий фактор. Кто-то действует в рамках доступных инструментов, кто-то выходит за границы их возможностей.

hddmasters
() автор топика

Тут аудитория ещё менее адекватная, начиная с модераторов, хамящих под анонимами, ну а про обычных можно молчать… Максимально токсичный сайт. Лучше напиши статью на английском и выложи… я сайт забыл, там индусы постоянно статьи пишут, так как он деньги платит

anonymous
()
Ответ на: комментарий от anonymous

спасибо, но моего английского хватает только на чтение документации и стандартов. Выкладывать и сомневаться в переводе не очень хочется. Также возникнут некоторые языковые сложности в коммуникации с пользователями.

hddmasters
() автор топика
Ответ на: комментарий от hddmasters

Но вот в мэйл-листах впринципе имеет смысл пообщаться. Так или иначе се, тесто связанные с ZFS - там присутствуют.

anonymous
()

Вопрос есть.

Пытаясь восстановить только что удалённый файл с XFS, нашёл программу xfs_undelete, написаную на tcl.

Она пользуется некоторыми особенностями XFS для нахождения места расположения блоков удалённых файлов и восстанавливает их.

В моём случае это не помогло, т.к. есть ещё одна особенность: если удалённый файл был последним в своём каталоге, то длинна опустевшего каталога зануляется, и найти его предыдущую непустую версию во всём формально свободном пространстве становится просто нереально, т.е. метаданные только что удалённого файла становятся недоступны.

Так вот вопрос про ZFS: у него такое же поведение?

Просто, если это так, то из этого может следовать вывод: для того, чтобы увеличить восстановимость файлов при случайном удалении, в используемой иерархии каталогов в каждом из них нужно держать пустой файл. Это сохранит нужный каталог от обнуления, и, возможно, метаданные самого случайно удалённого из него файла.

Кстати, сами каталоги в ZFS тоже жмутся lz4 при использовании сжатия?

anonymous
()
Ответ на: комментарий от anonymous

Нет. zfs сохраняет все транзакции и при правильной его настройке ты можешь в тупую откатить любую транзакцию в разумных пределах. Он и пишет каждый раз в новое место, не занятое данными предыдущих транзакций.

anonymous
()
Ответ на: комментарий от anonymous

То есть если ты удалил файл «вот прям щас» - обычно добыть его становится не то, чтобы сложно. Даже если ты удалил весь каталог, последний файл в каталоге, тупо затер содержимое файла не теми данными и т.д.

anonymous
()
Ответ на: комментарий от anonymous

при включенном сжатии на пуле будут сжиматься и DMU и Indirect. Несжатыми гарантированно будут vdev+UB и некоторые DMU.

В моем исследовании в случае восстановления Zvol на ZFS нас совершенно не волнуют структуры DMU, которые предшествуют непосредственно 23_DMU_OT_ZVOL, 24_DMU_OT_ZVOL_PROPS, где уже непосредственно начинается описание самого Zvol и далее идёт отсылка к дереву, описывающему размещение.

Возможно есть смысл расширить исследование ZFS, чтобы обратить внимание на наличие некоторых особенностей и можно ли их использовать в восстановлении обычных удаленных файлов при сканировании MOS,а не путём полного анализа всего пространства с распаковкой всего сжатого.

hddmasters
() автор топика
Ответ на: комментарий от anonymous

К примеру на той пуле с которого мне довелось извлекать канувший в небытье Zvol по связкам UB/MOS были доступны разве что последние 20 минут жизни пула и то уже в некоторых версиях были явные признаки перезаписи данных. Я про то, что эти разумные пределы бывают весьма маленькими.

hddmasters
() автор топика
Ответ на: комментарий от hddmasters

Ну так это логично. Если исчерпалось свободное пространство - то ой. Я когда попал на восстановление данных - выяснил, что там по хорошему надо делать магию если блоки 4k. У меня вроде хранилось последних 6 суперблоков, а должно было быть 32 по документации (и мне этого бы хватило, там после записи дичи хоть и в больших объемах прошел час). Из-за этого не смог отревиндиться штатными средствами на нужную транзакцию, ну и пришлось выколупывать данные через klennet. Мне повезло.

anonymous
()
Ответ на: комментарий от anonymous

в том то и дело, что не исчерпалось. Пул на 2 ТБ, а занято только 0,4 ТБ. Но учитывая как оно вразнобой пишет (мигрируя по диску, то за 100к транзакций в моей задаче похоже перезаписало не один десяток гигабайт, что в итоге проредило как старые метаданные, так и данные. Увы но CoW принцип он и прелесть и проклятье.

На диске с какой NTFS, где бы допустим лежали бы VHD файлы и был один улален, за такое время были бы реальные шансы получить удаленный виртуальных диск без повреждений или с заметно меньшими повреждениями, учитывая что реальных данных записано было намного меньше, чем перезаписано из-за принципа CoW на ZFS томе. Но справедливости ради стоит отметить, что при перезаписи одного единственного контейнера MFT могла бы быть утеряна разом вся мета, описывающая удаленный виртуальный диск.

Потому однозначно нельзя сказать, что например с NTFS потери были бы меньше.

hddmasters
() автор топика

Круто, конечно, но никто особо не оценит +). Походишь героем недельку и все забудут +). Проходили - знаем +)

vtVitus ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария