staging.inyokaproject.org

Grub: Windows 8 will nicht booten

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

Sukram123

Anmeldungsdatum:
11. September 2012

Beiträge: Zähle...

Hi!

Windows 8 will nicht booten.

Hardware: Asus F3JM, das Problem ist unabhängig davon, ob ich die Original-Festplatte einsetze oder eine Seagate Momentus XT 750G (letztere wird hier gezeigt)

Ausgabe von fdisk -l:

Disk /dev/sda: 750.2 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders, total 1465149168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x16f016ef

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1              63   253955519   126977728+   7  HPFS/NTFS/exFAT
Partition 1 does not start on physical sector boundary.
/dev/sda2       253956096   527392767   136718336   83  Linux
/dev/sda3   *   527392768   742236159   107421696    7  HPFS/NTFS/exFAT
/dev/sda4       742238206  1465147391   361454593    5  Extended
Partition 4 does not start on physical sector boundary.
/dev/sda5       742238208   750049279     3905536   82  Linux swap / Solaris
/dev/sda6       954853376  1465147391   255147008    7  HPFS/NTFS/exFAT

Problem reproduzierbar mit Windows 8 Consumer Preview und mit Windows 8 Release Preview. In der aktuellen Konfiguration sind folgende Systeme installiert:

/dev/sda1: Windows XP Home
/dev/sda2: Ubuntu 12.04 LTS
/dev/sda3: Windows 8 Release Preview

Windows 8 war nach Installation immer lauffähig (bis ich den grub wieder drübergebügelt habe) Ein altes Legacy-Grub (SuSE 11.1 auf Original-FP) war immer in der Lage, einen Eintrag zu generieren, mit dem sich Windows 8 booten ließ. Lediglich der Umstieg auf Ubuntu mit grub-latest-greatest hat ein Problem:

update-grub findet über os-prober alles ohne zu murren, hier der relevante Ausschnitt aus /boot/grub/grub.cfg

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Microsoft Windows XP Home Edition (on /dev/sda1)" --class windows --c
lass os {
        insmod part_msdos
        insmod ntfs
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set=root F490928C90925548
        drivemap -s (hd0) ${root}
        chainloader +1
}
menuentry "Windows 8 (loader) (on /dev/sda3)" --class windows --class os {
        insmod part_msdos
        insmod ntfs
        set root='(hd0,msdos3)'
        search --no-floppy --fs-uuid --set=root 882A5ED92A5EC43A
        drivemap -s (hd0) ${root}
        chainloader +1
}

Beim booten wird Windows 8 angeboten, dessen Auswahl führt zu einem dunkelschwarzen Bildschirm (kein Flackern, keine Fehlermeldung) und einem Neustart des Rechners. XP und Ubuntu lassen sich booten.

Windows 8 Partition lässt sich mounten:

> mount
...
/dev/sda3 on /media/882A5ED92A5EC43A type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)
> ls /media/882A5ED92A5EC43A
Boot                    hiberfil.sys   Program Files (x86)        Users
bootmgr                 pagefile.sys   Recovery                   Windows
BOOTNXT                 PerfLogs       $Recycle.Bin
BOOTSECT.BAK            ProgramData    swapfile.sys
Documents and Settings  Program Files  System Volume Information

Ich habe keine Idee, was schief geht. Funkt die Sichtbarkeit von XP dazwischen? Dann müsste auch Legacy-Grub scheitern - tat es aber nicht. Ist die Konfiguration noch nicht optimal? Was kann ich noch tun? Kann ich 12.04 auf legacy-grub downgraden? Irgendwelche anderen Ideen?

Gruß, Markus

Sukram123

(Themenstarter)

Anmeldungsdatum:
11. September 2012

Beiträge: Zähle...

Und die Antwort fand sich hier: https://bugzilla.redhat.com/show_bug.cgi?id=753923#c12

Einfach in /etc/grub.d/40_custom folgenden Eintrag machen:

menuentry "Windows 8" {
   set root=(hd0,msdos3)
   ntldr /bootmgr
}

Einen Kommentar zu Grub oder den OSS-Enthusiasten, die permanent alles ändern ohne dass sich wirklich etwas bessert, spare ich mir hier. Frage zum Feinschliff: Wie bekomme ich den verkehrten autoprober-Eintrag weg?

bowman

Avatar von bowman

Anmeldungsdatum:
17. Februar 2010

Beiträge: 7506

Wie bekomme ich den verkehrten autoprober-Eintrag weg?

os-prober heisst der und das geht recht einfach über die GRUB 2/Konfiguration.

In der /etc/default/grub musst du folgenden Eintrag zusätzlich einfügen:

GRUB_DISABLE_OS_PROBER=true

Dann ist der os-prober deaktiviert und es werden keine anderen OS automatisch im Grubmenü angezeigt.

Um dein XP auch ins Grubmenü aufzunehmen musst du den Eintrag für XP aus dem os-prober in deine 40_costum übernehmen und danach ein sudo update-grub ausführen.

Das ist die Methode um evtl. Recovery-Partitionen aus dem Grubmenü zu verbannen, damit sie nicht ausversehen gebootet werden können. 😉

Einen Kommentar zu Grub oder den OSS-Enthusiasten, die permanent alles ändern ohne dass sich wirklich etwas bessert,

So kann man das jetzt auch nicht sagen. Immerhin kann GRUB2 unter anderem UEFI, kommt mit GPT-Partitionstabellen zurecht und mit noch einigen anderen "Kleinigkeiten" an denen grub-legacy kläglich scheitert. Wenn man sich erst mal ein bisschen an die andere Funktionsweise gewöhnt hat, sieh man auch die Vorteile. Für mein Empfinden kann man mehr machen als bei grub-legacy. 😉

