Помогите плиз восстановить большой раздел

Здесь обсуждаются все вопросы, не попадающие под другие категории
esculap
Заглянувший
Сообщения: 5
Зарегистрирован: 28 окт 2008, 15:39

Помогите плиз восстановить большой раздел

Сообщение esculap »

Hello,

Расскажу я грустную, но поучительную историю. Есть в наличии сервер с рейдконтроллером и двумя массивами на нем и установленной Fedora 8 x86_64, ядро 2.6.24.3-12. Про первый массив вдаваться в подробности не буду, с ним все ok. Второй массив имеет объем 6 террабайт (точнее, чуть меньше, 5 с копейками). Я его разбил parted-ом на три раздела по 1.9 террабайта и взгромоздил xfs. Все три раздела успешно жили и не тужили. В прошлую субботу мне пришлось перегрузить сервер (абсолютно корректно reboot). После загрузки mount отказался монтировать третий раздел sdb3. После обследования получил следующую информацию. Судя по всему, третий раздел в таблице разделов сейчас прописан с совершенно неверными цифрами. А именно:

fdisk -l
Диск /dev/sdb: 5999.9 ГБ, 5999909928960 байт
255 heads, 63 sectors/track, 729447 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00094bb7

Устр-во Загр Начало Конец Блоки Id Система
/dev/sdb1 1 243032 1952148437+ 83 Linux
/dev/sdb2 243032 486063 1952148437+ 83 Linux
/dev/sdb3 218714 461988 1954101562+ 83 Linux
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00094bb7

Устр-во Загр Начало Конец Блоки Id Система
/dev/sdb1 1 243032 1952148437+ 83 Linux
/dev/sdb2 243032 486063 1952148437+ 83 Linux
/dev/sdb3 218714 461988 1954101562+ 83 Linux

То есть sdb3 как бы наложен на sdb1 и sdb2. sdb1 и sdb2 сейчас чувствуют себя нормально, монтируются и работают. То есть, насколько я понимаю, надо прописать в таблицу разделов правильные стартовый и финальный сектора для sdb3. Только как это сделать ? Пробовал использовать sfdisk, но он меня мягко говоря, послал. Сначала я снял дамп с sdb и получил файл следующего содержания:

# таблица разделов /dev/sdb
unit: sectors

/dev/sdb1 : start= 1, size=3904296875, Id=83
/dev/sdb2 : start=3904296876, size=3904296875, Id=83
/dev/sdb3 : start=3513626455, size=3908203125, Id=83
/dev/sdb4 : start= 0, size= 0, Id= 0

/dev/sdb1 : start= 1, size=3904296875, Id=83
/dev/sdb2 : start=3904296876, size=3904296875, Id=83
/dev/sdb3 : start=3513626455, size=3908203125, Id=83
/dev/sdb4 : start= 0, size= 0, Id= 0

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

cat mysdb_sfdisk_new_1
# таблица разделов /dev/sdb
unit: sectors

/dev/sdb1 : start= 1, size=3904296875, Id=83
/dev/sdb2 : start=3904296876, size=3904296875, Id=83
/dev/sdb3 : start=7808593751, size=3909972304, Id=83
/dev/sdb4 : start= 0, size= 0, Id= 0

и скормил его sfdisk-у на запись. Он меня с этим файлом послал следующими ругательствами:
sfdisk -n /dev/sdb < mysdb_sfdisk

Диск /dev/sdb: 729447 цилиндров, 255 головок, 63 секторов/дорожку
Старая ситуация:
Единицы = цилиндры по 8225280 байт, блоки по 1024 байт, начиная с 0

Устр-во Загр Нач Конец #цил #блоки Id Система
/dev/sdb1 0+ 243031- 243032- 1952148437+ 83 Linux
/dev/sdb2 243031+ 486062- 243032- 1952148437+ 83 Linux
/dev/sdb3 218713+ 461987- 243275- 1954101562+ 83 Linux
/dev/sdb4 0 - 0 0 0 Пустой

Новая ситуация:
Единицы = секторы по 512 байт, начиная с 0

Устр-во Загр Начало Конец #секторы Id Система
/dev/sdb1 1 3904296875 3904296875 83 Linux
/dev/sdb2 3904296876 7808593750 3904296875 83 Linux
/dev/sdb3 7808593751 11718566054 3909972304 83 Linux
/dev/sdb4 0 - 0 0 Пустой

Предупреждение: раздел 1 не заканчивается на границе цилиндра
/dev/sdb3 7808593751 11718566054 3909972304 83 Linux
/dev/sdb4 0 - 0 0 Пустой

Предупреждение: раздел 1 не заканчивается на границе цилиндра

sfdisk: Не нравятся мне эти разделы - ничего не изменено.
(Если вы действительно хотите этого, используйте опцию --force.)

