LINUX.ORG.RU

Установщик оффтопа стер раздел с линуксом


0

1

Да, я знаю, что я лоханулся. Прошу камнями не закидывать. Давно еще выделил в начале винчестера раздел 50Гб под винду, но как-то лень было ставить. Сегодня наконец решил установить, при установке аккуратно проверял все настройки, выбрал раздел, куда ставить. Решил восстановить grub, зашел с LiveCD - и увидел в GParted это http://s1.ipicture.ru/uploads/20140405/dLZ5kKUq.png . В «неразмеченных» 44 Гигабайтах было три раздела — под систему, под своп и под бэкап. Слава богу, раздел с данными остался жив. А эти три удалились. Что делать? Пытаться восстановить данные тестдиском? Что мог вообще сделать установщик винды с этими разделами (просто удалить, отформатировать, и т.д.)?



Последнее исправление: Gorthad (всего исправлений: 2)

Интересно было бы узнать причину. Может быть произошла кривая конвертация из MBR в GPT или обратно? Или при установке вы не просто отформатировали раздел, а удалили и создали заново и он как-то захватил часть следующего? Или это всё-таки человеческий фактор?

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

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

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

Для начала дайте вывод fdisk -l и gdisk -l /dev/sda чтоб было понятно, что там у вас, MBR или GPT, далее, раздел с данными монтируется?

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

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

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

Раздел с данными смонтирован, правда содержимое в данный момент открыть не могу, потому что запущен testdisk в режиме deep search (в обычном режиме он не увидел своп-раздел). На жестком диске была разметка MBR.

Вывод gdisk:

sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.1

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format.
***************************************************************

