Fryboyter

Windows leichter mit Syslinux starten

Wenn man mit dem Bootloader syslinux neben Linux auch Windows starten will, erfolgt dies bei Festplatten mit MBR (nicht GPT!) beispielsweise über folgenden Eintrag in der Datei /boot/syslinux/syslinux.cfg.

...
LABEL windows
    MENU LABEL Windows
    COM32 chain.c32
    APPEND hd0 3
...

Hd0 ist in diesem Fall die erste vom BIOS/UEFI erkannte Festplatte. Und 3 bezieht sich auf die dritte Partition auf dieser Festplatte. Was aber wenn man mehrere Festplatten installiert hat und Windows nicht auf der gleichen Platte wie Linux installiert ist? Man müsste herausfinden in welcher Reihenfolge das BIOS/UEFI die Festplatten erkennt. Hierbei muss man beachten, dass Festplatten ab 0 gezählt werden, Partitionen aber ab 1. Also warum das ganze nicht etwas einfacher lösen?

Mit dem Befehl “fdisk -l” lässt man sich zuerst die ganzen vorhandenen Festplatten anzeigen und sucht sich dann die Festplatte, auf der Windows installiert ist, heraus. Sollte man wissen auf welcher Festplatte Windows installiert ist, kann man sich diese auch direkt mit beispielsweise “fdisk -l /dev/sde” anzeigen lassen. Das sieht dann beispielsweise wie folgt aus.

Festplatte /dev/sde: 238,49 GiB, 256060514304 Bytes, 500118192 Sektoren
Festplattenmodell: Crucial_CT256MX1
Einheiten: Sektoren von 1 * 512 = 512 Bytes
Sektorgröße (logisch/physikalisch): 512 Bytes / 4096 Bytes
E/A-Größe (minimal/optimal): 4096 Bytes / 4096 Bytes
Festplattenbezeichnungstyp: dos
Festplattenbezeichner: 0x0000d958

Gerät      Boot    Anfang      Ende  Sektoren  Größe Kn Typ
/dev/sde1  *         2048    206847    204800   100M  7 HPFS/NTFS/exFAT
/dev/sde2          206848 499123111 498916264 237,9G  7 HPFS/NTFS/exFAT
/dev/sde3       499124224 500113407    989184   483M 27 Verst. NTFS WinRE

Wichtig ist hier im Grunde nur der Festplattenbezeichner. Diesen merken wir uns und ändern den Eintrag von Windows in der Konfigurationsdatei von syslinux wie folgt ab.

...
LABEL windows
    MENU LABEL Windows
    COM32 chain.c32
    APPEND mbr:0x0000d958
...

Mit diesem Eintrag sollte man Windows nun problemlose per Chainloading starten können.

OSBN | Linux

Mit syslinux in den rescue mode booten

Viele Nutzer von Arch Linux verwenden als Bootloader nicht Grub(2) oder LiLo sondern syslinux. Auch ich gehöre zu diesen Nutzern. Standardmäßig gibt es zwei Einträge das System zu booten. Einmal den normalen Aufruf und einmal den Fallback-Modus bei dem alle mkinitcpio hooks geladen werden. Mit beiden Einträgen konnte ich bei meinem Broadcom-Problem das bei einem Kernel, aktueller Version 3.10.5, auftritt, nichts anfangen. Um bei einem ähnlichen Problem zukünftig gewappnet zu sein, habe ich mir jetzt eine Lösung zusammen gebastelt, so dass ich in vielen Fällen auf ein Booten mit dem Installationsmedium und anschließendem chroot verzichten kann.

Hierzu habe ich einfach mit dem Befehl nano /boot/syslinux/syslinux.cfg die Konfigurationsdatei des Bootloaders geöffnet. Der, für mein Vorhaben wichtige Teil sieht wie folgt aus.

LABEL arch
MENU LABEL Arch Linux
LINUX ../vmlinuz-linux
APPEND cryptdevice=/dev/sda2:main root=/dev/mapper/main-root ro lang=de locale=de_DE.UTF-8
INITRD ../initramfs-linux.img

LABEL archfallback
MENU LABEL Arch Linux Fallback
LINUX ../vmlinuz-linux
APPEND cryptdevice=/dev/sda2:main root=/dev/mapper/main-root ro lang=de locale=de_DE.UTF-8
INITRD ../initramfs-linux-fallback.img

Hier haben wir als erstes den normalen Start und als zweites den Fallback-Modus.

Jetzt möchte ich noch einen dritten Eintrag haben, der mir erlaubt in etwas ähnliches wie den früheren Runlevel 1 zu booten, den es in der Form ja unter systemd nicht mehr gibt.

Von daher kopiere ich erst einmal den ersten Block unter den zweiten und erzeuge somit einen dritten Eintrag im Bootmenü. Nun passe ich die Zeile LABEL und MENU LABEL entsprechend an, damit diese einzigartig sind und man erkennen kann, was die Funktion dahinter ist.

Zu guter Letzt ändere ich noch die Zeile APPEND und erweitere sie am Ende um systemd.unit=rescue und speichern die Datei einfach ab. Mehr ist nicht nötig. Das Ganze müsste dann folgendermaßen aussehen.

LABEL archrescue
MENU LABEL Arch Rescue
LINUX ../vmlinuz-linux
APPEND cryptdevice=/dev/sda2:main root=/dev/mapper/main-root ro lang=de locale=de_DE.UTF-8 systemd.unit=rescue
INITRD ../initramfs-linux.img

Durch systemd.unit=rescue wird das System angewiesen in den Modus zu booten, der dem ehemaligen Runlevel 1 am nächsten kommt. Sprich es ist alles gemountet was nötig ist, aber sonst läuft so gut wie nichts. Zum Beispiel kein Netzwerk, was ja bei mir die Kernel Panic ausgelöst hat. Um bei dem Broadcom-Problem zu bleiben könnte man hier zum Beispiel mit dem Befehl pacman -U /var/cache/pacman/pkg/linux-3.10.5-1-x86_64.pkg.tar.xz den Kernel downgraden und somit das System wieder lauffähig machen, bis das Problem behoben ist. Dies wird in diesem Fall wohl frühestens in Version 3.11 soweit sein.

Linux | OSBN