Офис небольшой торговой компании был размещен на цокольном этаже жилого дома, построенного в семидесятые годы прошлого века. За время своего существования дом изрядно обветшал, но продолжал эксплуатироваться с незначительными косметическими ремонтами. Компания хоть и сетовала на неподобающее состояние труб и сантехнического оборудования, но не торопилась за свой счет заниматься решением этих проблем, полагая, что грядущий капитальный ремонт уменьшит их потенциальные издержки. Но, как показали дальнейшие события, не стоит полагаться на голый экономический расчет без учета рисков.
Июньским утром сотрудники компании обнаружили, что вход в офис затоплен и из окон на улицу поступает пар. В срочном порядке была вызвана аварийная бригада, которая прекратила поступление воды в помещение и занялась откачкой. Причиной затопления стала коррозия металла, которая привела к разрушению одного из фитингов на трубе горячего водоснабжения.
Ущерб был нанесен стенам, полам, мебели, бумажной документации и оргтехнике. Наиболее пострадавшими оказались компьютеры, которые находились в серверной-админской и оставались включенными круглосуточно. Накопители, которым пришлось работать, будучи погруженными в горячую воду, представляли собой весьма печальное зрелище.
рис. 1
Проанализировав резервные копии данных, которые находились вне офиса, было принято решение о необходимости восстановления данных с некоторых накопителей. Одним их них был накопитель Samsung HD753LJ.
Примерно в таком состоянии накопитель поступил в нашу лабораторию восстановления данных (на рис. 1 накопитель уже после процедуры очистки от пыли и загрязнений). Известно, что корпус накопителя не герметичен и в нем имеет воздушный фильтр для выравнивания давления внутри накопителя с окружающей средой.
рис. 2
Конструктив накопителя таков, что ось БМГ вкручивается в корпус в отверстие с резьбой и с наружной стороны корпуса заклеивается круглой наклейкой. К сожалению, в нашем случае под воздействием горячей воды наклейка была смыта.
рис. 3
Учитывая, что накопитель находился много часов будучи погруженным в воду с отслоившейся защитной наклейкой, предполагаем, что возможно попадание жидкости внутрь гермоблока. В условиях ламинарного бокса производим вскрытие накопителя. Первичный визуальный осмотр не выявляет какого-либо серьезного попадания жидкости в гермоблок.
рис. 4
Снимаем блок магнитных головок (БМГ) и обследуем отверстие с резьбой в корпусе накопителя и его окрестности, а также сам БМГ под микроскопом. В результате осмотра обнаружены небольшие разводы у самого резьбового соединения, что говорит о том, что жидкости попало достаточно мало и на момент поступления накопителя к нам она уже вся успела испариться. Деформаций подвесок и слайдеров не обнаружено, коммутатор-предусилитель визуально без повреждений. Проводим операцию удаления солей, содержавшихся в жидкости, во избежание разлета пыли по гермоблоку, как на корпусе, так и на самом БМГ. Также замеряем сопротивление всех выводов на колодке от коммутатора-предусилителя и сравниваем его с сопротивлением аналогичного накопителя. Результат проверок позволяет предположить исправность коммутатора-предусилителя. Исходя из того, что серьезных загрязнений не обнаружено, отсутствуют деформации подвесок и слайдеров, а также есть основание предполагать, что коммутатор-предусилитель исправен, приходим к выводу, что нет необходимости производить пересадку пакета дисков в другой корпус и также нет необходимости использовать БМГ от накопителя-донора. Собираем накопитель обратно.
Исходя из результатов первичного визуального осмотра очевидно, что печатная плата «контроллера» данного накопителя деградировала в результате электрохимической коррозии и не может быть использована. В данном семействе (F1_3D) ПЗУ располагается в MCU Marvell 88i8826E. Учитывая, что неизвестно «жив» ли данный MCU, а также сложность пайки BGA микросхем, варианты с получением оригинального содержимого ПЗУ исключим.
В случае накопителей Samsung данного семейства применима методика Hot swap. Прочитав модули микропрограммы, можно установить версию оригинальной микропрограммы, а также понять, помещался ли код микропрограммы целиком в ПЗУ микроконтроллера или для его хранения использовались оверлеи в служебной зоне.
рис. 5
Проведя анализ модуля FSI, мы установили версию микропрограммы 1AG08ugB.d35. Оценивая содержимое модулей 73_MOVLY, 19_BOVLY, обнаруживаем, что они целиком заполнены нулями. Данное наблюдение позволяет сделать вывод, что для восстановления данных можно использовать практически любое ПЗУ с совместимым идентификатором платформы, которое не использует модули 19 и 73 для хранения исполняемого кода.
Используем плату донора, в которую запишем ближайшее совместимое ПЗУ Ближайшая версия в наличии оказалась 1AA18HuM.d35.
Пробный старт показал в терминале лог с некоторыми сообщениями об ошибках, которые не являются критичными при вычитывании пользовательских данных.
рис. 6
По регистрам накопитель также сообщил о готовности к обмену данными.
рис. 7
В ОЗУ жесткого диска модифицируем количество аппаратных повторов со 100 попыток чтения до 2, чтобы не провоцировать долгие задержки на нечитабельных участках, а также частично отключаем процедуры оффлайн-сканирования.
Создаем задачу посекторной копии на другой накопитель и первым делом строим карту зонного распределения.
рис. 8
Начинаем чтение в UDMA режиме с таймаутом ожидания готовности 300 миллисекунд, с прерыванием операции при обнаружении нестабильности, подачей программного сброса и прыжком на 100 000 секторов вперед.
Обнаруживаются UNC ошибки на секторах 6 24х ххх и 89 36х ххх. Остальные участки читаются без затруднений.
Отправляем накопитель в спящий режим и на копии производим анализ нулевого сектора.
рис. 9
На рис. 9 видно, что присутствуют записи о двух разделах. Первый раздел начинается с сектора 0x0000003F (63) и его длина 0x061A7927 (102 398 247) секторов. Второй раздел начинается с сектора 0x061A7966 (102 398 310), и его длина составляет 0x446AF55B (1 147 860 315) секторов. По смещению 0x1BE находится значение 0x80 – признак активности раздела (раздел является загрузочным). Согласно локализации дефектов очевидно, что они приходятся на первый раздел.
В секторе 63 располагается загрузочный сектор первого раздела, в котором кроме кода загрузчика, передающего управление NTLDR, находятся параметры файловой системы.
рис. 10
Из параметров файловой системы отметим: сектор 512 байт, 8 секторов в кластере, размер раздела в загрузочном секторе соответствует размеру, описанному в таблице разделов.
Первый сектор MFT рассчитывается по формуле: X*Y+Z, где X номер первого кластера расположения MFT, Y – количество секторов в кластере, Z – смещение до начала раздела.
0x00000000000C0000*0x08+0x3F=0x000000000060003F (6 291 519)
Так как по этому смещению у нас недочитанный фрагмент, то рассчитываем позицию MFT Mirror
0x000000000061A792*0x08+0x3F=0x00000000030D3CCF (51 199 183)
По этому смещению нет непрочитанных фрагментов. Определив позицию MFT и проведя анализ ее расположения, строим карту.
рис. 11
Производим чтение частично непрочитанного первого фрагмента MFT. Операция проходит без затруднений.
Проведем анализ записей MFT и сопоставим с картой прочитанного. В итоге обнаруживаем, что дефекты попадают лишь на два файла.
рис. 12
Первый является служебной структурой NTFS, которая некритична.
Второй является файлом виртуальной памяти в Windows и тоже не представляет ценности для Заказчика.
Для уточнения характера дефекта выполняем чтение непрочитанных фрагментов этих файлов, которое покажет наличие сплошь нечитаемых участков по несколько тысяч секторов, что свидетельствует о некорректной работе накопителя в последние минуты.
В качестве заключения хотелось бы снова напомнить всем о необходимости резервного копирования и о том, что копии желательно хранить не в тех же местах, где находятся накопители с основными рабочими данными, так как в случае подобного достаточно легко предугадываемого форс-мажорного обстоятельства пострадать может вся имеющаяся информация.
Автор: Янчарский Павел