Sukram123

(Themenstarter)

Anmeldungsdatum:
11. September 2012

Beiträge: 5

Wenn ich den os_prober ausmache, scannt er auch die anderen OS nicht. Meine Frage ist: kann man update-grub so konfigurieren, dass manuelle Einträge für eine Partition dafür sorgen, dass für genau diese manuell konfigurierten Partitionen keine automatischen Einträge mehr erstellt werden. Meine Meinung: das kann doch nicht so schwer sein.

Zu Deiner "Verteidigung" von Grub: [Hier stand mal ganz viel Text, aber der war flame-war-verdächtig, ich habe ihn daher wieder gelöscht. Schweigen wir über was anderes]

bowman

Avatar von bowman

Anmeldungsdatum:
17. Februar 2010

Beiträge: 7506

Halbschwanger gibt es genau so wenig, wie das, was du willst. Entweder du lässt den OS-Prober drin oder du deaktivierst ihn. 😀

Die manuellen Einträge, die du so konfiguriert haben willst, wie du sie brauchst, muss du in die 40_custom reinschreiben. Wenn der os-prober deaktiviert ist, musst du allerdings auch alle anderen Einträge anderer OS manuell in das Skript eintragen. Bei der menu.lst hast du das ja auch machen müssen. Dann werden diese Einträge bei update-grub so in die /boot/grub/grub.cfg übernommen. Mit deaktiviertem os_prober hast du dann nur noch Ubuntu-Kernel, deren Recovery-Mode, den Memtest (wenn du ihn nicht deaktiviert hast) und deine selber kreierten Einträge in der 40_custom im Grubmenü. Das ist dann so, wie wenn du eine menu.lst entsprechend bearbeitet hättest.

Das sollte eigentlich das sein, was du willst, oder? 😉

Sukram123

(Themenstarter)

Anmeldungsdatum:
11. September 2012

Beiträge: 5

Ich finde Deine Antwort etwas irritierend. Das Requirement, dass der automatische Scan bereits manuell konfigurierte Partitionen nicht noch einmal einträgt ist nun wirklich nicht weit hergeholt. Ich verstehe nicht, was man da an dem aktuellen Verhalten mit nicht funktionierendem doppelten Eintrag verteidigen muss. Andere haben dafür schon eine Lösung: http://comments.gmane.org/gmane.comp.boot-loaders.grub.devel/17846. Dieser Patch würde mir vollkommen reichen, ich weiß nur nicht, was ich mir damit zerschieße, dass ich diese Dateien manuell verändere - womöglich verpasse ich dann weitere Updates? Und ich habe im Laufe der Jahre vergessen, wie man einen Patch anwendet ☺.

Das vollständige Abschalten des os_prober ist keine Option: Spätestens beim Update des Kernels (und das passiert ja gefühlt fast wöchentlich) ist man damit auf verlorenem Posten.

RapaNui

Avatar von RapaNui

Anmeldungsdatum:
16. Juli 2007

Beiträge: Zähle...

Sukram123 schrieb:

Ich finde Deine Antwort etwas irritierend. Das Requirement, dass der automatische Scan bereits manuell konfigurierte Partitionen ...

Die Skripte unter /etc/drub.d/ sind ganz normale Shellkripte. Mit ein wenig Einarbeitung kann man sich ganz leicht selbst Skripte schreiben und dort ablegen. Erstelle eine Sicherungskopie der originalen 30_os_prober, modifiziere es nach Deinen Wünschen, oder schreibe Dir unter einem anderen Namen ein komplett eigenes Skript und gut ists. Selbst eigene Steuervariablen dazu kannst Du in der /etc/default/grub ablegen und ganz individuell auf Einträge reagieren. Auf Fehler und Ergebnis testen kann man auch vorab mit grub-mkcongig, dafür braucht es wirklich keinen Patch, der alle Windows Eigen- und Sonderheiten abdeckt.

Das vollständige Abschalten des os_prober ist keine Option: Spätestens beim Update des Kernels (und das passiert ja gefühlt fast wöchentlich) ist man damit auf verlorenem Posten.

Das ist Dein Gefühl, wäre aber auch über die eigenen Skripte regelbar. Selbst eine Neuinstallation wäre dann, mit einer anständigen Datensicherung, kein Problem.

bowman

Avatar von bowman

Anmeldungsdatum:
17. Februar 2010

Beiträge: 7506

Das vollständige Abschalten des os_prober ist keine Option: Spätestens beim Update des Kernels (und das passiert ja gefühlt fast wöchentlich) ist man damit auf verlorenem Posten.

Ich glaube du hast hier etwas völlig über die Funktion des os-probers missverstanden. 😕

Der OS-Prober ist nur dazu da andere OS, als das installierte und den Grub2 bestimmende Ubuntu zu finden.

Kommt ein neues Kernelupdate des installierten Ubuntu, wird es selbstverständlich ins Grubmenü aufgenommen (auch mit deaktiviertem os-prober), denn nach der Kernel-Installation wird automatisch eine neue grub.cfg generiert.

Wenn du also deine beiden Windows in die 40_custom schreibst werden diese immer beibehalten, auch wenn der os-prober deaktiviert ist und die neuen Ubuntu-Kernel werden auch immer neu aktualisiert.

Für das was du willst, brauchst du nicht am Script des os-probers rumzuschrauben. 😀

Antworten |