GRUB2: Booten Sie von einer zweiten (anderen) Festplatte

10

Ich habe nach dieser Frage gesucht, konnte aber keine klare Antwort finden ... oder sogar eine klare Frage. Ich werde also ein einfaches Beispiel verwenden.

Mein Computer hat ** zwei Festplatten: **

  • Festplatte 1 : Ubuntu Linux mit GRUB2 auf MBR .
  • Festplatte 2 : Jedes andere Betriebssystem (stört es welches?) Mit einem anderen MBR-Loader.

GRUB2 bootet nur unter Ubuntu (in meinem Beispiel auf der 1. Festplatte).
Issuing update-grubnicht erkennen nicht das Betriebssystem auf der zweiten Festplatte, aber ich weiß , es ist eins.
Wenn ich beim Booten das BIOS betrete und die Startreihenfolge auf Festplatte 2 ändere, startet das zweite Betriebssystem OK .

Wie kann ich GRUB2 einen Eintrag hinzufügen , der von der zweiten Festplatte startet ?

(Tatsache ist: Ich denke, diese Frage kann gestellt werden, ohne anzugeben, welches das Betriebssystem auf der 2. Festplatte ist. Oder nicht?)

Hinzufügen einer Ausgabe auf Anfrage os-proberfür eine Beispielmaschine mit dieser Konfiguration:

luis@threepwood:~$ sudo os-prober
/dev/sdb1:Windows 7 (loader):Windows:chain
/dev/sdb7:Ubuntu 14.04.3 LTS (14.04):Ubuntu:linux

In diesem Beispiel (ich habe die Startreihenfolge im BIOS geändert):

  • sdb ist HDD-1.
  • sda ist HDD-2.
Sopalajo de Arrierez
quelle
Es ist bekannt, dass Ubuntu Probleme beim Erkennen von RedHat-basierten Installationen / Bootloader-Einträgen hat, es sei denn, letztere werden zum Zeitpunkt der update-grubAusführung bereitgestellt. Weitere Informationen finden Sie in der Antwort unten von "Radek Radek" (phk). Es sollte jedoch ohne die dort aufgeführten zusätzlichen Schritte erkannt werden, nachdem es bereitgestellt wurde.
ILMostro_7

Antworten:

2

Das ist ganz einfach. Folgen Sie einfach den Schritten.

Beispielszenario:

  • /dev/sda1 - CentOS

  • /dev/sdb1 - Debian

Angenommen, auf dem CentOS-Laufwerk ist der MBR aktiv. Wir haben also nach dem Booten Zugriff auf das CentOS-System. Debian muss hinzugefügt werden.

Aufgaben unter aktivem Betriebssystem (CentOS in unserem Szenario):

  1. mount /dev/sdb1 /mnt/debian

  2. Schneiden Sie den gesamten menuentryAbschnitt von Debian /mnt/debian/boot/grub{2}/grub.cfgwie folgt aus:

    menuentry 'Debian GNU/Linux' --class debian --class gnu-linux ... { ... }

  3. Erstellen Sie nun die Datei: touch /etc/grub.d/11_linux

  4. Da dies ein Skript ist, denken Sie daran: chmod +x /etc/grub.d/11_linux

  5. Hinzufügen:

    #!/bin/sh
    echo "
    

    am Anfang 11_linuxund fügen Sie diesen Abschnitt ein. Fertig mit "am Ende. Also sollten wir haben:

    centos #~> cat /etc/grub.d/11_linux
    
    #!/bin/sh
    echo "menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-78026456-ebcc-4eed-b59d-a3f0bdff7353' {
        load_video
        insmod gzio
        if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  f2de4123-5a98-4568-99dd-e61940b99ab2
        else
          search --no-floppy --fs-uuid --set=root f2de4123-5a98-4568-99dd-e61940b99ab2
        fi
        echo    'Loading Linux 3.16.0-4-amd64 ...'
        linux   /vmlinuz-3.16.0-4-amd64 root=/dev/mapper/Thinkpad--vg-root ro  quiet
        echo    'Loading initial ramdisk ...'
        initrd  /initrd.img-3.16.0-4-amd64
    }"
    
  6. grub2-mkconfig -o /boot/grub{2}/grub.cfg

  7. Starten Sie neu.

Voila.

Radek Radek
quelle
Scheint, als würde nur Schritt 6 das Problem lösen ... os-proberfindet die Installation und fügt sie während des Vorgangs zur Liste hinzu. Wenn Sie also alle Schritte ausführen, werden tatsächlich Duplikate erstellt. Obwohl, das könnte ein Unterschied zwischen grub-mkconfigundgrub2-mkconfig
redbmk
2

Während ich vom USB-Stick in GRUB gebootet habe, habe ich die cTaste für den Befehlszeilenmodus gedrückt und eingegeben

rootnoverify (hd0)
chainloader +1
boot

