Восстановление после аварии 'grub rescue>' [закрыто]

25

Первоначально опубликовано на AskUbuntu.com ...

AskUbuntu принял политику закрытия вопросов о версиях EOL (End Of Life). Есть вокальный контингент, чтобы удалить их, а также. Чтобы предотвратить возможную потерю этого популярного вопроса (342335 просмотров на сегодняшний день), я размещаю исправленную версию здесь. --- docsalvager

«Классическая» система ...

  • Puppy Linux 5.2.8 (Lucid) на основе Ubuntu 10.04 (Lucid Lynx)
  • GRUB 2 загрузчик

GRUB 2 помещает ряд *.modфайлов (модулей ядра) в /boot/grub. Удаление этих файлов (думая, что они были неуместными звуковыми файлами) привело к ошибке при перезагрузке и появлении приглашения grub rescue>.

Как восстановиться в этой ситуации?

DocSalvager
источник
1
Похоже на глупый вопрос ... очевидно, вы либо восстанавливаете удаленные файлы из резервной копии, либо переустанавливаете grub (и уже есть множество вопросов о том, как это сделать)
psusi
Абсолютная статистика просмотров за последние годы примерно так же актуальна, как и вчерашняя газета.
Anthon
Газеты из прошлого раскрыли бесчисленные преступления и были ответственны за множество решений проблем, которые сделали мир лучше.
DocSalvager
Мне кажется, что загрузка в режим восстановления с DVD и переустановка grub оттуда, вероятно, были бы идеальными. Это, вероятно, намного проще для большинства людей, поскольку упомянутая потеря данных должна быть ограничена файлами в пакете.
Братчли
Нельзя сказать, что я не думаю, что выловить определенные файлы из initrd не очень разумно. Я просто думаю, что это может сбить людей с толку, как и помочь. Загрузка в режиме восстановления / восстановления является более распространенной процедурой.
Братчли

Ответы:

43

Этот ответ предназначен для других, для которых ответ DocSalvager не работает.

  1. Я следил за использованием DocSalvager, lsчтобы найти правильный раздел жесткого диска. В моем случае это было (hd0,msdos5).
  2. Затем я выполнил следующие команды, чтобы вернуться к обычному экрану загрузчика grub.

    grub rescue>  set boot=(hd0,msdos5)
    grub rescue>  set prefix=(hd0,msdos5)/boot/grub
    grub rescue>  insmod normal  
    grub rescue>  normal  
    
  3. После загрузки в Ubuntu я восстановил загрузчик grub с помощью следующих команд из терминала.

    sudo grub-install /dev/sda 
    

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

Gibado
источник
6
Я рад, что вы, ребята, опубликовали до того, как это было закрыто
smac89
2
Отлично - именно та помощь, которая мне нужна для загрузки! Я тоже бегал sudo update-grubраньше grub-install, потому что изменилось расположение моего раздела.
mwfearnley
Как долго длится insmod normalкоманда? После нажатия Enter моя убунту зависает. Правда, он работает в качестве виртуальной машины в Oracle VirtualBox.
snark
1
Обновление: в конце концов он вернулся, error: failure reading sector 0x8019a4 from 'hd0'так что я думаю, что это довольно терминально!
snark
легендарный ответ!
Зак
28

Восстановление после аварийного спасения ...

  • grub rescue>не поддерживает cd, cpили любые другие команды файловой системы , кроме своей собственной вариации , lsкоторые на самом деле своего рода findкоманды.
  • Итак, во-первых, нужно было найти раздел с /bootкаталогом, содержащим vmlinuzи другие файлы загрузочных образов ...

    grub rescue>  ls  
    (hd0,4) (hd0,3) (hd0,2) (hd0,1)  
    
    grub rescue>  ls (hd0,4)/boot
    ... some kind of 'not found' message
    
    grub rescue>  ls (hd0,3)/boot
    ... some kind of 'not found' message
    
    grub rescue>  ls (hd0,2)/boot
    ... grub ... initrd.img-2.6.32-33-generic ... vmlinuz-2.6.32-33-generic 
    
    • ls без аргументов возвращает четыре раздела в этой системе.
    • ls (hd0,4)/bootне находит /bootкаталог на разделе (hd0,4).
    • ls (hd0,3)/bootне находит /bootкаталог на разделе (hd0,3).
    • ls (hd0,2)/bootнаходит /bootкаталог на разделе, (hd0,2)который содержит vmlinuzи другие файлы образа загрузки, которые мы хотим.
  • Чтобы вручную загрузиться из grub rescue>командной строки ...

    grub rescue>  set root=(hd0,2)/boot  
    grub rescue>  insmod linux  
    grub rescue>  linux (hd0,2)/boot/vmlinuz-2.6.32-33-generic  
    grub rescue>  initrd (hd0,2)/boot/initrd.img-2.6.32-33-generic  
    grub rescue>  boot  
    
    • Установите rootдля использования /bootкаталога на разделе (hd0,2).
    • Загрузите модуль grub linux.
    • Установите этот модуль для использования образа ядра vmlinuz-2.6.32-33-generic.
    • Установите initrd (init RAM disk) для использования образа initrd.img-2.6.32-33-generic.
    • Загрузите Linux.
  • Это загружается в командную строку BusyBox, в которой есть все основные команды файловой системы ( а затем и некоторые! ).

  • Затем можно переместить *.modфайлы обратно в /boot/grubкаталог ...

    busybox>  cd /boot  
    busybox>  mv mod/* grub
    busybox>  reboot
    
  • Успешная перезагрузка!

Смотрите также ...

DocSalvager
источник
Я не могу найти загрузочную папку на корневом уровне в BusyBox
souarno majumder
1
Загрузочные образы vmlinuz, ..., которые вы ищете, могут находиться в корневой файловой системе верхнего уровня, поэтому попробуйте использовать только косую черту. Это также покажет каталоги верхнего уровня. Если загрузочные образы не находятся в корневом каталоге верхнего уровня, вы можете начать пробовать самые перспективные из каталогов, пока не найдете их. Например: ls (hd0,1)/, ls (hd0,2)/, ls (hd0,2)/initramfs/и т.д ..
DocSalvager
В моем случае после запуска ls (hd0,7)/bootэто показывает attempt to read or write outside of disk 'hd0'.
Дейзи
На диске hd0 менее 7 разделов. Возможно также, что на диске есть незанятое пространство, которое не является частью какого-либо раздела.
DocSalvager
1
Мне пришлось установить префикс / boot / grub, прежде чем мне разрешалось запускать insmod linux!
Эмиль