Попробовал я его запустить с командой --force (предварительно, на всякий случай, сделав dd if=/dev/sdb of=sdb_part bs=512 count=1). Он это дело проглотил, сказал "записываю .. перечитываю таблицу .. не забудьте подправить fstab .." После этого я предложил ему рассказать про обновленную таблицу разделов и просто офигел, когда увидел в дампе те же самые цифры, что и в самом начале. То есть sdb3 начинался с того же 3513626455 сектора. Вот, собственно, и сказочке конец. Теперь обращаюсь к многоуважаемой общественности. Подскажите пожалуйста почему так неуважительно ведет себя sfdisk и можно ли как-то попытаться прописать правильные цифры для sdb3, дабы попытаться вытянуть этот раздел без переразбиения ?

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Re: Помогите плиз восстановить большой раздел

Сообщение Llama »

этавот
testdist и/или gpart попробуйте.
Опыт растет прямо пропорционально выведенному из строя оборудованию

esculap
Заглянувший
Сообщения: 5
Зарегистрирован: 28 окт 2008, 15:39

Re: Помогите плиз восстановить большой раздел

Сообщение esculap »

Llama писал(а):этавот
testdist и/или gpart попробуйте.
Уже пробовал. gpart вобще не смог разобраться с таблицей, нарисовал во всех разделах нули, а testdisk после анализа предлагает достаточно оригинальное решение. Первые два раздела sdb1 и sdb2 удалить, а третий попытаться восстановить. Я бы может и попробовал этот вариант, предварительно скопировав куда-нибуть содержимое первых двух здоровых разделов, только 4 свободных терабайта для этого на улице не валяются :-). В смысле некуда копировать :-(

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Re: Помогите плиз восстановить большой раздел

Сообщение Llama »

Если у вас первых два раздела созданы верно, то просто в fdisk удаляете третий раздел и создаете его заново на свободном месте (я так понял у вас именно так и было - третий раздел занимал все место после первых двух)

PS: систем-то 64bit ?
Опыт растет прямо пропорционально выведенному из строя оборудованию

esculap
Заглянувший
Сообщения: 5
Зарегистрирован: 28 окт 2008, 15:39

Re: Помогите плиз восстановить большой раздел

Сообщение esculap »

Llama писал(а):Если у вас первых два раздела созданы верно, то просто в fdisk удаляете третий раздел и создаете его заново на свободном месте (я так понял у вас именно так и было - третий раздел занимал все место после первых двух)
Именно так. Но первостепенная задача - вытащить то, что есть на третьем разделе. Удалить его и пересоздать - это крайний вариант.
Llama писал(а):PS: систем-то 64bit ?
Естественно.

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Re: Помогите плиз восстановить большой раздел

Сообщение Llama »

esculap, не-не, тут ничего страшного-то и нет, fdisk не трогает файловую систему органичиваясь partition table, тоесть операция по удалению и созданию раздела в тех же координатах не деструктивна для данных.
На всякий случай, сохраните первый сектор устройства посредством dd в файл - потом можно будет вернуть обратно.
Конечно, если есть место, можно расчитать смещение, сдампить бывший третий раздел в файл и далее смонтировать его лупом, но у вас, как я понял, места нет..
Еще наверное можно попробовать _ОЧЕНЬ_АККУРАТНО_ поиграться с partx/kpartx подсовывая самоедльную таблицу разделов.
Опыт растет прямо пропорционально выведенному из строя оборудованию

esculap
Заглянувший
Сообщения: 5
Зарегистрирован: 28 окт 2008, 15:39

Re: Помогите плиз восстановить большой раздел

Сообщение esculap »

Llama писал(а):esculap, не-не, тут ничего страшного-то и нет, fdisk не трогает файловую систему органичиваясь partition table, тоесть операция по удалению и созданию раздела в тех же координатах не деструктивна для данных.
Тут есть один нюанс. fdisk не понимэ таких больших разделов, поэтому когда я разбивал этот массив, пользовался parted-ом. А parted сейчас при попытке показать список разделов на этом массиве посылает меня с грязными ругательствами:

parted /dev/sdb GNU Parted 1.8.6 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted) print Ошибка: Can't have overlapping partitions.

Возможно, он и согласится просто удалить третий раздел, но вот за него я и беспокоюсь, сделает ли он потом мне раздел, не трогая файловую систему.
Llama писал(а):esculap На всякий случай, сохраните первый сектор устройства посредством dd в файл - потом можно будет вернуть обратно.
Конечно, если есть место, можно расчитать смещение, сдампить бывший третий раздел в файл и далее смонтировать его лупом, но у вас, как я понял, места нет..
А вот это мысль весьма интересная. 2 ТБ я еще могу попытаться высвободить на другом массиве. Тем более, что когда я попытался начать генерить дамп убитого раздела с нужным skip= от начала, то первые символы дампа такие же, как если делать дамп здорового раздела:
XFSB...

Спасибо за дельную мысль.

esculap
Заглянувший
Сообщения: 5
Зарегистрирован: 28 окт 2008, 15:39

Re: Помогите плиз восстановить большой раздел

Сообщение esculap »

Уважаемый Llama! Ваша рекомендация была блестяще воплощена в жизнь. Файлы спасены. Большое человеческое Вам спасибо :)

Ответить