Grub als Bootmanager für mehrere Windows-Installationen

Winfried Mueller, Start: 22.11.2007, Stand: 11.08.2011

Wie organisiert man einen Rechner, auf dem mehrere Windows-Versionen parallel installiert werden sollen? Grundsätzlich funktioniert so ein Multiboot-System auch ohne speziellen Bootmanager, weil Windows ein Bootmenü zur Verfügung stellt. Jedoch ist das von Windows angebotene Verfahren nicht sonderlich glücklich, weil die Windows-Versionen nicht völlig unabhängig voneinander sind. Das Bootmenü ist nämlich Bestandteil einer Windows-Installation und fehlt diese, sind auch alle anderen nicht mehr lauffähig. Diese Abhängigkeit untereinander ist keine gute Lösung.

Hier soll es deshalb darum gehen, 2 völlig unabhängige Windows-Installationen auf eine Festplatte zu bekommen. Zudem wird die Systempartition des jeweils nicht aktiven System versteckt. So geht die Übersicht nicht verloren und die Partition wird vor Veränderung geschützt.

Zur Lösung der Aufgabe benötigen wir einen Bootmanager, der die unterschiedlichen Windows-Versionen völlig unabhängig voneinander starten kann.

Es gibt viele gute Bootmanager, manche sind kostenlos, andere müssen bezahlt werden. Warum sollte man nun gerade Grub dafür verwenden? Grub ist kostenlos und es ist Opensource. Wer zudem sowieso Linux benutzt, kennt diesen Bootmanager und weiß, wie er konfiguriert werden muss. Er funktioniert stabil und wird weiter gepflegt. Auch ist er gut dokumentiert und vielseitig konfigurierbar. Und wenn Linux zusätzlich auf den Rechner kommt, kann dieses problemlos eingebunden werden.

Grundsätzlich sollte das vorgestellte Verfahren mit allen Windows-Betriebssystemen auf gleiche Art und Weise funktionieren: Windows 98, Windows 2000, Windows XP, Windows Vista und Windows 7. Alle Systeme habe ich im Laufe der Jahre mal getestet. Die letzten Tests, woraus auch dieser aktualisierte Artikel entstand, habe ich vor allem in der Kombination XP/XP und XP/W7 gemacht.

Wer von Linux keine Ahnung hat und einen einfach zu installierenden Bootmanager sucht, den man mit ein paar Mausklicks auf seinen Rechner schubst, der sollte sich lieber nach was anderem umsehen. Ein wenig Tipparbeit und Wissen auf der Linux-Kommandozeile braucht es für das hier vorgestellte Konzept. Auch sollte man sich ein klein wenig mit grub auskennen. Grundlagen hierzu findet man in meinem Artikel: GrubEinfuehrung

Wenn es glatt läuft, sollte man seine beiden Windows-Systeme in 3-4 Stunden auf dem Rechner haben.

Konzept

Im ersten Schritt partioniert man die Festplatte. Das Verfahren benötigt neben den 2 Partitionen für die Windows-Systeme noch eine dritte kleine Linux-ext2 Partition für ein paar Grub-Dateien. Die Platte könnte z.B. mit fdisk so aufgeteilt werden:

PartitionGrub NameLinux NameTypeGröße
Windows1hd0,0sda17 - NTFS20G
Windows2hd0,1sda27 - NTFS20G
Logischhd0,2sda3--
Grubhd0,4sda583 - ext2100M

Wer es komfortabler will, benutzt grafische Werkzeuge wie gparted oder Acronis Disk-Director.

Windows muss auf eine primäre Partition installiert werden, insofern sind die ersten beiden Partitionen vom Typ primär. Weil insgesamt nur 4 primäre Partitionen möglich sind, legt man die Grub-Partition am besten als logisches Laufwerk an. Hierbei fungiert sda3 als Container, in dem dann beliebig viele logische Partitionen angelegt werden können. Es ist wahrscheinlich, dass man noch weitere Partitionen anlegen will, die würde man dann auch als logische Laufwerke anlegen.