Disk /dev/sda: 1953525168 sectors, 931.5 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): A0F69D1C-55EE-4F1A-93D4-22294D094190
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 2048-sector boundaries
Total free space is 92286317 sectors (44.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       104857599   50.0 GiB    0700  Microsoft basic data
   5       197140480      1953523711   837.5 GiB   8300  Linux filesystem
Gorthad
() автор топика
Ответ на: комментарий от Gorthad

Тогда мне нужен вывод не gdisk, а fdisk, gdisk нужен был только чтоб узнать, нет ли gpt.

А так ты не помнишь, где твои разделы были?

Своп можно и не искать, так как конец раздела можно определить по концу файловой системы, которая имеет свой размер, который в норме меньше или равен размеру раздела.

Ещё parted умеет искать и восстанавливать кстати. Но я бы не советовал работать с таким когда что-то смонтировано.

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

Нет, точно не помню, даже не уверен в каком порядке они были расположены, были два диска по ~20 Гб, остальное под своп.

Еще важный вопрос. Я первый раз пользуюсь утилитой testdisk, включил deep search, и он мне сейчас вот это выдает: http://s1.ipicture.ru/uploads/20140405/iAqLwnTV.png Как я понял, он роется в логах. Дело в том, что я за историю винчестера несколько раз менял разметку диска, вот он видимо с помощью deep search и находит все это... Что меня ожидает по окончании процесса? Он предложит мне все возможные варианты и скажет — выбирай, или все же выдаст самую последнюю и вероятную? Имеет смысл продолжать глубокий поиск или остановить его?

Вывод fdisk: (/dev/sdb - это liveCD)

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00054de0

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   104857599    52427776    7  HPFS/NTFS/exFAT
/dev/sda2       104859646  1953523711   924332033    5  Extended
Partition 2 does not start on physical sector boundary.
/dev/sda5       197140480  1953523711   878191616   83  Linux

Disk /dev/sdb: 1040 MB, 1040187392 bytes
1 heads, 32 sectors/track, 63488 cylinders, total 2031616 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe5ab1de7

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *          32     2031615     1015792    b  W95 FAT32

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

Я бы предложил начать с бэкапа этого 50ти гигового раздела, прежде чем пытаться что-то сделать с ним (если там есть что-то ценное).

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

А как это лучше всего сделать? Там же неразмеченное пространство.

Относительно ценное... Систему не так уж сложно переустановить.

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

Вчитался и понял что не то. Копировать весь sda2 конечно жирно.

iff
()

Воспользовался, блин, testdisk'ом. После того, как тестдиск сделал то, что посчитал нужным, у меня GParted и программа установка ОСи вообще не видит разметку (говорит, сумма разделов превышает размер диска). Оно и неудивительно, что за чушь он наделал?

Вот что выдает fdisk -l:

xubuntu@xubuntu:~$ sudo fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00054de0

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   104857599    52427776    7  HPFS/NTFS/exFAT
/dev/sda2       104859648   146802687    20971520   83  Linux
/dev/sda3       155197440   197138431    20970496   83  Linux
/dev/sda4       197138466  1953536129   878198832    f  W95 Ext'd (LBA)
Partition 4 does not start on physical sector boundary.
/dev/sda5       197140480  1953523711   878191616   83  Linux

Disk /dev/sdb: 1040 MB, 1040187392 bytes
1 heads, 32 sectors/track, 63488 cylinders, total 2031616 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe5ab1de7

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *          32     2031615     1015792    b  W95 FAT32

Помогите, что делать, потому что это уже не смешно, мне бы теперь систему поставить хотя бы. Как удалить этот гребаный /dev/sda4?

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

Вывод fdisk: (/dev/sdb - это liveCD)

Да, разделы действительно уплыли.

Он предложит мне все возможные варианты и скажет — выбирай, или все же выдаст самую последнюю и вероятную? Имеет смысл продолжать глубокий поиск или остановить его?

Не имею понятия, не пробовал. Но скорее всего первое. А что выдал неглубокий поиск?

Как я понял, он роется в логах.

В каких логах?

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

mount -o loop,ro,offset=$[197140480*512] /dev/sda /mnt/
Обрати внимание на опции loop и ro, они нужны, чтоб не повредить данные, без них монтировать опасно.

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

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

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

Оно и неудивительно, что за чушь он наделал?

Сам не видишь, что ли? Но главное, разделы 1 и 5 на месте и имеют те же офсеты. Так что ничего совсем уж страшного.

Разделы sda2 и sda3 монтируются? (опции -o loop,ro не забудь) Если нет, удали их. Можешь ещё удалить разделы 4 и 5 и создать sda4 через fdisk с началом в 197140480 и концом в 1953523711

Только не забудь отмонтировать и вообще будь с этим осторожней.

Да, попробуй parted-ом поискать разделы, может он поумнее. Там же вроде режим чтоб только искать смещения, но не воссоздавать их есть? Найдя смещения, пробуешь монтировать по ним, если монтируется — смотришь раздел файловой системы и создаёшь раздел.

И перестань использовать графические утилиты!

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 3)
Ответ на: комментарий от Xenius

Разделы sda2 и sda3 монтируются?

sda3 монтируется, sda2 -

Error mounting: mount: wrong fs type, bad option, bad superblock on /dev/sda2,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

Монтирую не вручную, лайвсиди сам монтирует, раньше все так делал. Это значит, что с sda3 testdisk угадал? Тогда судя по всему своп шел сразу после раздела с виндой.

Можешь ещё удалить разделы 4 и 5 и создать sda4 через fdisk с началом в 197140480 и концом в 1953523711

А это зачем? Нельзя просто удалить sda2 и sda4?

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

Монтирую не вручную, лайвсиди сам монтирует, раньше все так делал.

Не используй таких livecd, используй те, которые сами ничего не монтируют без явного указания.

Это значит, что с sda3 testdisk угадал?

Посмотри содержимое, увидишь. Если там всё в порядке — значит видимо угадал. Хотя ещё с концом раздела мог ошибиться по идее. Ищи теперь ещё один раздел.

А что говорит file -sk /dev/sda2 кстати?

А это зачем? Нельзя просто удалить sda2 и sda4?

sda2 можно удалить, sda4 нельзя, так как это раздел-контейнер внутри которого находится sda5.

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

Посмотри содержимое, увидишь. Если там всё в порядке — значит видимо угадал. Хотя ещё с концом раздела мог ошибиться по идее. Ищи теперь ещё один раздел.

