Mam wirtualną skrzynkę działającą z CentOS.

Podłączyłem nowy wirtualny dysk do istniejącej maszyny wirtualnej CentOS i „m teraz próbuję zainstalować GRUB na tym nowo podłączonym dysku.

Później przywołam drugą maszynę wirtualną z nowo przygotowanym bootowalnym dyskiem twardym z niestandardowym głównym systemem plików i jądrem.

I próbowali wykonać następujące czynności:

  • Dołączono nowy dysk wirtualny do istniejącej działającej maszyny CentOS.
  • Utworzono nową partycję z fdisk /dev/sdb. Podczas partycjonowania wybrałem opcje partycja podstawowa, partycja numer 1 i inne opcje domyślne.
  • Sformatowałem dysk za pomocą mkfs.ext3 /dev/sdb1.
  • Zamontowałem dysk na /media/new_drive.
  • Zainstalowano GRUB grub-install /dev/sdb1 --root-directory=/media/new_drive/.

Następnie druga maszyna wirtualna z nowo przygotowanym dyskiem twardym nie uruchomiła się; Pojawił się błąd: could not read from the boot medium. Wygląda na to, że MBR nie jest aktualizowany po grub-install, ale widzę GRUB zainstalowany pod /boot/grub na nowym dysku.

Ale najgorsze jest to, że uszkodził mój istniejący GRUB CentOS: maszyna wirtualna CentOS zawiesza się, pokazując czarny ekran z jedynym tekstem GRUB.

Dlaczego czy grub-install /dev/sdb1 nie modyfikuje MBR sdb1? Czy to nie jest właściwy sposób instalowania GRUB-a na nowym dysku?

Komentarze

  • /dev/sdb1 nie jest gdzie BIOS szuka MBR, ' znajduje się w /dev/sdb, czyli w pierwszym sektorze dysku.
  • czy masz na myśli, że muszę użyć grub-install /dev/sdb --root-directory=/media/new_drive/ zamiast sdb1
  • tak, dokładnie to oznacza @wurtel
  • Tak. Zakładając, że ' umieściłeś odpowiedni główny system plików w tej lokalizacji (nie ' nie widzę wspomnianego kroku między montowaniem a uruchomieniem grub -install).
  • Spróbuję z / dev / sdb, tak nie ' t sięgnąć do umieszczenia głównego systemu plików, pomyślałem, że najpierw spróbuję pokazać w górę ekranu grub.

Odpowiedz

Nie jestem ekspertem od grub2 (przepraszam), ale spróbuj dodać --skip-fs-probe do twojej linii grub-install, stwierdziłem, że zapobiega to utworzeniu /boot/grub/device.map, co może spowodować uruchomienie do wiersza poleceń grub. Myślę, że bez tego parametr grub-install, zamiast robić to, co mu powiesz, uważa, że jest mądrzejszy od ciebie i może zrobić coś innego.

Inną rzeczą jest upewnienie się, że używasz właściwego grub-install (tj. grub2 a nie dla oryginalnego grub). To nie jest problem, jeśli jesteś w Centos, ale z SystemRecoveryCD obie wersje są dostępne i więc musisz użyć grub2-install. Nauczyłem się na własnej skórze …

I jak zauważył @wurtel (brawo), powinieneś określić dysk, a nie partycję. Grub2 instaluje się w sektorze 0 całego dysku, a ten „stub” uruchamia się w czasie startu, ale musi wiedzieć gdzie się znajduje na dysku, powinien zainstalować pliki do następnego etapu bootowania – tak --root-directory jest dla parametru. (Myślę.)

Czytając man grub-install i googlując Widzę, że --root-directory tak naprawdę nie jest przeznaczone do Grub2 w wersji 1.99 ++, chociaż z mojego doświadczenia wynika, że działa. Masz użyć --boot-directory i odnieść się do rzeczywistego katalogu rozruchowego, więc w ten sposób otrzymasz:

grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot 

Komentarze

  • Moja pierwsza próba była bez partycjonowania i formatowania grub-install /dev/sdb, ale dała błąd. Później próbowałem z dyskiem podzielonym na partycje i sformatowanym, ze sformatowanym dyskiem, którego zawsze używałem / dev / sdb1, spróbuję wzdłuż –skip-fs-probe
  • @Renjith oh, a katalog główny powinien odnosić się do zamontowany punkt montowania podczas uruchamiania grub-install, więc musisz zamontować partycję na nowym dysku, np. w /mnt/sys2, a następnie w wierszu grub-install określ --root-directory=/mnt/sys2. ' jest sprzeczne z intuicją (jak wiele rzeczy z grubego, jak myślę), ale ' tak działa.
  • trochę zmodyfikowałem moją odpowiedź …
  • Gruba używam teraz 0.97, co nie ' nie obsługuje –skip-fs-probe . ale bez tego zadziałało. sdb1 był błędem.
  • ok, cieszę się, że udało Ci się go rozwiązać, to znaczy stary grub, a nie nowszy ' błyszczący ' grub2. Nie ' nie zdawałem sobie sprawy, że RedHat tak wolno przechodził do grub2. CentOS 7 używa grub2, ale CentOS 6 (i wcześniejsze) używa grub.