Es ist sinnvoll, die Windows2 Partition noch nicht zu formatieren. Oder man formatiert sie z.B. mit ext2. Wichtig ist nur, dass Windows das Format nicht kennt. Windows1 bereitet man am besten schon mit NTFS vor.

Für Windows1 und Windows2 wurden beispielhaft jeweils 20G reserviert. Die Partition für Grub braucht nicht viel Platz, ich dafür einfach mal 100M reserviert.

Nun kann das erste Betriebssystem recht unspektakulär installiert werden: Installations-CD einlegen und bei der Installation als Ziel die erste Partition nutzen.

Ist dies erledigt, kommt die eigentliche Hürde. Das zweite Windows darf während der Installation nichts davon wissen, dass es bereits eine Installation gibt. Sonst wird nämlich auf dieser ersten Installation einiges verändert, um den Windows-eigenen Bootmechanismus zu installieren.

Wie versteckt man vor Windows nun die erste Installation? Bei Windows-XP funktionierte es noch, mit fdisk einfach den Type der Windows1 Partition von 7 auf 12 zu ändern. Somit erkennt die Installationsroutine diese Partition nicht mehr als NTFS und der Drops war gelutscht.

Windows 7 ist aber schlauer, es stört sich nicht am falschen Partitionstyp, es guckt einfach, ob es trotzdem eine NTFS-Partition erkennt und installiert sich dann mit dem Bootcode einfach rein.

Eine recht einfache Methode, um dieses Problem zu lösen, geht so: Man startet mit einer Knoppix CD den Rechner. Ich nutzte für alle folgenden Schritte Knoppix 6.4.4. Weil wir hier keine grafische Umgebung brauchen, gibt man bei Boot: einfach "knoppix 2" an. Das hat den Vorteil, dass der Rechner schneller bootet.

Als erstes sichert man sich den Bootsektor, der zugleich die Partitionstabelle beinhaltet. Wohin sichern? Am besten auf die Grub-Partition. Wenn die noch nicht formatiert ist, dann kann man das jetzt tun.

 
mkfs.ext2 /dev/sda5

Um dann den Bootsektor zu sichern:

 
cd /mnt
mount sda5
cd sda5
dd if=/dev/sda of=boot.bin bs=512 count=1
cd ..
umount sda5

Dann startet man "fdisk /dev/sda" und löscht nun mit "d" die erste Partition, auf der sich Windows1 befindet. Die Windows2 Partition sollte nun auch über "t" den korrekten Typ 7 erhalten und am besten auch mit "a" als aktiv gekennzeichnet werden. Danach braucht es noch ein "w", damit die Veränderungen geschrieben wird.

Offiziell gibt es jetzt keine sda1-Partition mehr. Die eigentliche Partition ist natürlich noch vorhanden, aber das System weiß nichts davon. Auch wir würden nicht wieder da dran kommen, wenn wir die genaue Position nicht kennen. Die genaue Position steht aber in dem gesicherten ersten Sektor der Festplatte. Wenn wir den wieder zurückschreiben, machen wir die Änderung wieder rückgängig. Dazu später.

Nun kann das System wieder hochgefahren werden, diesmal aber mit der Installations-CD für die zweite Windows-Installation. Die Installations-Routine sollte nun nur auf eine NTFS-Partition stoßen, auf der dann auch installiert werden soll.

Nachdem auch dieses zweite Windows installiert wurde, startet man den Rechner wieder mit Knoppix. Als erstes schreibt man die alte Partitionstabelle zurück, um auch die Windows1-Partition wieder erreichen zu können. Bei diesem Schritt sollte man wissen, was man tut, weil man unwiderbringlich die Partitionstabelle überschreibt. Wer also eine andere Laufwerkszuordnung hat (sda), muss hier erst anpassen. Oder man sichert sich den jetzigen Bootsektor erst nochmal weg, wie oben beschrieben, aber auf jeden Fall in eine andere Datei (z.B. boot_neu.bin). Sicher ist sicher.