Да, все ок. С концом раздела не похоже, что ошибся.

А что говорит file -sk /dev/sda2 кстати?

/dev/sda2: Linux rev 1.0 ext4 filesystem data, UUID=8aaa37ac-d5e2-4a0a-9e86-bd871cf01db5 (needs journal recovery) (extents) (large files) (huge files)

sda2 можно удалить, sda4 нельзя, так как это раздел-контейнер внутри которого находится sda5.

Тогда не очень понимаю, что не нравится установщику системы и gparted'y. Как сделать так, чтобы они увидели разметку? Почему вместо Extended сейчас W95 Extended (LBA)? Надо, чтобы был первичный раздел (тот, что сейчас с виндой), сразу после него расширенный, в котором система, своп и диск с порно.

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

Спасибо, попробую.

На всякий случай разъясню, что сейчас важно. Testdisk сделал с разметкой диска то, из-за чего разметку не видит GParted и установщик операционной системы. Я не могу понять, что с этим делать

вывод fdisk -l

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00054de0

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   104857599    52427776    7  HPFS/NTFS/exFAT
/dev/sda2       104859648   146802687    20971520   83  Linux
/dev/sda3       155197440   197138431    20970496   83  Linux
/dev/sda4       197138466  1953536129   878198832    f  W95 Ext'd (LBA)
Partition 4 does not start on physical sector boundary.
/dev/sda5       197140480  1953523711   878191616   83  Linux
Gorthad
() автор топика
Ответ на: комментарий от kostik87

grub rescue no such partition (комментарий)

Способ забавный, но в parted есть то же самое. Плюс, мне кажется, что сканировать по одному сектору — очень избыточно, лучше ориентироваться на выравнивание по 2048 секторов, тогда, если раздел был создан в современном дистрибутиве, он будет найден гораздо быстрее.

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

лучше ориентироваться на выравнивание по 2048 секторов

Ну а если раздел был создан давно и начинается с 63 (64) сектора.

С другой стороны нужно найти разделы не от начала ёмкости диска.

Плюс, мне кажется, что сканировать по одному сектору

Скрипт перебирает все сектора, вы же не можете сказать были или нет выровнены границы разделов по номерам виртуальных секторов кратным 8 или нет.

Способ забавный, но в parted есть то же самое.

Ну можно использовать parted, а можно обойтись и подручными средствами, тем более, если parted ну установлен.

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

/dev/sda2: Linux rev 1.0 ext4 filesystem data, UUID=8aaa37ac-d5e2-4a0a-9e86-bd871cf01db5 (needs journal recovery) (extents) (large files) (huge files)

Видимо, не совсем не угадал. А у тебя случайно конфиг /etc/fstab не нашелся в разделе, который восстановился? Там должен быть UUID и можно понять, sda2 — это то или нет.

Как сделать так, чтобы они увидели разметку?

Таблица разделов выглядит работающей, хотя дело скорее всего в разделе типа f вместо 5. А обязательно ли менять, если можно просто не использовать gparted? Есть же fdisk который ничем не хуже.

Спасибо, попробую.

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

(parted) help rescue
rescue START END
rescue a lost partition near START and END START and END are disk locations, such as 4GB or 10%. Negative values count from the end of the disk. For example, -1s specifies exactly the last sector.

Ещё есть такая фича у parted ещё, насколько хорошо работает не знаю.

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

Ну можно использовать parted, а можно обойтись и подручными средствами, тем более, если parted ну установлен.

Зависит от того, какой алгоритм используется в parted

Скрипт перебирает все сектора, вы же не можете сказать были или нет выровнены границы разделов по номерам виртуальных секторов кратным 8 или нет.

Ну а что мешает вначале прогнать по кратным целому мегабайту, потом если не получится, целому сектору и только потом посекторно, если не выровнено. Плюс ты забыл опцию loop в монтировании. Насколько я знаю, просто mount -o ro не гарантирует, что не будет записано ни байта.

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

Ну а что мешает вначале прогнать по кратным целому мегабайту, потом если не получится, целому сектору и только потом посекторно, если не выровнено.