Odpowiedź

W ten sposób przeniosłem instalację Debiana składającą się z partycji rozruchowej /boot i partycję główną / na nowy dysk i uaktywnij go przy użyciu GNU GRUB :

Klonuj partycje

  • Korzystając z GParted Live CD , utwórz partycję rozruchową i główną na nowej
  • Używając konsoli głównej w GParted, zamontuj starą partycję rozruchową (powiedzmy, że jest to /dev/sda1) i nową partycję (/dev/sdb1): mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
  • Skopiuj dane ze starej partycji rozruchowej na nową: cp -afv /mnt/oldBoot /mnt/newBoot. Wyjaśnienie cp -afv:
    • a oznacza ” archiwum ” co oznacza:
      • nie „t wyłuskiwania linków
      • kopiuj rekurencyjnie (np. -R)
      • zachowaj wszystkie atrybuty (znacznik czasu, właściciel, uprawnienia)
    • f: wymuś, jeśli istnieje plik docelowy nie można go otworzyć, usuń go i spróbuj ponownie
    • v: verbose, wyjaśnij, co się dzieje
  • Spowoduje to wygenerowanie na konsoli danych wyjściowych pokazujących, który plik jest aktualnie kopiowany i czy cp robi postęp
  • Zamontuj i skopiuj pliki ze starej partycji głównej do nowa:
    • Dla bezpieczeństwa: umount /mnt/oldBoot && umount /mnt/newBoot
    • Zamontuj starą i nową partycję główną (zakładając, że jest to „s /dev/sda2 i /dev/sdb2): mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
    • Skopiuj dane a ze starej partycji głównej na nową partycję główną: cp -afv /mnt/oldRoot /mnt/newRoot
  • Edytuj tabela systemu plików , która definiuje, które partycje są montowane podczas rozruchu (użyję do tego Vima):
    • vi /etc/fstab

    • Zauważysz, że istnieją odniesienia do twoich starych partycji. Zamiast tego użyj identyfikatorów UUID nowych partycji

    • Możesz tymczasowo wstawić wszystkie identyfikatory UUID do fstab, aby łatwiej kopiować i wklejać za pomocą :r !blkid

    • Użyj identyfikatorów UUID nowych partycji, aby zmienić wpisy w fstab. Powinny wyglądać mniej więcej tak:

       `# <file system> <mount point> <type> <options> <dump> <pass> # Root partition UUID=76fd1ffd-fb96-4ab4-be1a-42f8e9223983 / ext4 errors=remount-ro 0 1 # Boot partition UUID=e560e29e-8752-4b83-b1ee-4b86c0009f0b /boot ext2 defaults 0 2` 
      • Usuń wynik działania blkid z wstawionego pliku fstab wcześniej za pomocą :r !blkid

Zainstaluj GRUB

  • Zamontuj wirtualne systemy plików GParted Live CD:

    mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys

  • Make narzędzia GRUB z GParted Live CD dostępne dla partycji głównej: mount --bind /usr/ /mnt/newRoot/usr

  • Zamontuj partycję rozruchową na partycji głównej, ponieważ GRUB zapisze swoją konfigurację w /boot: mount /dev/sdb1 /mnt/newRoot/boot

  • Użyj chroot /mnt/newRoot, aby tymczasowo ustawić nową partycję główną jako katalog główny systemu plików

  • Utwórz plik konfiguracyjny GRUB pod adresem /boot/grub/grub.cfg używając update-grub2

  • Zainstaluj GRUB na nowym dysku: grub-install /dev/sdb. Nie wolno tu określać numeru partycji

  • Powrót do systemu plików GParted Live CD: exit

  • Odmontuj partycje: umount /mnt/newRoot/*

  • Wyłącz komputer

  • Jeśli masz podłączonych kilka dysków, upewnij się, że nowszy dysk jest pierwszy w kolejności rozruchu

  • Uruchom komputer

Te instrukcje są inspirowane instrukcjami z oaktreepeak.com .

Alternatywnie możesz podać Clonezilla próba osiągnięcia tego samego.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *