LINUX.ORG.RU

grub rescue no such partition

 ,


0

1

Привет всем! Знаю, что подобная тема задавалась не раз, но, как мне кажется, у меня немного другой случай.

У меня были установлены 2 ОС: Ubuntu и Windows. На жёстком диске были следующие разделы: диски C и D (из Windows), один раздел для Ubuntu, swap и один неразмеченный раздел.

И решил я в Windows с помощью утилиты diskmgmt.msc добавить неразмеченный раздел к диску D, чтобы увеличить место. Я добавил этот раздел, но присоединить к диску D не получилось, после чего я удалил его. Но вместе с тем, раздел, на котором была Ubuntu присоединилась к диску D. Его размер стал больше как раз на такое количество ГБ, сколько было на разделе с Ubuntu и swap.

После перезагрузки на экране только grub rescue no such partition.

Если ввести команду ls, то на экране появится: (hd0) (hd0,msdos5), (hd0,msdos1). До этой проблемы диски D и C определялись в Ubuntu как /dev/sda5 и /dev/sda1. Судя по всему сейчас они определяются как msdos5 и msdos1. Восстановить загрузчик по этой статье http://adw0rd.com/2010/4/5/grub-rescue/#.Ug2uKtL0H38 не получилось. Восстанавливать через установку grub пока не стал, потому что не знаю, сохранятся ли данные на диске D.

Как лучше поступить, чтобы сохранить данные и с Windows и с Ubuntu?

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

Deleted
()

Но вместе с тем, раздел, на котором была Ubuntu присоединилась к диску D
...
на экране только grub rescue no such partition.
...
Восстановить загрузчик ... не получилось.

Что вам там уже восстанавливать, если вы удалили раздел с Ubuntu и расширили ваш «диск D:\» в Windows на это пространство ?

Загрузитесь с LiveCD Ubuntu и покажите вывод

fdisk -l
blkid

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

/dev/sda1 * <здесь описание блоков памяти> HPFS/NTFS/exFAT 

/dev/sda2 <здесь описание блоков памяти> Extended 

/dev/sda5 <здесь описание блоков памяти> HPFS/NTFS/exFAT 

... 

/dev/sdb4 * <здесь описание блоков памяти> W95 FAT 32

sudo blkid 

/dev/loop0: TYPE=«squashfs» 

/dev/sda1: LABEL=«diskc» UUID=«<здесь UUID>» TYPE=«ntfs»

/dev/sda5: LABEL=«diskd» UUID=«<здесь UUID>» TYPE=«ntfs»

/dev/sdb4: LABEL=«Ubuntu 13.0» UUID=«<здесь UUID>» TYPE=«vfat»

/dev/sdb4 - это флешка, с которой загружен LiveCD

SunshineDay
() автор топика
Ответ на: комментарий от SunshineDay
/dev/sda1 * <здесь описание блоков памяти> HPFS/NTFS/exFAT 

/dev/sda2 <здесь описание блоков памяти> Extended 

/dev/sda5 <здесь описание блоков памяти> HPFS/NTFS/exFAT

Ну если это все разделы, что есть на /dev/sda, то разделов с Ubuntu больше нет. Вы может сравнить размер файловой системы NTFS на /dev/sda5 и размер раздела. Если размер файловой системы меньше размера раздела, то, возможно, файловая система с Ubuntu ещё не затёрта.

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

Ну все, ты грохнул свой раздел с убунтой. Переустанавливай. И никогда, слышишь, никогда не используй встроенные виндовые утилиты для задач работы с дисками. Из livecd запускаешь православный gparted и размечаешь веник как тебе угодно. Главное не грохни раздел с виндой :3

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

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

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

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

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

тем более винда не умеет линуксячьи фс. раздел видит, а фс - нет.

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

Может ещё не всё потеряно. Я запустил gparted и там такая ситуация (со скриншотом было бы понятнее, но не могу его скопировать):

/dev/sda1 (диск С)

unallocated - тот самый раздел, который я хотел присоединить к диску D

Далее /dev/sda2, и от /dev/sda2 идут 2 подпункта: unalocated - судя по всему тот раздел, на котором раньше была установлена Ubuntu, и который слился с диском D и сам диск D - /dev/sda5