et voilà, ich habe mir auch GRUB besorgt, aber GRUB 2, versuche es erneut

set root=(hd0)
chainloader +1
boot

Ich bekomme das gleiche Problem wieder gelöst;)

shortStack
quelle
6
Diese Antwort ist nicht leicht zu verstehen. Könnten Sie es bitte zur Verdeutlichung bearbeiten?
Robin Green
1

Hallo, ich hatte gerade das gleiche Problem. Nachdem ich os-prober installiert hatte, konnte grub-customizer mit os-prober das Betriebssystem auf der zweiten Festplatte finden und meinem Startmenü hinzufügen. Dies ist möglicherweise einfacher als das Bearbeiten der Konfigurationsdateien :)

Murray Neish
quelle
1

Normalerweise schreibe ich grub.cfgmanuell und benutze update-grubund habe nie einen sogenannten Master-Grub2-Bootloader, bei dem ich auswähle, von wo aus gebootet werden soll. Dann lasse ich jede Linux-Distribution ihren eigenen Bootloader auf ihrer eigenen Root-Partition installieren, damit Linux seinen eigenen Bootloader bearbeiten kann, ohne ihn zu berühren Mein Master Grub2 Bootloader.

Und um zu einem anderen Festplatten-MBR zu springen, habe ich diese Art von Einträgen grub.cfgfür ein normales Betriebssystem, die die Festplatte nicht so sehen müssen, als ob sie die erste Festplatte wäre:

menuentry "Boot from second disk" {
   chainloader (hd1)+1
}
menuentry "Boot from third disk" {
   chainloader (hd2)+1
}
menuentry "Boot from fourth disk" {
   chainloader (hd3)+1
}

Also lädt es einfach den MBR auf die andere Festplatte, die ich will.

Aber für einige knifflige Linux (und auch einige Windows), die die andere Festplatte so sehen wollen, als ob sie die erste wäre, füge ich auch einige Befehle zu Grub-Menüeinträgen hinzu, also sieht es so aus:

menuentry "Boot from second disk and see it as first disk" {
   set root=(hd1)
   drivemap -s hd0 hd1
   chainloader +1
}
menuentry "Boot from third disk and see it as first disk" {
   set root=(hd2)
   drivemap -s hd0 hd2
   chainloader +1
}
menuentry "Boot from fourth disk and see it as first disk" {
   set root=(hd3)
   drivemap -s hd0 hd3
   chainloader +1
}

Alles im Detail erklärt:

  • (hd #) repräsentiert die Festplatte, wobei # bei Null beginnt

  • drivemap tauscht die Laufwerke aus, sodass jede Festplatte als erste Festplatte oder als beliebige Nummer angezeigt werden kann (die Reihenfolge wird auf zwei sichtbaren Festplatten ausgetauscht).

  • Kettenlader (hd #) + 1 springt zum MBR der Festplatte

  • Kettenlader +1 springt zum ersten Sektor dessen, was auf (root) gespeichert ist

  • set root = ... setzt was (root) haben.

  • (root) ist wie eine Variable, kann verwendet werden, um weniger einzugeben

Die vollständige Dokumentation grub.cfgfinden Sie auf der offiziellen Webseite:

https://www.gnu.org/software/grub/manual/grub/grub.html

Anonym
quelle
0

Ich denke, Sie sollten einen Eintrag für die zweite Festplatte in der Grub-Konfiguration hinzufügen.

Es spielt keine Rolle, welches Betriebssystem das ist.

Ich benutze Dual Book mit Grub2 auf Windows HDD. Es erkennt sowohl Windows als auch Linux und bietet mir ein Menü zur Auswahl eines Betriebssystems zum Booten.

Folgen Sie diesem Link, um eine erweiterte Konfiguration, ein Kettenladen und das Hinzufügen von Maunal-Einträgen zu grub zu erhalten:

https://help.ubuntu.com/community/Grub2/CustomMenus

Ijaz Ahmad Khan
quelle
Ich nehme an, Sie schlagen so etwas vor # grub-install /dev/sdb. Dies würde jedoch das gleiche GRUB-Menü auf HDD-2 replizieren. Kein Problem, aber ... würde das nicht den bereits vorhandenen MBR auf HDD-2 deaktivieren (nehmen wir an, dass dort FreeBSD installiert ist: Es zeichnet seine eigenen Daten auf MBR auf)?
Sopalajo de Arrierez
1
Was ist die Ausgabe des os-prober Befehls?
Ijaz Ahmad Khan
Die Frage ist ein hipothetycal Fall, aber ich habe eine Maschine mit ähnlicher Konfiguration, also habe ich die ursprüngliche Frage mit diesen Informationen bearbeitet.
Sopalajo de Arrierez
Lesen Sie zum Hinzufügen des Eintrags die Syntax im angegebenen Link
Ijaz Ahmad Khan