Ни что не мешает, нужно лишь немного подправить цикл в скрипте. Но вот это всё как раз легко и можно сделать скриптом, в котором есть возможность менять алгоритм.

Плюс ты забыл опцию loop в монтировании.

Как раз при монтировании 'mount -o offset=...' в начале создаётся loop устройство и уже затем происходит его монтирование.

Если ты выполнишь монтирование любого раздела диска посредством 'mount -o offset', а затем посмотришь список loop устройств посредством 'losetup -a', то увидишь созданное устройства, на монтируемый диск с определённым смещением.

mount -o offset=$((2048*512)) /dev/sda /tmp/1/
losetup -a
/dev/loop0: [000d]:370 (/dev/sda), offset 1048576

Насколько я знаю, просто mount -o ro не гарантирует, что не будет записано ни байта.

Тут не скажу, но думаю, что это не критично.

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

Как раз при монтировании 'mount -o offset=...' в начале создаётся loop устройство и уже затем происходит его монтирование.

Видимо, опция offset= автоматически добавляет опцию loop по крайней мере, в твоей системе, но мне всё равно кажется правильней указывать её явно на всякий случай: mount -o ro,loop,offset=...

Ни что не мешает, нужно лишь немного подправить цикл в скрипте. Но вот это всё как раз легко и можно сделать скриптом, в котором есть возможность менять алгоритм.

Вероятно. ты прав, так как опция rescue в parted не выглядит настолько гибкой.

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

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

Таблица разделов выглядит работающей, хотя дело скорее всего в разделе типа f вместо 5. А обязательно ли менять, если можно просто не использовать gparted? Есть же fdisk который ничем не хуже.

Дело даже не в GParted, а в установщике. Я систему не могу поставить. И я не думаю, что виноват GParted, потому что разметка действительно выглядит криво, установщик тоже его не видит, еще и один из разделов не монтируется.

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

Дело даже не в GParted, а в установщике. Я систему не могу поставить. И я не думаю, что виноват GParted, потому что разметка действительно выглядит криво, установщик тоже его не видит, еще и один из разделов не монтируется.

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

Ну удали все разделы кроме первого, сохранив оффсеты (используй sfdisk -d например), создай заново те разделы которые нормально работают в виде primary с точно такими же координатами начала и конца, например как третий и четвёртый, а потом у тебя останется второй раздел, его сделаешь как расширенный и туда пихнёшь всё остальное, но перед этим просканируешь пустые пространства с помощью консольного parted и/или скрипта.

Для любых изменений разделов лучше используй fdisk и sfdisk, а не другие утилиты. Но только надо понимать, что ты делаешь.

Или тебе надо подробно описать все шаги и скрипт под твои нужды переписать?

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

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 2)
Ответ на: комментарий от Xenius

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

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

Для любых изменений разделов лучше используй fdisk и sfdisk, а не другие утилиты. Но только надо понимать, что ты делаешь.

Чистый диск я бы предпочел бить всё-таки GParted'ом, потому что да, я не такой продвинутый юзер, и кнопка «сделать хорошо» очень кстати. Но сейчас другой случай - поэтому буду низкоуровневые утилиты изучать - полезно, заодно и бэкап теперь свежий будет на выносном носителе. На данный момент копирую нужные файлы, как докопируются - приступлю.

Или тебе надо подробно описать все шаги и скрипт под твои нужды переписать?

Да нет, спасибо, я разберусь. Появятся вопросы - напишу сюда. Пока только один вопрос: в mount опция offset - это начало раздела, как я понимаю? А конец он сам находит? И еще: cfdisk - это как GParted, только с псевдографическим интерфейсом, ее тоже нет смысла сейчас использовать?

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

И еще: cfdisk - это как GParted, только с псевдографическим интерфейсом, ее тоже нет смысла сейчас использовать?

Скорее fdisk с псевдографикой, но думаю что использовать не стоит, он иногда отказывается запускаться если ему не нравится таблица разделов. Да и через fdisk тоже не всё можно сделать, для кое-каких задач я не придумал ничего лучше чем дамп с помощью dd таблицы разделов с последующим редактированием.

в mount опция offset - это начало раздела, как я понимаю? А конец он сам находит?

Есть две вещи: размер файловой системы и размер раздела. И файловая система и раздел — это разные вещи.

Для монтирования достаточно указать начало файловой системы, а её размер прописан в ней самой.

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

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

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

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

Разумно. Спасибо за развернутый ответ.

Когда меняют размер раздела, делают так

Кто делает? все нормальные программы именно это подразумевают под «изменением раздела»?

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

Кто делает? все нормальные программы именно это подразумевают под «изменением раздела»?

Насчёт программ не знаю, я имел ввиду изменение вручную (fdisk + resize2fs / ntfsresize / etc вместо parted и подобных), но в любом случае это безопасней, в случае, если программа будет прервана на середине. Если делать не так как я описал, то в таком случае может получиться кусок данных файловой системы вне раздела и потенциальная потеря данных при попытке монтирования.

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

Решил просканировать вышеуказанным скриптом с конца /dev/sda1 до начала /dev/sda3 (104857599 до 155197439). По одному сектору сканировать уж очень долго. Если прописать sector+=2048, то с какого сектора начать, чтобы правильно подобрать кратность?

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

Хотя, не обязательно все сканировать. По-моему, своп я все же в начало поместил, поэтому пройдусь по району конец /dev/sda1 + ~4Gb

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

то с какого сектора начать, чтобы правильно подобрать кратность?

С кратного 2048, так как современные линуксовые средства создания разделов выравнивают начала разделов по умолчанию таким образом.

$ bc -lq
104857599 / 2048
51199.99951171875000000000
2048 * 51199
104855552

4 гигабайта — это примерно 4000 мегабайт, а 2048 секторов по 512 байт — это как раз один мегабайт (точнее мебибайт), то есть 4 тысячи попыток, вероятно это не так уж и много.

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)

Установщик оффтопа стер раздел с линуксом

Бить таких установщиков в щи с вертушки.

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

Видимо, не совсем не угадал. А у тебя случайно конфиг /etc/fstab не нашелся в разделе, который восстановился? Там должен быть UUID и можно понять, sda2 — это то или нет.

Нет, конфига там нет и не должно быть. Если он нашел то, что нужно, то в чем может быть проблема?

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

partition found @ offset 57985204224!

Ураа! И там как раз корневой каталог с системой, то что мне нужно :) И /etc/fstab там же нашелся, вот содержимое.

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda7 during installation
UUID=af801cb4-795c-41e3-9816-0e181d1663ef /               ext4    errors=remount-ro 0       1
# /home was on /dev/sda5 during installation
UUID=2a92c776-281e-4859-b5e0-fd32136116c9 /home           ext4    defaults        0       2
# /media/backup was on /dev/sda8 during installation
UUID=e3b93275-3f48-430c-a50e-cdc6083dceb0 /media/backup   ext4    defaults        0       2
# /media/windows was on /dev/sda2 during installation
UUID=372D4158450E4F14 /media/windows  ntfs    defaults,umask=007,gid=46 0       0
# swap was on /dev/sda6 during installation
UUID=0a4b7392-56e7-46f4-90a0-9778afb8bd75 none            swap    sw              0       0

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

| /media/windows (/dev/sda2) | Swap (/dev/sda6) | / (/dev/sda7) | /media/backup (/dev/sda8) | /home (/dev/sda5) |

Есть способ покопаться в папке с системой и найти информацию о разметке?

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

partition found @ offset 57985204224!

Да, получается, что swap был перед ним и имел размер не более чем 4100 MiB

Кстати, его тоже можно поискать. Восьмой сектор swap-раздела заканчивается на SWAPSPACE2SWAPSPACE2 и большей частью эти секторы заняты нулями. Можно глянуть спецификацию swap-а чтоб определить его точный размер. Он наверняка где-то в сигнатуре указан.

Ураа! И там как раз корневой каталог с системой, то что мне нужно :) И /etc/fstab там же нашелся, вот содержимое.