Идеально было бы восстановить Ubuntu, но если не получится, то переустановить не проблема. Но мне хотелось бы сохранить некоторые файлы с прошлой Ubuntu (скорее всего, раздел unalocated). Как это можно сделать?

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

черт его знает, я в восстановлении инфы не силен. а вот kostik87 возможно поможет.

NeverLoved ★★★★★
()
Ответ на: комментарий от kostik87
sudo fdisk -l /dev/sda

Devise    Boot  Start     End       Blocks     Id System  

/dev/sda1 *     63        245214469 122607203+ 7 HPFS/NTFS/exFAT 

/dev/sda2       286173182 976768064 345297441+ 5 Extended 

/dev/sda5       347614533 976768064 314576766  7 HPFS/NTFS/exFAT
SunshineDay
() автор топика
Ответ на: комментарий от SunshineDay

Весь вывод покажите, где геометрия диска ?

Примерно так:

fdisk -l /dev/sda

Disk /dev/sda: 500.1 GB, 500107862016 bytes, 976773168 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: 0x81668166

Устр-во Загр     Начало       Конец       Блоки   Id  Система
...

Затем можете выполнить вот этот скрипт для поиска начала файловой системы

#!/usr/bin/perl -w
for ($sector = 0; ; $sector++)
{
$offset = $sector * 512;
$cmd = "mount /dev/sda /mnt/tmp -t <FS> -o ro,offset=$offset > /dev/null";
`$cmd`;
print "sector: $sector offset: $offset\n";
die "partition found @ offset $offset!" if ($? == 0);
} 
Вместо <FS> укажите тип файловой системы корневого раздела Ubuntu, скорее всего ext4.
Предварительно создайте точку монтирования /mnt/tmp.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)
Ответ на: комментарий от kostik87
Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors

Units = sector of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0xa133b6d04

А как запустить скрипт? Я попытался смонтировать директорию:

sudo mkdir /mnt/tmp
sudo mount /dev/sda /mnt/tmp -t ext4
Но получил сообщение: mount: wrong fs type, bad option, bad superblock on /dev/sda, missing codepage or helper program, or other error In some cases useful is found in syslog -try dmesg | tail or so

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

Вообще у вас странная ситуация, у вас есть свободное пространство между первым разделом и расширенным в 19,5 Гб.

/dev/sda1 *     63        245214469 122607203+ 7 HPFS/NTFS/exFAT 

/dev/sda2       286173182 976768064 345297441+ 5 Extended 
$ echo $(((286173182-245214469)*512/(1024**3)))
19

И в начале расширенного раздела есть примерно 30 Гб:

/dev/sda2       286173182 976768064 345297441+ 5 Extended 

/dev/sda5       347614533 976768064 314576766  7 HPFS/NTFS/exFAT
echo $(((347614533-286173182)*512/(1024**3)))
29

А как запустить скрипт?

Сохранить приведённый код в файл, дать ему право на выполнение и запустить:

# chmod +x script.pl
# ./script.pl
Ну или
$ sudo chmod +x script.pl
$ sudo ./script.pl
Как найдёте первую файловую систему отпишитесь, только не забудьте указать правильно тип файловой системы.

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

Да, всё верно 19,5 GB - это unallocated следует после /dev/sda1 (диск C). Как я писал, именно это пространство я хотел в Windows совместить с диском D, но не получилось. И в начале расширенного раздела unallocated - 29.30 GB - это то пространство, которое слилось с диском D. Как я предполагаю, именно на этом пространстве раньше была установлена Ubuntu и swap файл.

Извините, я в Linux новичок. Напишите, пожалуйста, в какой директории создать файл скрипта? Видимо из-за того, что нахожусь в режиме LiveCD нет возможности через gui создать файл.

Как узнать тип файловой системы? И как правильно монтировать /mnt/tmp?

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

Как я писал, именно это пространство я хотел в Windows совместить с диском D, но не получилось. И в начале расширенного раздела unallocated - 29.30 GB - это то пространство, которое слилось с диском D

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

Вот вы мне объясните, судя по вашим словам, в вас была такая схема:

