LPIC101/101.2 Das System starten
Das System starten
Allgemeines:
- grundsätzliche Funktionstüchtigkeit des Systems durch Power-on-Self-Test:
- Test des Arbeitsspeichers auf seine Grösse und prinzipielle Funktionstüchtigkeit
- nach der Initialisierung aller Hardwarekomponenten, sucht das BIOS nach einem Betriebssystem oder einem Programm, das ein Betriebssystem laden kann
- im BIOS ist eine genaue Suchreihenfolge hinterlegt und diese beinhaltet meist Diskettenlaufwerke, Festplatten, CD-ROMS, SCSI-Adapter, USB-Geräte und zudem bootfähige Netzwerkkarten
Startvorgang auf Festplatten
- bei Linux kann man drei primäre und eine erweiterte Partition konfigurieren, diese erweiterte Partition kann ihrerseits logische Partitionen enthalten, die ebenfalls nicht von der Partitionstabelle verwaltet werden
- diese Patitionstabelle befindet sich im sogenannten MBR (Master Boot Record)
- MBR gehört selbst keiner Partition an sondern ist eigenständig und ist genau 512 Byte gross und befindet sich am Anfang einer Festplatte im Sektor 0, Spur 0
- das BIOS liest dort ein Ladeprogramm in hexadezimaler Schreibweise, nämlich GRUB 2 und im unteren Bereich die Partitionstabelle
- je nach Betriebssystem läuft der Startvorgang in zwei unterschiedlichen Möglichkeiten ab:
- wenn ein Bootloader vorgefunden wurde gibt, gibt das BIOS die Kontrolle an diesen ab und beendet sich
- wenn kein Bootloader vorhanden ist, konsultiert das BIOS die Partitionstabelle: hier sucht das BIOS nach einer startfähigen Partition (diese Partitionstabelle beginnt in der 5. Zeile von unten mit 8020 und endet mit 55aa; 55aa ist die Abschlussmarkierung)
- die Partition die mit 80 beginnt ist die Startpartition
- wenn kein Ladeprogramm im MBR vorliegt, folgt das BIOS nun diesem Verweis und und liest den Bootsektor der Partition aus
- spätestens hier sollten sich Bootloader oder das Betriebssystem selbst befinden-> jetzt beginnt der Vorgang, den man als das eigentliche Booten bezeichnet
- Wenn Sie Ihren MBR auf dem Bildschirm ausgeben wollen, können Sie z. B. dieses Kommando verwenden:
dd if=/dev/sda bs=512 count=1|od -h --endian=big
UEFI (Unified Extensible Firmware Interface)
- bei modernen Hauptplatinen kommt nicht mehr BIOS sondern UEFI zu Einsatz
- grundsätzlicher Verwendungszweck kommt aber dem des BIOS gleich
- UEFI weist neue Funktionen auf:
- hohe Grafikauflösungen im Setup-Programm
- Unterstüzung von GUID-Partitionstabellen für Festplatten mit einer Grösse von bis 8 Zebibytes
- Netzwerkanbindung zur Fernwartung
- Integrationsmöglichkeit von Treibern auf Firmware-Ebene
- integrierter Bootloader
- Digital Rights Managment
- UEFI benötigt eine eigene Partition, diese wird als EFI System Partition(ESP) bezeichnet
- diese Partition wird von Betriebssystemen, die UEFI unterstützen während der Installation automatisch angelegt
- benötigt FAT-Dateisystem
- die EFI System Partition wird unter Linux im Verzeichnis /boot/efi bereitgestellt, enthält zumindest den Bootloader oder andere zum Start benötigte Dateien
- GRUB zum Beispiel kann den Kernel auch laden, wenn er sich nicht in der ESP befindet
- systemd-boot kann das nicht, dort muss der Kernel innerhalb der ESP liegen
Boot-Strap-Loader
- dieser Ausdruck kommt von der Geschichte von Baron von Münchhausen, der in einen Sumpf gefallen sein soll und sich selber an den eigenen Haaren aus diesem Sumpf herausgezogen haben soll
- beim Übersetzen der Münchhausen-Geschichte ins Englische wurde es so abgewandelt, dass sich der Baron am Stiefelgurt(Boot-Strap) aus dem Sumpf gezogen haben soll
- so kann man sich das Hochziehen des Betriebssystem sinnbildlich vorstellen: ein Betriebssystem dient einerseits als Plattform um Software auszuführen, andererseits ist ein Betriebssystem selber Software
- deshalb nennen wir den Begriff Boot-Strap-Loader, oder kurz Bootloader
Kernel Parameter
- es gibt zwei Möglichkeiten dem Kernel beim Starten durch den Bootloader Parameter übergeben zu lassen:
- Eintragen der Kernel-Parameter bei jedem Systemstart durch Eintragen dieser in die Konfigurationsdatei grub.cfg(z.B.in/boot/grub/grub.cfg)
- Eintragen der Kernel-Parameter bei jedem Systemstart durch Eintragen dieser in die Konfigurationsdatei grub.cfg(z.B.in/boot/grub/grub.cfg)
linux /boot/vmlinuz-4.6.3 root=/dev/sda1 apm=off
- oder übergeben der Parameter per "Hand" während des Systemstarts im Bootmenü durch Auswählen des gewünschten Eintrages bei GRUP2(diese sind nicht dauerhaft und werden beim nächsten Systemstart nicht mehr angewendet); zum Beispiel:
init=/bin/bash
- wobei nicht der init-Prozess gestartet wird, sondern nur die Shell /bin/bash ohne eine Passwortabfrage, das Root-Dateisystem ist dann allerdings nur im Nur-lesen-Modus gemountet und muss durch den Befehl
mount -o remount,rw / passwd root
- erweitert werden; jetzt kann man sein Kennwort ändern und den Computer wieder im normalen Modus neu starten
initramfs
- die Imagedatei findet man in der Datei /boot/initrd
- zur Erzeugung einer initialen Ramdisk kann man folgende Befehle verwenden
- unter RedHat:
mkinitrd
- unter Debian:
mkinitramfs
Startprotokollierung
- Ausgaben die der Kernel während des Systemstarts ausgibt werden im Kernel-Ring-Puffer gespeichert
- Programmbefehl diesen auszulesen: dmesg
- weil der Befehl mehrere hundert Zeilen ausgeben kann, sollte man die Ausgabe an less übergeben
dmesg |less
- wenn man Informationen über den Systemstartvorgang benötigt, die schon länger zurückliegen, kann man bei älteren Systemen die Log-Dateien durchsuchen (zu finden in /var/log/syslog)
- um Kernel-bezogene Meldungen schneller zu finden, sollte man man mittels grep filtern und an less übergeben:
grep kernel /var/log/messages | less
- heutige Linux-Systeme verwenden systemd
- unter systemd um Protokollierung des Systems auszulesen mit der Option -k
journalctl -k
Kontrollfragen
Was ist ein Bootloader?
Eine Textdatei, die fortlaufend verändert wird durch einen Nutzer oder ein Programm.
Wie kann man sich den MBR ausgeben lassen?
dd if=/dev/sda bs=512 count=1|od -h --endian=big
Wie kann man sich die Ausgaben, die der Kernel während des Sysemstarts produziert, ausgeben lassen?
dmesg |less
Wie kann man die Dateien in einem Verzeichnis nach Dateigröße sortieren?
ls -s | sort -n
Was passiert bei folgender Befehlszeile : dd if=/dev/sda bs=512 count=1|od -h --endian=big | nl
Der Master-Boot-Record (die ersten 512 Byte der Festplatte) wird ausgegeben. Der Befehl od -h gibt ihn in Hexadezimaler Form aus und der Befehl nl nummeriert die Zeilen.