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
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śnieniecp -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
- Dla bezpieczeństwa:
- 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
- Usuń wynik działania
-
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ącupdate-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.
/dev/sdb1
nie jest gdzie BIOS szuka MBR, ' znajduje się w/dev/sdb
, czyli w pierwszym sektorze dysku.grub-install /dev/sdb --root-directory=/media/new_drive/
zamiast sdb1