------------------------------------------------------------------------------------------------------
| 1 partition              |                          | Extended Partition                            |
------------------------------------------------------------------------------------------------------
| 116 Gb Windows [Drive C] | Unallocated space 19,5 Gb | Ubuntu root | Ubuntu Swap | 300 Gb [Drive D] |
------------------------------------------------------------------------------------------------------
так как вы хотели присоединить свободное пространство, мало того, которое не граничит с расширяемым разделом, а отделено разделом с Ubuntu, так это пространство находится за пределами расширенного раздела ?

в какой директории создать файл скрипта? Видимо из-за того, что нахожусь в режиме LiveCD нет возможности через gui создать файл.

Запустите текстовый редактор gedit, если он есть в LiveCD системе, либо откройте эмулятор терминала и запустите консольный текстовый редактор, например nano. Вставьте код скрипта и сохраните его в '/tmp/script.pl'

nano /tmp/script.pl
После вставки текста скрипта нажмите 'CTRL'+'O' и нажмите ввод. Далее сделайте файл исполняемым.
chmod +x /tmp/script.pl
И запустите
sudo /tmp/script.pl
Да, искать границы корневой файловой системы вы можете с 286173182, а не с 0 сектора, т.е. в скрипте вместо
for ($sector = 0; ; $sector++)
укажите
for ($sector = 286173182; ; $sector++)

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

Согласен с вами, совмещать этот раздел было не самой хорошей идеей тем более под Windows.

Как вы и сказали, подправил строку на for ($sector = 286173182; ; $sector++). Запусти скрипт, получил следующий вывод:

Useless use of a constant ($cmd) in void context at /tmp/script/pl line 6.
Name "main::cmd" used only once: possible typo at /tmp/script.pl line 5.

sector: 286173182 offset: 146520669184

partition found @ offset 146520669184! at /tmp/script.pl line 8.

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

Ну теперь у вас в /mnt/tmp смонтирована корневая файловая система Ubuntu. Можете открыть в файловом менеджере в LiveCD системе эту директорию и просмотреть файлы.

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

Если вам это нужно пишите. В противном случае вы можете скопировать нужные вам файлы.

Жду ответа.

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

Ранее вы написали, чтобы я предварительно создал точку монтирования /mnt/tmp. Я не уверен, что сделал это правильно, потому что, как я ранее писал, на этом этапе возникли ошибки.

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

Ну смонтируйте сейчас:

mkdir /media/ubuntu
mount /dev/sda /media/ubuntu -t ext4 -o ro,offset=146520669184

Смотрите содержимое в /media/ubuntu.

К тому же проверьте что смонтировано сейчас, смотрите вывод:

mount

Вы уверены, что не было отдельного раздела, скажем под /boot ?

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

Получил вот такое сообщение опять:

mount: wrong fs type, bad option, bad superblock on /dev/loop1, missing codepage or helper program, or other error 

In some cases useful is found in syslog -try dmesg | tail or so

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

Да, невнимательно посмотрел ваш ответ в этом сообщении grub rescue no such partition (комментарий), видно

Useless use of a constant ($cmd) in void context at /tmp/script/pl line 6.
Name "main::cmd" used only once: possible typo at /tmp/script.pl line 5.
что скрипт не выполнился, внимательно переносите скрипт и не забудьте указать тип файловой системы.

Используйте скрипт из этого сообщения grub rescue no such partition (комментарий) .

Возможно это особенности интерпретатора perl в LiveCD Ubuntu.

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

Можете такой скрипт использовать:

#!/bin/sh
for ((sector=286173182; sector<=976773168 ; sector++)) 
do
   offset=$(($sector*512))
   cmd="mount -t ext4 /dev/sda /mnt/tmp/ -o ro,offset=$offset"
   echo "sector: $sector offset: $offset";
   $cmd 2>/dev/null && echo "partition found @ offset $offset!" && break
done

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

К сожалению, не получается запустить этот скрипт. С каким расширении нужно его сохранять? Я сохранил с sh, или это не важно?

При запуске появляется сообщение: Syntax error: bad for loop variable.

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

Я пока что не могу попробовать другой LiveCD. Сейчас на компьютере со слетевшей Ubuntu нет подключения к интернету. Как подключу, попробую запустить скрипты ещё раз.

Скажите, они 100% рабочие? У вас они работают?

Можно ли сейчас попробовать отредактировать таблицу разделов с помощью fdisk?

kostik87, в любом случае, спасибо вам огромное за помощь.

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

Скажите, они 100% рабочие? У вас они работают?

Смотрите сами, сверяйте начальные номера секторов разделов, смотрите вывод fdisk (первый блок кода) и номера сектора, на которых останавливается скрипт (монтируется файловая система). Начальные номера секторов, с которых скрипт начинает «поиск», указаны не далеко от границ разделов (файловых систем). После результатов работы скрипта приведён вывод 'losetup -a' с выборкой информации по конкретному устройству, в котором видно, что создано loop устройство, которому сопоставлена область на жёстком диске с некоторым смещением, можете сравнить со смещением, найденным в скрипте. Ну и далее выборка из списка смонтированных файловых систем.

fdisk  -l /dev/sdb

Disk /dev/sdb: 320.1 GB, 320072933376 bytes, 625142448 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: 0xf74ef74e

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1   *        2048      206847      102400    7  HPFS/NTFS/exFAT
/dev/sdb2          206848   163846143    81819648    7  HPFS/NTFS/exFAT
/dev/sdb3       163846935   625137344   230645205    5  Расширенный
/dev/sdb5       163846998   625137344   230645173+   7  HPFS/NTFS/exFAT
Ищем первую файловую систему:
#!/bin/sh
for ((sector=2047; sector<=625142448 ; sector++))
do
   offset=$(($sector*512))
   cmd="mount -t ntfs-3g /dev/sdb /mnt/tmp/ -o ro,offset=$offset"
   echo "sector: $sector offset: $offset";
   $cmd 2>/dev/null && echo "partition found @ offset $offset!" && break
done
# /tmp/script.sh
sector: 2047 offset: 1048064
sector: 2048 offset: 1048576
partition found @ offset 1048576!
losetup -a | grep sdb 
/dev/loop4: [0005]:7288 (/dev/sdb), offset 1048576
mount | grep mnt\/tmp
/dev/sdb on /mnt/tmp type fuseblk (ro,nosuid,nodev,allow_other,blksize=4096)
umount /mnt/tmp

Ищем вторую файловую систему

for ((sector=206840; sector<=625142448 ; sector++))

sector: 206840 offset: 105902080
sector: 206841 offset: 105902592
sector: 206842 offset: 105903104
sector: 206843 offset: 105903616
sector: 206844 offset: 105904128
sector: 206845 offset: 105904640
sector: 206846 offset: 105905152
sector: 206847 offset: 105905664
sector: 206848 offset: 105906176
partition found @ offset 105906176!
losetup -a | grep sdb 
/dev/loop4: [0005]:7288 (/dev/sdb), offset 105906176
mount | grep mnt\/tmp
/dev/sdb on /mnt/tmp type fuseblk (ro,nosuid,nodev,allow_other,blksize=4096)

Ищем третью файловую систему:

for ((sector=163846995; sector<=625142448 ; sector++))

sector: 163846995 offset: 83889661440
sector: 163846996 offset: 83889661952
sector: 163846997 offset: 83889662464
sector: 163846998 offset: 83889662976
partition found @ offset 83889662976!
losetup -a | grep sdb 
/dev/loop7: [0005]:7288 (/dev/sdb), offset 83889662976
mount | grep mnt\/tmp
/dev/sdb on /mnt/tmp type fuseblk (ro,nosuid,nodev,allow_other,blksize=4096)

Можно ли сейчас попробовать отредактировать таблицу разделов с помощью fdisk?

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

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

kostik87, спасибо большое за помощь.

Запустил вчера скрипт, он заработал, но на каждом смещении (offset) выдавалось предупреждение:

mount: wrong fs type, bad option, bad superblock on /dev/loop1, missing codepage or helper program, or other error 

In some cases useful is found in syslog -try dmesg | tail or so

Я скрипт остановил и решил всё-таки переустановить Ubuntu.

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

но на каждом смещении (offset) выдавалось предупреждение:

Это нормальное поведение, вам нужно было ждать строки «partition found @ offset ...»

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