О чём кейс: восстановление повреждённых баз данных с трёх накопителей, находившихся в массиве Microsoft Storage Spaces в режиме зеркала.
Задача: собрать воедино ленты данных с трёх накопителей, работавших в массиве в разное время.
Результат: необходимые клиенту данные восстановлены в полном объёме.
Подробности. Представьте: обычный вторник. Обычный рабочий день, всё идет своим чередом. Приходит клиент, кладёт на стойку три серверных SSD (два Micron: 5100 и 5200, и один Intel S4500) и перед началом рассказа просит не смеяться…
В общем, долго ли, коротко ли, но рассказал нам клиент очень интересную историю: обычный корпоративный сервер, на нём стоят не менее обычные серверные SSD-накопители, на которых размещен массив виртуальных дисков (VHDX), а внутри хранятся не менее обычные базы данных 1С (MDF + LDF). SSD-накопители работают в режиме RAID-1, то есть в «зеркале» (данные на одном должны полностью повторять данные на другом, и в случае выхода одного из строя информация остаётся целой, и достаточно просто заменить неисправный накопитель на исправный). Всё работало, никаких проблем не было. Но в один из не менее обычных дней один из накопителей сообщил, что ему стало тяжеловато, и попросился на пенсию. Дело типичное, ничего необычного. Был послан сотрудник с новым, исправным накопителем для замены… И вот тут началась история, на распутывание которой ушло почти 2 года…
Дело в том, что сотрудник, посланный на замену неисправного накопителя, случайно заменил исправный на исправный… Спустя какое-то время другой сотрудник отправился менять диск ещё раз — на этот раз чтобы заменить действительно неисправный. На протяжении какого-то времени данные писались в одну конфигурацию, потом в другую, а затем уже и в третью. Напомню, что данными были базы 1С, которые чрезвычайно капризны и перестают работать при малейших повреждениях БД.
Чтобы восстановить картину действий, клиенту потребовалось почти 2 года — от момента, когда искомые данные стали недоступны, до точки начала событий. Восстановив ход событий, он обратился к нам с просьбой вытащить данные, так как самостоятельно системные администраторы сделать этого не смогли. В целом это неудивительно. Во-первых, восстановление данных — достаточно специфичная ниша. А во-вторых, сама по себе технология Microsoft Storage Spaces несколько отличается в своей реализации от классических уровней RAID. Дело в том, что режим Mirror (зеркальный) позволяет сохранять несколько копий данных на случай отказа. Так, Two-way mirror spaces хранят две копии данных, и с ними вы переживете отказ одного из дисков (как раз наш случай). Для их организации потребуется минимум два диска. Есть ещё Three-way mirror spaces: он позволяет пережить отказ уже двух дисков, а для организации такого массива потребуется минимум пять накопителей.
Никакой современный софт (по крайней мере, из доступных в сети) не работает корректно с данной файловой организацией. Ни R-Studio, ни UFS Explorer, ни их аналоги корректно такие вещи не разбирают и просто разводят руками. Дело в том, что помимо специфичности метода хранения, ситуация усугубилась ещё и тем, что накопители менялись последовательно друг за другом, в разные временные промежутки. Получилась ситуация: каждый из накопителей содержал в себе какие-то валидные куски данных. А вот какие именно и где они лежат — предстояло только узнать.
В процессе работы с этим кейсом, как уже говорили ранее, мы столкнулись с ситуацией, когда ни один существующий продукт не делал то, что нужно. Поэтому, засучив рукава, пришлось писать свой инструментарий для данной системы хранения данных. Спустя определённое время мы смогли собрать утилиты, запустить их, провалидировать ленты данных, собрать цепочки описателей и соединить всё это в виде готовых, а главное — рабочих баз данных.
После таких сложных и нестандартных действий по восстановлению данных, самое лучшее, что можно услышать, — это фраза «работает». Можно и шампанское открывать! Шутка ли: 2 года клиент реконструировал ход событий, мы далеко не один день провели в обнимку с накопителями, и в итоге всё закончилось хорошо. Данные спасены, а мы себе заработали ещё одну ачивку)