Der alte Bootsektor wird nun so zurückgeschrieben:

 
cd /mnt
mount sda5
cd sda5
dd if=boot.bin of=/dev/sda
cd ..
umount sda5

Wenn man jetzt mit "fdisk /dev/sda" und "p" nachschaut, sollte sda1 wieder auftauchen. Jetzt muss aber noch der Type der Windows2 Partition mit "t" auf 7 angepasst werden. Schreiben mit "w" zum Schluß nicht vergessen. Es sollten jetzt sowohl sda1 wie sda2 vorhanden und vom Typ 7 sein.

Als nächstes müssen wir grub startklar machen. Auch das geht direkt unter Knoppix.

Der erste Schritt ist, auf der Grub-Partition unter /boot/grub alle wichtigen Dateien einzuspielen. Die holen wir uns direkt von /boot/grub von knoppix.

 
cd /mnt
mount sda5
mkdir boot
cd boot
mkdir grub
cd grub
cp /boot/grub/* .

Mit "vi menu.lst" muss nun grub konfiguriert werden. Den kompletten Inhalt der Datei löschen wir erstmal. Der neue Inhalt lautet so:

 
default 0
timeout 30
color cyan/blue white/blue

title Windows1
hide (hd0,1)
unhide (hd0,0)
root (hd0,0)
makeactive
chainloader +1

title Windows2
hide (hd0,0)
unhide (hd0,1)
root (hd0,1)
makeactive
chainloader +1

Hier wird Grub mitgeteilt, dass es 2 Booteinträge geben soll, für jedes Windows einen. Wird später im Bootmenü Windows1 gewählt, wird zuerst die andere Systempartition versteckt, dann die richtige Partition als Bootmedium ausgewählt, diese als aktiv markiert und dann davon gebootet.

Nachdem diese Datei gespeichert ist, müssen die Grub-Startprogramme noch auf die ersten Sektoren der Festplatte geschrieben werden. Hierzu tippt man auf der Knoppix Kommandozeile grub ein. Jetzt sollte der Grub-Prompt zu sehen sein. Dort gibt man ein:

 
root (hd0,4)
setup (hd0)

Grub sollte Erfolg melden und kann dann mit "quit" verlassen werden. Wenn jetzt neu gebootet wird und die CD entfernt wurde, sollte das Bootmenü mit 2 Einträgen erscheinen. Jetzt kann man testen, ob beide Windows-Installationen funktionieren.

Fertig

Das sollte eigentlich alles gewesen sein, beide Windows-Versionen sollten sich so starten lassen. Natürlich kann man die menu.lst noch erweitern, um weitere Betriebssysteme oder Spezialfunktionen aufzunehmen. Für mehr Infos siehe auch mein Artikel: GrubEinfuehrung

Fallstricke

Bevor Windows XP installiert wird, sollte man im Bios schauen, ob SATA-Platten mit AHCI Zugriff konfiguriert sind. AHCI ist grundsätzlich sinnvoller und der Treiber für AHCI sollte schon bei der Installation ins System eingebaut werden. Später ist das mitunter nur noch schwierig möglich. Beachten sollte man hier, dass man die Install-CD mindestens SP2 beinhaltet, weil erst hier AHCI-Treiber verfügbar sind.

Hat man hingegen im ATA oder Legacy-Mode Windows-XP installiert, bootet diese Installation nicht mehr, wenn man auf AHCI umstellt.

Manche Windows-XP Installations-CDs haben kein Auswahlmenü für die Partitionen. Hier wird sich automatisch die erste freie Partition gekrallt. Das sollte aber trotzdem nach obigem Verfahren funktionieren.

Sobald man die erste Partition aus der Partitionstabelle gelöscht hat, darf man keine weiteren Veränderungen an den Partitionen vornehmen. Ich hatte z.B. mal versehentlich in diesem Zwischenstadium die Windows2-Partition mit Acronis vergrößert. Keine gute Idee...

Windows 7 macht manchmal Probleme und nimmt eine korrekte Partition einfach nicht als Installationsziel an. Hier sollte man erstmal überprüfen, ob man AHCI eingestellt hat und ob auch die Bootreihenfolge so eingestellt ist, dass zuerst von DVD und als zweites von Festplatte gebootet wird. Führt das nicht zum Ziel, googelt man mal nach der Fehlermeldung, die Windows 7 angibt.

Neuere Knoppix-CD's können anders aufgebaut sein und z.B. auch Grub2 anstatt Grub1 beinhalten. Benutzt deshalb am besten Knoppix 6.4.4.

Windows XP weigerte sich, auf einer erweiterten Partion (logisches Laufwerk) installiert zu werden. Das klappte nur auf einer primären Partition. Wie es mit Windows 7 ist, hab ich nicht getestet.

Wenn Grub eine Partition beim Booten versteckt, wird der Partitions-Typ von 7 auf 17 umgeschrieben. Also nicht wundern, wenn man mit fdisk Typ 17 anstatt 7 sieht.

Je nach Installations-Situation wird Windows 7 in einer Partition oder in 2 Partitionen installiert. Ist die Festplatte unformatiert, legt Windows 7 zwei Partitionen an: Eine ganz kleine 100MB Bootpartition und die eigentliche Partition, wo das System hineininstalliert wird. Der Grund dafür liegt im leichteren Update auf die Ultimate-Edition, bei der man die Systempartition verschlüsseln kann. Für diesen Mechanismus braucht es eine kleine unverschlüsselte Boot-Partition. Wird Windows 7 aber auf einer vorformatierten Festplatte installiert, wird nur die eine zugewiesene Partition verwendet und keine zusätzliche Boot-Partition angelegt. Das ist übersichtlicher, wenn man die Verschlüsselungs-Funktionalität der Ultimate-Edition nicht braucht. Sollte jedoch eine 100MB Bootpartition bestehen, muss hier Grub auf diese zugreifen und nicht auf die eigentliche System-Partition. Sichert man so ein System als Image, sollte man nicht vergessen, auch die Bootpartition mit zu sichern.

Variationen

Anstatt die Windows1 Partition aus der Partitiontable zu entfernen, kann man z.B. die ersten 8 Megabyte auf sda5 mit dd wegsichern und mit Nullen überschreiben. So findet die Installation von Windows2 keine brauchbare Erstinstallation.

Eine andere Möglichkeit besteht darin, die erste Windows-Installation als Image wegzusichern (z.B. mit Acronis TrueImage oder partimage). Dann löscht man diese Partition z.B. mit Acronis Disk-Director und installiert dann Windows2. Zum Schluß holt man sich Windows1 wieder aus dem Image zurück. Wäre was für diejenigen, die nur wenig auf der Linux Kommandozeile tippen wollen. Hier beschränkt sich die Tipparbeit dann nur noch auf die Installation von Grub.

Bei Windows XP kann man die Installation des ersten Windows auch so verstecken, in dem man den Partitionstyp von 7 auf 12 verändert. Das Installationsprogramm von Windows XP berücksichtigt so eine Partition dann nicht, geht also davon aus, dass noch kein Windows auf dem Rechner installiert ist und fummelt dann auch nicht an dieser Partition rum. Das klappt auch, wenn man Windows 7 und Windows XP installieren will. Dann aber nur in der Reihenfolge, zuerst Windows 7 zu installieren, diese Installation dann mit dem Partitionstyp 12 zu verstecken, um dann Windows XP nachzuinstallieren.

Weblinks