Odzyskiwanie po awarii „grub rat>” [zamknięte]

25

Pierwotnie opublikowane na AskUbuntu.com ...

AskUbuntu przyjęło politykę zamykania pytań dotyczących wersji EOL (End Of Life). Istnieje również warunek wokalny, aby je usunąć. Aby zapobiec możliwej utracie tego popularnego pytania (dotychczas 342335 wyświetleń), umieszczam tutaj poprawioną wersję. --- docsalvager

System „klasyczny” ...

  • Puppy Linux 5.2.8 (Lucid) oparty na Ubuntu 10.04 (Lucid Lynx)
  • Moduł ładujący GRUB 2

GRUB 2 umieszcza wiele *.modplików (modułów jądra) /boot/grub. Usunięcie tych plików (myśląc, że były to niewłaściwie umieszczone pliki dźwiękowe) spowodowało błąd przy ponownym uruchomieniu i monit grub rescue>.

Jak odzyskać w tej sytuacji?

DocSalvager
źródło
1
Wydaje się, że to głupie pytanie. Oczywiście albo przywracasz usunięte pliki z kopii zapasowej, albo ponownie instalujesz grub (i jest już mnóstwo pytań, jak to zrobić)
psusi
Bezwzględne statystyki oglądalności z przeszłości są tak samo istotne jak statystyki z wczorajszej gazety.
Anthon
Gazety z przeszłości rozwiązały niezliczone przestępstwa i były odpowiedzialne za wiele problemów, dzięki którym świat stał się lepszym miejscem.
DocSalvager,
Wydaje mi się, że uruchomienie z trybu DVD z trybu ratunkowego i ponowna instalacja gruba byłaby prawdopodobnie idealna. Prawdopodobnie jest to o wiele prostsze dla większości ludzi, ponieważ wspomniana utrata danych powinna być ograniczona do plików w pakiecie.
Bratchley,
Nie mówię, że nie sądzę, aby łowienie określonych plików z initrd nie było sprytne. Po prostu myślę, że to może dezorientować ludzi, ponieważ jest to pomocne. Uruchamianie w trybie ratowania / odzyskiwania jest bardziej powszechną procedurą.
Bratchley,

Odpowiedzi:

43

Ta odpowiedź jest dla innych, dla których odpowiedź DocSalvager nie działa.

  1. Śledziłem użycie DocSalvager lsdo znalezienia właściwej partycji dysku twardego. W moim przypadku tak było (hd0,msdos5).
  2. Następnie wykonałem następujące polecenia, aby wrócić do normalnego ekranu programu ładującego gruba.

    grub rescue>  set boot=(hd0,msdos5)
    grub rescue>  set prefix=(hd0,msdos5)/boot/grub
    grub rescue>  insmod normal  
    grub rescue>  normal  
    
  3. Po uruchomieniu w Ubuntu naprawiłem program ładujący grub za pomocą następujących poleceń z terminala.

    sudo grub-install /dev/sda 
    

Odwołaj się do tego źródła, aby uzyskać wizualny przegląd tego procesu.

Gibado
źródło
6
Cieszę się, że
wysłaliście się
2
Idealnie - dokładnie taka pomoc, jakiej potrzebowałem do uruchomienia! Uruchomiłem też sudo update-grubwcześniej grub-install, ponieważ zmienił się mój układ partycji.
mwfearnley
Jak długo trwa insmod normalpolecenie? Po naciśnięciu Enter zawiesza się moje ubuntu. Trzeba jednak przyznać, że „działa” jako maszyna wirtualna w Oracle VirtualBox.
snark
1
Aktualizacja: W końcu wrócił z, error: failure reading sector 0x8019a4 from 'hd0'więc myślę, że to całkiem terminal!
snark
legendarna odpowiedź!
zack
28

Odzyskiwanie po awarii ratowania gruba ...

  • grub rescue>nie obsługuje cd, cpani żadnych innych poleceń systemu plików, z wyjątkiem jego własnej odmiany, lsktóra jest naprawdę rodzajem findpolecenia.
  • Najpierw musiałem znaleźć partycję z /bootkatalogiem zawierającym vmlinuzi inne pliki obrazów rozruchowych ...

    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 bez argumentów zwraca cztery partycje w tym systemie.
    • ls (hd0,4)/bootnie znajduje /bootkatalogu na partycji (hd0,4).
    • ls (hd0,3)/bootnie znajduje /bootkatalogu na partycji (hd0,3).
    • ls (hd0,2)/bootznajduje /bootkatalog na partycji (hd0,2)i zawiera vmlinuzinne potrzebne pliki obrazu rozruchowego.
  • Aby ręcznie uruchomić z grub rescue>wiersza poleceń ...

    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  
    
    • Ustaw, rootaby używać /bootkatalogu na partycji (hd0,2).
    • Załaduj moduł grub linux.
    • Ustaw ten moduł, aby używał obrazu jądra vmlinuz-2.6.32-33-generic.
    • Ustaw initrd (init RAM disk), aby używał obrazu initrd.img-2.6.32-33-generic.
    • Uruchom system Linux.
  • Spowoduje to uruchomienie wiersza polecenia BusyBox, który zawiera wszystkie podstawowe polecenia systemu plików ( a następnie niektóre! ).

  • Następnie może przenieść *.modpliki z powrotem do /boot/grubkatalogu ...

    busybox>  cd /boot  
    busybox>  mv mod/* grub
    busybox>  reboot
    
  • Pomyślne ponowne uruchomienie!

Zobacz też ...

DocSalvager
źródło
Nie mogę znaleźć żadnego folderu rozruchowego na poziomie głównym w BusyBox
souparno majumder
1
Vmlinuz, ... obrazy rozruchowe, których szukasz, mogą znajdować się w głównym systemie plików najwyższego poziomu, więc spróbuj użyć ukośnika. To pokaże także katalogi najwyższego poziomu. Jeśli obrazy rozruchowe nie znajdują się w katalogu głównym najwyższego poziomu, możesz zacząć wypróbowywać najbardziej obiecujące katalogi, aż je znajdziesz. Na przykład: ls (hd0,1)/, ls (hd0,2)/, ls (hd0,2)/initramfs/, itd ..
DocSalvager
W moim przypadku po uruchomieniu ls (hd0,7)/bootpokazuje attempt to read or write outside of disk 'hd0'.
stokrotka
Na dysku hd0 znajduje się mniej niż 7 partycji. Być może na dysku znajduje się nieprzydzielone miejsce, które nie jest częścią żadnej partycji.
DocSalvager,
1
Musiałem ustawić prefiks na / boot / grub, zanim pozwolono mi na uruchomienie insmod linux!
Emil