Теперь тебе нужно узнать точный размер файловой системы. Похоже, тут поможет команда типа dumpe2fs /dev/loop0 | grep ^Block (используй вначале losetup -a чтоб узнать имя устройства)

Есть способ покопаться в папке с системой и найти информацию о разметке?

Есть и я его тебе уже сказал — посмотреть /etc/fstab

По нумерации должно быть понятно, какой раздел был primary (sda2) а какие были логическими — все остальные с номерами от 5. Полагаю, их порядок 5-6-7-8 указывает какой был за каким.

Далее, тебе нужно прочитать, как работают расширенные разделы, например здесь http://en.wikipedia.org/wiki/Extended_Boot_Record

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

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

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

Ещё как вариант ты можешь попробовать перейти на GPT, но тебе нужно будет убедиться что у тебя свободны несколько секторов в конце диска, чтоб там могла разместиться её копия. Возможно придётся уменьшить последний раздел. Вроде как в GPT все разделы определяются в основной таблице. Правда тогда Windows скорее всего не будет загружаться.

А зачем тебе сохранять порядок разделов? Всё равно же в fstab всё монтируется по UUID

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 2)
Ответ на: комментарий от Xenius

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

ты можешь случайно затереть сектор с данными.

А вот это плохо. Сколько данных я могу потерять, если границей раздела наеду на данные в файловой системе? Потому что тестдиск по ходу это делал.

Полагаю, их порядок 5-6-7-8 указывает какой был за каким.

Вот оно меня и настораживает, потому что sda5 совершенно точно в конце диска, а еще непонятно, почему винда расположена на разделе sda2, а не sda1

Gorthad
() автор топика
Ответ на: комментарий от Xenius
Block count:              5242880
Reserved block count:     262144
Free blocks:              2858501
Free inodes:              985475
First block:              0
Block size:               4096
5242880 * 4096 / 512 = 41943040 size
partition found @ offset 57985204224 / 512 = 113252352 начало раздела
113252352 + 41943040 = 155195392 конец раздела

Всё верно?

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

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

Просто для полноты восстановления. В общем-то незачем.

Есть dd.

for ((sect=0; sect>-1; sect+=2048)); do echo -n $'\r'"OFFSET:$[sect*512]"; dd if=/dev/sda bs=4096 count=1 skip=$[sect/8] 2> /dev/null | tail -c10 | grep -q SWAPSPACE2 && echo && echo $sect && break; done

Примерно так, хотя за правильность не ручаюсь.

Сколько данных я могу потерять, если границей раздела наеду на данные в файловой системе? Потому что тестдиск по ходу это делал.

По одному 512-байтному сектору на логический раздел, я так понимаю. С помощью debugfs можно даже узнать, какому файлу этот сектор принадлежал, если он был не на свободном месте.

Вот оно меня и настораживает, потому что sda5 совершенно точно в конце диска

А какая разница? Разделы не обязаны быть расположены в том же порядке, что и на диске. Но по-моему без разницы, как их называть, если монтируешь по UUID, разве что ещё в конфиге груба проверь параметр root=

Всё верно?

Вроде верно, но можешь ещё прозондировать с помощью dd + hexdump -C например место между разделами. Ну и не забывай, что раздел должен быть не меньше чем файловая система, а утилиты разбивки могут округлить заданное тобой значение в меньшую сторону. А может быть лучше создать таблицу разделов в текстовом файлике, и скормить sfdisk, если что-то будет не так, откатишь, он умеет (главное не забудь что там есть ключи чтоб сохранить изменённые сектора)

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

Короче, восстановил разметку (с помощью fdisk), спасибо всем, кто отписался в этой теме, особенно Xenius и kostik87! Единственное что, в вычислениях, что я написал выше, границу надо было на 1 сектор меньше взять.

и скормить sfdisk, если что-то будет не так, откатишь, он умеет (главное не забудь что там есть ключи чтоб сохранить изменённые сектора)

Вот это хорошая опция, запомню на будущее.

Gorthad
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.