Systemstart
- Einschalten
- Bios prüft Hardware
- Bios prüft Datenträger auf Bootfähigkeit
- Bios übergibt an Bootmanager (grub, LILO)
- Bootmanager fragt nach Optionen
- Bootmanager lädt den Kernel
- Kernel entpackt sich selbst
- Kernel wertet Bootoptionen aus
- Kernel initialisiert Hardware
- Kernel startet Prozess init
- init wertet inittab aus
- init startet erstes boot script
- boot script initialisiert Basis System und Virtuelle Dateisysteme
- boot script wertet Boot Parameter aus
- boot script startet weitere scripte entsprechend runlevel
- Anmelde Bildschirm
- User kann System nutzen
BIOS
Das BIOS (Basic Input/Output System) befindet sich als spezieller Speicherbaustein (CMOS) auf der Hauptplatine des PCs und legt u.a fest, ob oder in welcher Reihenfolge nach zu bootenden Medien gesucht werden soll. Auf allen bootfähigen Medien wird nach einem gültigen Master Boot Record (MBR) gesucht, der sich bei Festplatten auf dem ersten Sector, den ersten 512 Bytes befindet.
BIOS Informationen auslesen
dmidecode
Mit dem Paket „dmidecode“ lassen sich alle im BIOS verfügbaren Informationen auslesen, wie Systemhersteller, BIOS-Version, Hersteller und Versionsnummer des Mainboards usw. Das Programm ist als „root“ zu starten.
DMI steht dabei für Desktop Management Interface.
dmidecode enthält noch die Werkzeuge:
- biosdecode ⇒ zeigt in /dev/mem gelisteten BIOS Informationen an. (biosencode nutzt keine Optionen und Argumente.)
- ownership ⇒ zeigt den Eigentümer an (Compaq-Computer).
- vpddecode ⇒ Produktdaten von IBM-Computern anzeigen.
Syntax:
- dmidecode -option [argumente]
Optionen:
- -s system-manufacturer ⇒ zeigt den Systemhersteller.
- -s system-product-name ⇒ gibt den Produktnamen aus.
- -s system-version ⇒ zeigt die Modell-Nr.
- -s bios-version ⇒ zeigt BIOS Version.
- -s baseboard-manufacturer ⇒ gibt Mainboardhersteller aus.
- -s baseboard-product-name ⇒ Mainboardmodell ausgeben.
- -s baseboard-version ⇒ Versionsnummer des Mainboards.
- -s (weitere string Argumente) ⇒ bios-vendor, bios-release-date, system-serial-number, system-uuid, baseboard-serial-number, baseboard-asset-tag, chassis-manufacturer, chassis-type, chassis-version, chassis-serial-number, chassis-asset-tag, processor-family, processor-manufacturer, processor-version, processor-frequency.
- -h ⇒ Hilfe anzeigen.
- -d [file(default: /dev/mem)] ⇒ zeigt in /dev/mem gelisteten BIOS Informationen an.
- -q ⇒ Unbekannte, inaktive und OEM einträge im BIOS werden nicht angezeigt.
- -t processor ⇒ zeigt Informationen zum Prozessor.
- -t bios ⇒ alle BIOS Inforationen anzeigen.
- -t (weitere type Argumente) ⇒ system, baseboard, chassis, memory, cache, connector, slot.
- -t[0-39] ⇒ zeigt verschiedene BIOS Informationen. (Ausführlichere Beschreibung in der manpage.)
- Tabelle zu den type argumenten unten.
- -u ⇒ Einträge werden nicht decodiert, jedoch als hexadecimal und ASCII ausgegeben.
- -V ⇒ zeigt installierte Version von dmidecode and Exit.
Tabelle type Schlüsselwörter | |||
---|---|---|---|
0 BIOS | 13 BIOS Language | 26 Voltage Probe | 39 Power Supply |
1 System | 14 Group Associations | 27 Cooling Device | |
2 Base Board | 15 System Event Log | 28 Temperature Probe | |
3 Chassis | 16 Physical Memory Array | 29 Electrical Current Probe | |
4 Processor | 17 Memory Device | 30 Out-of-band Remote Access | |
5 Memory Controller | 18 32-bit Memory Error | 31 Boot Integrity Services | |
6 Memory Module | 19 Memory Array Mapped Address | 32 System Boot | |
7 Cache | 20 Memory Device Mapped Address | 33 64-bit Memory Error | |
8 Port Connector | 21 Built-in Pointing Device | 34 Management Device | |
9 System Slots | 22 Portable Battery | 35 Management Device Component | |
10 On Board Devices | 23 System Reset | 36 Management Device Threshold Data | |
11 OEM Strings | 24 Hardware Security | 37 Memory Channel | |
12 System Configuration Options | 25 System Power Controls | 38 IPMI Device |
Die argumente von dmidecode sind Case Insensitiv. Die folgenden Kommandozeilen haben die gleiche auswirkung.
· dmidecode --type 0 --type 13 · dmidecode --type 0,13 · dmidecode --type bios · dmidecode --type BIOS · dmidecode -t0,13 · dmidecode -t0 -t13 · dmidecode -t bios
Beispiele:
root@home:# dmidecode -s system-manufacturer TOSHIBA
Systemhersteller anzeigen.
root@home:# dmidecode -t2 # dmidecode 2.9 SMBIOS 2.3 present. Handle 0x0002, DMI type 2, 8 bytes Base Board Information Manufacturer: ASUSTeK Computer INC. Product Name: A8N-E Version: 2.XX Serial Number: 1234567890
Mainboard BIOS Informationen ausgeben.
MBR (Master Boot Record)
Der „MBR“ befindet sich auf dem ersten Datenblock (512 Byte) eines Speichermediums z.B einer Festplatte und enthält die Partitionstabelle, die eine Aufteilung des Datenträgers in Partitionen beschreibt. Optional kann ein Bootloader zum starten eines Betriebssystems auf einer Partition im MBR gespeichert werden.
Adresse | ||||||
---|---|---|---|---|---|---|
hex | dez | Funktion | Größe (Bytes) | |||
0x0000 | 0 | Boot Loader Programm | 440 | |||
0x01B8 | 440 | Disk Signatur | 4 | |||
0x01BC | 444 | Null | 2 | |||
0x01BE | 446 | Partitionstabelle | 64 | |||
0x01FE | 510 | 55hex | Magic Number | 2 | ||
0x01FF | 511 | AAhex | ||||
512 |
Boot-Loader
Der Bootloader ist ein Programm das die Partitiostabelle nach sichtbaren bzw. aktiven Partitionen durchsucht, dadurch kann ein Betriebssystem auf einer aktiven Partition geladen werden. (Siehe Bootloader weiter unten.)
Disk Signatur
Die Disk Signatur wird z.B. von Windows XP und 2000 verwendet um den Basisdatenträger und Zuordnung der Laufwerksbuchstaben eindeutig zu identifizieren bzw. bei der Initialisierung einer neuen Festplatte.
Der Befehl „fdisk /mbr“ schreibt den Boot Code und Disk Signatur neu, während „fixmbr“ die Signatur unter Windows XP unverändert läßt. Das Linux Kommando „dd if=/dev/zero of=/dev/<device> bs=1 count=4 seek=440 conv=notrunc“ überschreibt die Disk Signatur mit Nullen, dadurch muß Windows eine neue Signatur erzeugen.
Partitionstabelle
Die Partitionstabelle zeigt welche Partitionen vorhanden sind. Die Partitionstabelle besteht aus vier Einträgen zu 16 Byte und beträgt insgesamt 64 Byte. Die Tabelle liegt bei Byte 446. In einer Partitionstabelle können bis zu vier Partitionen eingetragen werden. Dies können entweder vier primäre Partitionen oder bis zu drei Partitionen und eine erweiterte Partition sein. Innerhalb einer erweiterten Partition lassen sich weitere logische Partitionen erstellen, es handelt sich dann jedoch nicht um eine reale Partition in der Partitionstabelle, sondern um einen virtuellen Bereich der erweiterten Partition und entspricht daher keinen realen Laufwerk, Betriebssysteme können logische Laufwerke jedoch so behandeln.
Unter Linux gibt es den Logical Volume Manager, hier wird eine Festplatte in logische Blöcke eingeteilt und es sind dann bis 128 Partitionen möglich.
Magic Number
Die MBR Signatur besteht aus zwei Byte 55hex und AAhex. Dies wird auf Little-Endian Systemen als 16 Bit Zahl AA55hex interpretiert. Bei vorhandener Signatur geht das BIOS davon aus, dass ein gültiger MBR vorliegt und es sich um ein bootbares Medium handelt, wird keine Signatur gefunden oder ändert man diesen Wert, vermutet das BIOS dass es sich um einen neuen oder gelöschten Datenträger handelt und das Medium wird als nicht bootfähig eingestuft.
Bootloader
Der Bootloader besteht aus Code zum Laden des Betriebssystems oder weiteren Bootloader-Codes. Das ein System starten kann benötigt es den Boot-Strap-Loader. Nachdem das BIOS das System initialisiert hat sucht es nach startfähigen Laufwerken. Handelt es sich dabei um eine Festplatte wird der Sector 0 der Festplatte eingelesen. Dieser enthält dann den Boot-Strap-Loader selbst, oder innerhalb der Partitionstabelle einen Verweis auf die aktive Partition die den Bootloader enthält.
Unter Linux sind zwei Bootloader verfügbar:
- LILO (Linux Loader)
- GRUB (Grand Unified Bootloader)
Beide haben die Aufgabe den Kernel zu finden und starten. Danach sind sie bis zum nächsten Systemstart untätig.
LILO
LILO (Linux Loader) ist ein zweistufiger Bootloader. Der kleinere Teil von LILO befindet sich am Anfang des MBRs. Dem LILO bleiben 512-64-2=446 Byte. Die zweite Stufe von LILO enthält die Benutzerschnittstelle, die den Kernel auswählt und Parameter an den Kernel übergeben kann.
Kernel Parameter & Parameter für init
Beispiel für Kernel Parameter:
ide=nodma apm=off acpi=off
Es können auch Parameter an init übergeben werden, es kann z.B festgelegt werden in welchen Runlevel das System gestartet werden soll.
init=/sbin/init 2
Das System startet dann im Runlevel 2.
Fehlercodes beim Start
Wenn LILO geladen wird, schreibt er LILO auf den Bildschirm. Beim Laden erzeugt jeder Buchstabe die erfolgreiche Ausführung einer Aufgabe, die für den Start der zweiten Stufe von LILO erforderlich ist. Erscheint LILO nicht vollständig, liegt ein Problem vor.
<nichts> => Die erste Stufe von LILO wurde nicht ausgeführt L => die Datei /boot/boot.b konnte nicht geladen werden. Ein Festplattenfehler könnte das Problem sein. LI => die Datei /boot/boot.b konnte gelesen, aber nicht ausgeführt werden. Vieleicht ist die Datei beschädigt. LIL => die zweite Stufe wurde gestartet, doch die Map-Datei konnte nicht gelesen werden, möglich ist ein fehlerhaftes Bootlaufwerk. LIL? => die zweite Stufe wurde in einen falschen Speicherbereich geladen. LIL- => die Map-Datei ist ungültig. Vieleicht wurde nach einer änderung der LILO Map-Installer nicht ausgeführt. LILO => die zweite Stage wurde erfolgreich geladen.
LILO Konfigurationsdatei
Die LILO Konfigurationsdatei „/etc/lilo.conf“ verfügt über eine globale Sektion, die für alle eingetragenen Systeme gilt. Es folgt mindstens eine weitere Section, die sich auf einen zu ladenden Kernel beziehen kann. Da LILO zu einem Teil im MBR dateisystemunabhängig gespeichert ist, kann er Betriebssysteme mit beliebigen Dateisystemen starten.
Beispiel für eine globale Section:
message = /boot/message timeout = 6 prompt title Debian GNU/Linux, kernel 2.6.26-2-686 root (hd0,0) kernel /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro quiet initrd /boot/initrd.img-2.6.26-2-686
Die einträge in der lilo.conf bedeuten:
- message ⇒ enhält den Pfad zur Datei, die beim Systemstart gezeigt wird (startmenü).
- timeout ⇒ gibt die Zeit in (s) an nach der das Standardsystem geladen wird (wenn keine Auswahl getroffen wurde.
- prompt ⇒ legt fest ob ein Prompt zur verfügung gestellt wird. (Bei physikalisch nicht gesicherten System ist dies eine Sicherheitslücke).
- default ⇒ kennzeichnet das System das gestartet wird, wenn der User keine Auswahl trifft.
- boot ⇒ zeigt auf die Festplatte, die den Bootsector bereitstellt. (/dev/hda).
- image ⇒ das zu startende boot Image.
- label ⇒ alias für den zu startenden Kernel.
- map ⇒ Map-Datei (/boot/boot.b).
- initrd ⇒ enthält Pfad zur initialen Ram-Disk, wenn vorhanden.
- root ⇒ zeigt auf das root-Dateisystem wie ausgewählt.
Map-Installer
Wenn Änderungen an der Konfiguration durchgeführt wurden, muss durch den Aufruf von „lilo“ der Map Installer ausgeführt werden. Der Systemstart würde sonst mit der alten Konfiguration starten oder fehlschlagen.
Beispiel:
merkur:/boot # lilo Added 2.6.35-custom Added 2.6.34-custom * Added Failsave GNU/DEBIAN
lilo können folgende Optionen übergeben werden:
- -C ⇒ wenn nicht /etc/lilo.conf verwendet werden soll kann man mit dieser Option eine alternative Konfigurationsdatei angeben.
- -R ⇒ stellt die Kommandozeile für den nächsten Systemstart ein.
- -M ⇒ schreibt einen MBR auf die Festplatte.
- -q ⇒ zeigt die aktuelle Bootkonfiguration.
- -v ⇒ verbose Mode.
GRUB
Grub (Grand Unified Bootloader) ist ebenfalls ein zweistufiger Bootloader. Derzeit sind es sogar drei Stufen, da aus Komatibilität zu anderen Dateisystemen ein Stage 3 hinzugefügt wurde. GRUB greift über das Dateisystem auf den Kernel zu, deshalb muss auch kein Map Installer ausgeführt werden, wenn z.B. ein neuer Kernel ins System Integriert wurde.
GRUB Stage
Das Programm für den ersten Stage befindet sich im MBR der Festplatte von der das System starten soll. Es gibt auch noch eine Kopie als Binärdatei in „/boot/grub/stage1“. Für Stage 1.5 wird ein Programm ausgeführt, das mit dem verwendeten Dateisystem übereinstimmt.
ext2_stage1.5. Diese Datei befindet sich im Verzeichnis „/boot/grub/“.
Die Stufe Stage 2 des Bootloaders befindet sich in der Datei „/boot/grub/stage2“. Dieses Programm stellt für den User das Bootmenü bereit und startet den Kernel.
GRUB Prompt
Über den GRUB Prompt kann man mit dem Bootloader durch Drücken der Taste [E] interagieren, wenn z.B. durch eine Fehlkonfiguration das System nicht startet, kann man mit GRUB das System manuell booten. Dazu benötigt GRUB die Position des Hauptverzeichnisses, des Kernels und die initiale Ram-Disk. Durch nochmaliges drücken der [E] Taste werden die Boot Optionen hinzugefügt. Ab „Grub2“ wird der gewünschte Kernel mit den Pfeiltasten angewählt, dann die [E] Taste drücken und Optionen eingeben.
Betätigt man im Grub Startbildschirm die Taste [C], kommt man in das Command Line Interface von Grub. Mit dem Kommando „help“ bekommt man eine Ausgabe von Grub befehlen. Mit „help [befehl]“ bekommt man Hilfe über den jeweiligen Befehl. Die Grub-Shell kennt auch Autovervollständigen mit der Tabulatortaste.
grub>
Beispiel für mauellen Systemstart:
grub> root (hd0.0) grub> kernel /boot/vmlinuz-2.6.35.45 root/dev/hda1 grub> initrd /boot/initrd-2.6.35.45.img grub> boot
Den Startvorgang kann man bei „Grub1.X“ durch betätigung der Eingabetaste und [B], bei „Grub2“ mit „Strg+X“ fortsetzen.
Wird im Grub Prompt der Parameter „init=/bin/bash“ ausgeführt, erhält man eine „root“ Shell ohne Passworteingabe im „Read-Only Modus“, dies kann benutzt werden wenn man das root Passwort vergessen hat. Durch den Befehl „mount -o remount,rw /“ wird das Stamm-Verzeichnis im Lese-Schreib Modus neu gemountet und es kann mit „passwd root“ ein neues Passwort vergeben werden.
GRUB Konfigurationsdateien
GRUB unterscheidet nicht zwischen IDE und SCSI Geräten. Die erste Partition auf der Festplatte bezeichnet GRUB als (hd0.0). Damit für den Start eine Zuordnung möglich ist, beötigt er die Datei „/boot/grub/device.map“. In dieser Datei gibt es eine Zuordnung zu Linux Geräten.
(hd0) /dev/hda
Die Datei „/boot/grub/menu.lst“ (softlink auf grub.conf) bei GRUB 0.X - 1.X, entspricht der Funktionsweise her der „lilo.conf“ beim LILO Bootloader.
menu.lst
Die Datei „menu.lst“ ist die Konfigurationsdatei älterer Grub Versionen. Wenn es notwendig ist manuell einen Kernel in die „menu.lst“ einzutragen, kann diese Datei mit folgenden Elementen modifiziert werden.
- title Debian GNU/Linux, kernel 2.6.26-2-686 ⇒ Titel für Grub Startmenü.
- root (hd0,0) ⇒ Root Dateisystem.
- kernel /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro quiet ⇒ Pfad zum Kernel, inclusive Bootoptionen.
- initrd /boot/initrd.img-2.6.26-2-686 ⇒ Pfad zur initialen Ramdisk.
Beispiel Datei menu.lst:
grub.cfg
Die Datei „/boot/grub/grub.cfg“ sollte nicht bearbeitet werden, da sie automatisch generiert wird. Sie wird ab Grub 1.9x eingesetzt. Bei manueller Bearbeitung würde bei einem Update des Bootloaders die Änderungen verworfen werden. Es sollte hierfür die Datei „/etc/default/grub“ verwendet werden. Hat man die Datei manuell bearbeitet, muß danach „update-grub“ ausgeführt werden um die neue „grub.cfg“ Datei zu generieren.
Beispiel einer /etc/default/grub:
Grub wiederherstellen
Sollte aus irgendwelchen Gründen Grub nicht starten, weil z.B. der MBR überschrieben wurde, kann mit Hilfe einer Live CD z.B. grml Grub wiederhergestellt werden.
Nach dem Start der Live CD, das Stammverzeichnis (/) und das (/boot) des Systems ermitteln. Hierzu die Datei „/etc/fstab“ des Systems mit einem Editor öffnen.
... # / was on /dev/sda4 during installation UUID=fc9ff9e5-f842-46d0-9e1c-29c746921478 / ext3 errors=remount-ro 0 1 # /boot was on /dev/sda3 during installation UUID=dr298a7d-56c6-43d2-a5d1-1d5o9j48be5c /boot ext3 defaults 0 2 ...
Die Boot Partition befindet sich hier im Beispiel auf „/dev/sda3“ und Root auf „/dev/sda4“. Das kann sich natürlich unterscheiden, je nach dem, wie man sein System angelegt hat.
Jetzt müssen die Verzeichnisse im lesen, schreiben Modus nach „/mnt“ des Live Systems gemountet werden.
mount -w /boot /mnt mount -w / /mnt
Danach in das Verzeichnis „/mnt/boot/grub“ wechseln …
update-grub
… und update-grub ausführen. Der Bootloader wird aktualisiert und kann wieder gestartet werden.
Root Passwort vergessen
Sollte man das „root“ Passwort vergessen haben, kann man über die Grub Shell root Rechte über das System erlangen. Hierbei übergibt man im Grub Prompt, in der Zeile des Linux Kernels „init=/bin/bash“, die Option „rw“ müßte auch möglich sein, dann kann man sich das „remount,rw“ sparen.
grub> root (hd0.0) grub> kernel /boot/vmlinuz-2.6.35.45 root/dev/hda1 rw init=/bin/bash grub> initrd /boot/initrd-2.6.35.45.img grub> boot
Jetzt wird nicht der „init Prozess“, sondern die Bash im lesen, schreiben Modus gestartet. Um auf dem „root“ Dateisystem Schreibrechte zu erlangen ist noch folgender Befehl notwendig …
mount -o remount,rw /
Nun kann mit folgenden Befehl das Passwort neu gesetzt werden.
passwd root
Cloud