GPT und grub für Noobs

Dies ist die Ge­schich­te einer Nacht­schicht (ja, der Noob aus dem Titel bin ich). Übel­tä­ter war ein recht frisch in­stal­lier­ter Sa­ba­yon-Rech­ner, der plötz­lich nicht mehr boo­ten woll­te. Der Rech­ner kam noch bis zu den vier Buch­sta­ben GRUB, dann rühr­te sich nichts mehr. Nach einer Ker­nel Panic beim Ver­such, den Rech­ner mit Hilfe eines von einer CD ge­star­te­ten GRUBs (grml ftw!) zu boo­ten, war schon am Flu­chen über ver­meint­lich de­fek­te Hard­ware. Letzt­end­lich war (m)ein Fsck­up bei der In­stal­la­ti­on von GRUB2 auf der mit GPT or­ga­ni­sier­ten Plat­ten das Pro­blem.

Der gute alte MBR hat nun 30 Jahre auf dem Bu­ckel und hat sich damit für IT-Ver­hält­nis­se ex­trem gut ge­hal­ten... die Gren­zen sind aber spä­tes­tens mit den heu­ti­gen Plat­ten­grö­ßen er­reicht. GPT bie­tet eine fak­tisch un­li­mi­tier­te Menge an (pri­mä­ren) Par­ti­tio­nen und ver­wal­tet Plat­ten weit jen­seits der Pe­ta­byte-Grö­ße. Und wer EFI be­nutzt, hat oh­ne­hin keine an­de­re Wahl :-)

Ich habe keine Ah­nung, ob mir das der Sa­ba­yon-In­stal­ler ein­ge­brockt hatte oder ob das mein per­sön­li­cher Ver­bock war. Meine GPT hatte zwei Ein­trä­ge: Eine klei­ne Par­ti­ti­on für /boot sowie den Rest der Plat­te für Li­nux-LVM, also so, wie man das frü­her(tm) immer(tm) ge­macht hat. Rück­bli­ckend frage ich mich, wie das je­mals funk­tio­nie­ren konn­te ;-) Der Ver­dacht däm­mer­te, als Ver­su­che, GRUB neu zu in­stal­lie­ren, mit einer Feh­ler­mel­dung quit­tiert wur­den.

Für GRUB auf GPT be­nö­tigt man 2 Par­ti­tio­nen: Eine win­zi­ge Par­ti­ti­on, auf wel­che GRUB sein boot.​img schrei­ben kann, sowie eine wei­te­re, auf wel­cher die rest­li­chen Daten von GRUB lie­gen. boot.​img sorgt für den Ein­sprung in den ei­gent­li­chen Boot­loa­der. Es hat noch kei­ner­lei Ver­ständ­nis von Da­tei­sys­te­men o.ä., wes­halb die Ein­sprung­adres­sen hier hart­co­diert ste­hen. Bei der Ver­wen­dung von MBR wurde das boot.​img di­rekt in den MBR ge­schrie­ben... bei GPT be­kommt die Datei ihre ei­ge­ne Par­ti­ti­on.

Man legt also mit par­ted zwei Par­ti­tio­nen an:

  • Eine win­zi­ge mit mi­ni­ma­ler Größe. Diese be­kommt das Label "BOO­T_GRUB" und das Flag "bio­s_grub". Diese wird an­schlie­ßend mit FAT for­ma­tiert.
  • Eine klei­ne Par­ti­ti­on (we­ni­ge hun­dert MB) für /boot, wie frü­her. Diese er­hält das Label "GRU­B_­FILES". Ich habe sie mit ext2 for­ma­tiert.

grub-in­stall fühlt sich mit die­sem Setup wohl und er­le­digt die In­stal­la­ti­on au­to­ma­tisch. In mei­nem Fall hatte ich aber be­reits eine erste Par­ti­ti­on... das Pro­blem ließ sich aber mit einem mi­ni­mal-in­va­si­vem Ein­griff re­pa­rie­ren :-)

  • Daten aus dem alten /boot si­chern
  • Par­ti­ti­on lö­schen
  • In dem frei­en Be­reich am An­fang der Plat­te als ers­tes die Par­ti­ti­on für BOO­T_GRUB an­le­gen
  • Im rest­li­chen Platz eine Par­ti­ti­on für das neue /boot an­le­gen
  • Die neuen Par­ti­tio­nen for­ma­tie­ren, die Daten in das neue /boot zu­rück­spie­len

Nun noch grub-in­stall star­ten - und auf­at­men! Da sich nun die IDs der Par­ti­tio­nen ge­än­dert haben, muß man (zu­min­dest bei Sa­ba­yon) die grub.​cfg mit­tels "grub-mkcon­fig > /boot/grub/grub.​cfg" neu er­stel­len. Au­ßer­dem muß man auch den Ein­trag für /boot in /etc/fstab an­pas­sen.

Woher die Ker­nel Panic beim ers­ten Start­ver­such mit einem von einer Boot-CD ge­star­te­ten GRUB kam, weiß ich nicht genau... mög­li­cher­wei­se hatte ich mich da bei den Ker­nel­pa­ra­me­tern (in­i­trd? root? dolvm?) ver­tan. Bei allen wei­te­ren Ver­su­chen tat's je­den­falls. Und der Grund für das plötz­li­che Auf­tre­ten des Pro­blems ließ sich an­hand der Logs eben­falls re­kon­stru­ie­ren: Vor dem letz­ten Her­un­ter­fah­ren hatte ich Sys­tem­up­dates in­stal­liert. Und da kam unter an­de­rem ein neuer Ker­nel mit - der hat ver­mut­lich dafür ge­sorgt, daß ir­gend­wel­che Byte­off­sets von GRUB nicht mehr pa­ß­ten...