Linux-Boot Lutz Schäfer, Jan Zabel November 3, 2016
Übersicht Datenträger Darstellungsweisen von Datenträgern Partitonierung LVM Dateisysteme MBR vs GPT Boot der Hardware Legacy EFI/UEFI Boot des Kernel Kernel / initramfs Kernelmodule Init-Systeme SysV-Init Openrc systemd
Darstellung von Datenträgern Physikalischer Aufbau (Begriffsklärung) Spuren
Darstellung von Datenträgern Physikalischer Aufbau (Begriffsklärung) Spuren Zonen auf magnetisierter Platte beeinflussen sich beim Flusswechsel
Darstellung von Datenträgern Physikalischer Aufbau (Begriffsklärung) Spuren Zonen auf magnetisierter Platte beeinflussen sich beim Flusswechsel Wie Spurrillen einer Schallplatte
Darstellung von Datenträgern Physikalischer Aufbau (Begriffsklärung) Spuren Zonen auf magnetisierter Platte beeinflussen sich beim Flusswechsel Wie Spurrillen einer Schallplatte Zylinder
Darstellung von Datenträgern Physikalischer Aufbau (Begriffsklärung) Spuren Zonen auf magnetisierter Platte beeinflussen sich beim Flusswechsel Wie Spurrillen einer Schallplatte Zylinder übereinanderliegende Spuren Addressierung über Plattenköpfe
Darstellung von Datenträgern Physikalischer Aufbau (Begriffsklärung) Spuren Zonen auf magnetisierter Platte beeinflussen sich beim Flusswechsel Wie Spurrillen einer Schallplatte Zylinder übereinanderliegende Spuren Addressierung über Plattenköpfe Sektoren
Darstellung von Datenträgern Physikalischer Aufbau (Begriffsklärung) Spuren Zonen auf magnetisierter Platte beeinflussen sich beim Flusswechsel Wie Spurrillen einer Schallplatte Zylinder übereinanderliegende Spuren Addressierung über Plattenköpfe Sektoren kleinste ansprechbare physische Einheit
Darstellung von Datenträgern Physikalischer Aufbau (Begriffsklärung) Spuren Zonen auf magnetisierter Platte beeinflussen sich beim Flusswechsel Wie Spurrillen einer Schallplatte Zylinder übereinanderliegende Spuren Addressierung über Plattenköpfe Sektoren kleinste ansprechbare physische Einheit Festplatten 512 Byte CD-ROMs 2 Kilobyte
Darstellung von Datenträgern Logischer Aufbau Blocks kleinste anprechbare logische Einheit
Darstellung von Datenträgern Logischer Aufbau Blocks kleinste anprechbare logische Einheit entspricht mindestens der Sektorgrösse
Darstellung von Datenträgern Logischer Aufbau Blocks kleinste anprechbare logische Einheit entspricht mindestens der Sektorgrösse immer ein Vielfaches einer Zweierpotenz
Darstellung von Datenträgern Logischer Aufbau Blocks kleinste anprechbare logische Einheit entspricht mindestens der Sektorgrösse immer ein Vielfaches einer Zweierpotenz Addressierung mittels Logical Block Addressing LBA = (C HPC + H) SPT + (S 1)
Darstellung von Datenträgern Logischer Aufbau Blocks kleinste anprechbare logische Einheit entspricht mindestens der Sektorgrösse immer ein Vielfaches einer Zweierpotenz Addressierung mittels Logical Block Addressing LBA = (C HPC + H) SPT + (S 1) Partitionen Eine Partition besteht aus Start-, Endaddresse und Sectorzahl
Darstellung von Datenträgern Logischer Aufbau Blocks kleinste anprechbare logische Einheit entspricht mindestens der Sektorgrösse immer ein Vielfaches einer Zweierpotenz Addressierung mittels Logical Block Addressing LBA = (C HPC + H) SPT + (S 1) Partitionen Eine Partition besteht aus Start-, Endaddresse und Sectorzahl Die Partitionstabelle ist eine Liste von Partitionsdefinitionen
Darstellung von Datenträgern Logischer Aufbau Blocks kleinste anprechbare logische Einheit entspricht mindestens der Sektorgrösse immer ein Vielfaches einer Zweierpotenz Addressierung mittels Logical Block Addressing LBA = (C HPC + H) SPT + (S 1) Partitionen Eine Partition besteht aus Start-, Endaddresse und Sectorzahl Die Partitionstabelle ist eine Liste von Partitionsdefinitionen Partitionen sind im Filesystem als Blockdevices sichtbar zb /dev/sda1 /dev/mmcblk0p15
Darstellung von Datenträgern Logischer Aufbau Blocks kleinste anprechbare logische Einheit entspricht mindestens der Sektorgrösse immer ein Vielfaches einer Zweierpotenz Addressierung mittels Logical Block Addressing LBA = (C HPC + H) SPT + (S 1) Partitionen Eine Partition besteht aus Start-, Endaddresse und Sectorzahl Die Partitionstabelle ist eine Liste von Partitionsdefinitionen Partitionen sind im Filesystem als Blockdevices sichtbar zb /dev/sda1 /dev/mmcblk0p15 direkt auf der logischen Platte oder virtuell mittels LVM
Erstellen von Partitionen Direkt: mittels fdisk, gdisk, gparted (graphisch)
Erstellen von Partitionen Direkt: mittels fdisk, gdisk, gparted (graphisch) man programm
Erstellen von Partitionen Direkt: mittels fdisk, gdisk, gparted (graphisch) man programm erstellen ist einfach
Erstellen von Partitionen Direkt: mittels fdisk, gdisk, gparted (graphisch) man programm erstellen ist einfach ABER: Verändern nur an Partitionsgrenzen
Erstellen von Partitionen Direkt: mittels fdisk, gdisk, gparted (graphisch) man programm erstellen ist einfach ABER: Verändern nur an Partitionsgrenzen Demonstration?
Erstellen von Partitionen Logical Volume Manager weitere Abstraktionsebene
Erstellen von Partitionen Logical Volume Manager weitere Abstraktionsebene notwendig bei Partitionen innerhalb verschlüsselter Festplatten
Erstellen von Partitionen Logical Volume Manager weitere Abstraktionsebene notwendig bei Partitionen innerhalb verschlüsselter Festplatten Phys Device (LBA) Volume Group Volumes
Erstellen von Partitionen Volume Group (VG)
Erstellen von Partitionen Volume Group (VG) Zuweisung von logischen/physikalischen Platten
Erstellen von Partitionen Volume Group (VG) Zuweisung von logischen/physikalischen Platten einzelne Festplatten, Partitionen, Raids
Erstellen von Partitionen Volume Group (VG) Zuweisung von logischen/physikalischen Platten einzelne Festplatten, Partitionen, Raids Volume
Erstellen von Partitionen Volume Group (VG) Zuweisung von logischen/physikalischen Platten einzelne Festplatten, Partitionen, Raids Volume sind die eigentlichen Partitionen
Erstellen von Partitionen Volume Group (VG) Zuweisung von logischen/physikalischen Platten einzelne Festplatten, Partitionen, Raids Volume sind die eigentlichen Partitionen MUSS innerhalb einer VG liegen
Erstellen von Partitionen Volume Group (VG) Zuweisung von logischen/physikalischen Platten einzelne Festplatten, Partitionen, Raids Volume sind die eigentlichen Partitionen MUSS innerhalb einer VG liegen Grössenänderung wärend des laufenden Betriebs möglich
Erstellen von Partitionen Volume Group (VG) Zuweisung von logischen/physikalischen Platten einzelne Festplatten, Partitionen, Raids Volume sind die eigentlichen Partitionen MUSS innerhalb einer VG liegen Grössenänderung wärend des laufenden Betriebs möglich zum löschen/umbenennen Volume aushängen
Erstellen von Partitionen Volume Group (VG) Zuweisung von logischen/physikalischen Platten einzelne Festplatten, Partitionen, Raids Volume sind die eigentlichen Partitionen MUSS innerhalb einer VG liegen Grössenänderung wärend des laufenden Betriebs möglich zum löschen/umbenennen Volume aushängen Vorteile: Flexibilität im Layout Snapshots konsistente Backups, Systemrecovery kein Rollback ala Timemachine aber manuell
Erstellen von Partitionen Volume Group (VG) Zuweisung von logischen/physikalischen Platten einzelne Festplatten, Partitionen, Raids Volume sind die eigentlichen Partitionen MUSS innerhalb einer VG liegen Grössenänderung wärend des laufenden Betriebs möglich zum löschen/umbenennen Volume aushängen Vorteile: Flexibilität im Layout Snapshots konsistente Backups, Systemrecovery kein Rollback ala Timemachine aber manuell Nachteile: viele zueinander inkompatible Lösungen aufwendige Migration von direkten Partitionen GRUB2 oder EFI als Bootloader
Erstellen von Partitionen Erstellen eines LVM: laden des Device-Mapper Moduls dm-mod
Erstellen von Partitionen Erstellen eines LVM: laden des Device-Mapper Moduls dm-mod pvcreate erzeugen der physikalische Disk[s] für ein LVM
Erstellen von Partitionen Erstellen eines LVM: laden des Device-Mapper Moduls dm-mod pvcreate erzeugen der physikalische Disk[s] für ein LVM vgcreate erstellen einer Volumegroup
Erstellen von Partitionen Erstellen eines LVM: laden des Device-Mapper Moduls dm-mod pvcreate erzeugen der physikalische Disk[s] für ein LVM vgcreate erstellen einer Volumegroup lvcreate restellen eines Volumes in VG
Erstellen von Partitionen Erstellen eines LVM: laden des Device-Mapper Moduls dm-mod pvcreate erzeugen der physikalische Disk[s] für ein LVM vgcreate erstellen einer Volumegroup lvcreate restellen eines Volumes in VG in /etc/mkinitcpioconf unter HOOKS udev und lvm2 vor filesystems
Erstellen von Partitionen Erstellen eines LVM: laden des Device-Mapper Moduls dm-mod pvcreate erzeugen der physikalische Disk[s] für ein LVM vgcreate erstellen einer Volumegroup lvcreate restellen eines Volumes in VG in /etc/mkinitcpioconf unter HOOKS udev und lvm2 vor filesystems bei Snapshots dm-snapshot ins MODULE array eintragen
Erstellen von Partitionen Erstellen eines LVM: laden des Device-Mapper Moduls dm-mod pvcreate erzeugen der physikalische Disk[s] für ein LVM vgcreate erstellen einer Volumegroup lvcreate restellen eines Volumes in VG in /etc/mkinitcpioconf unter HOOKS udev und lvm2 vor filesystems bei Snapshots dm-snapshot ins MODULE array eintragen mit mkinitcpio Kernel neubauen
Erstellen von Partitionen
Filesystems Abbildung Block Devices indizierbares Wörterbuch
Filesystems Abbildung Block Devices indizierbares Wörterbuch EFI Partition muss FAT32 sein
Filesystems Abbildung Block Devices indizierbares Wörterbuch EFI Partition muss FAT32 sein ext4 robustes journaling filesystem
Filesystems Abbildung Block Devices indizierbares Wörterbuch EFI Partition muss FAT32 sein ext4 robustes journaling filesystem btrfs atomares copy-on-write filessystem (snapshots)
Filesystems Abbildung Block Devices indizierbares Wörterbuch EFI Partition muss FAT32 sein ext4 robustes journaling filesystem btrfs atomares copy-on-write filessystem (snapshots) xfs schnell binäres journaling
Filesystems Abbildung Block Devices indizierbares Wörterbuch EFI Partition muss FAT32 sein ext4 robustes journaling filesystem btrfs atomares copy-on-write filessystem (snapshots) xfs schnell binäres journaling zfs orginales btrfs
MBR/Legacy/MS-DOS Am Anfang: 4 Felder für Partitionseinträge (primary)
MBR/Legacy/MS-DOS Am Anfang: 4 Felder für Partitionseinträge (primary) Möglichkeit zu erweiterten Partitionen: logische Partitionen, die weitere enthalten
MBR/Legacy/MS-DOS Am Anfang: 4 Felder für Partitionseinträge (primary) Möglichkeit zu erweiterten Partitionen: logische Partitionen, die weitere enthalten Gleichzeitig auch Bootloader
GPT Beliebig viele Partitionen
GPT Beliebig viele Partitionen Jede Partition wird durch eine UUID identifiziert (auch GUID genannt, daher GUID Partition Table)
GPT Beliebig viele Partitionen Jede Partition wird durch eine UUID identifiziert (auch GUID genannt, daher GUID Partition Table) Enthält dort, wo unter Legacy der MBR wäre, einen Protective MBR, damit kein Partitionierungstool freien Speicher sieht
GPT Beliebig viele Partitionen Jede Partition wird durch eine UUID identifiziert (auch GUID genannt, daher GUID Partition Table) Enthält dort, wo unter Legacy der MBR wäre, einen Protective MBR, damit kein Partitionierungstool freien Speicher sieht Möglichkeit, statt einem protektiven MBR Partitioen sowohl im MBR as auch in der GPT zu definieren Bei einer Änderung muss beides geändert werden
GPT Beliebig viele Partitionen Jede Partition wird durch eine UUID identifiziert (auch GUID genannt, daher GUID Partition Table) Enthält dort, wo unter Legacy der MBR wäre, einen Protective MBR, damit kein Partitionierungstool freien Speicher sieht Möglichkeit, statt einem protektiven MBR Partitioen sowohl im MBR as auch in der GPT zu definieren Bei einer Änderung muss beides geändert werden GPT hat am Ende einen zweiten Eintrag (Backup)
Legacy MBR enthält: Code, der vom BIOS ausgeführt wird, nachdem es sich selbst initialisiert hat
Legacy MBR enthält: Code, der vom BIOS ausgeführt wird, nachdem es sich selbst initialisiert hat Startpunkt für Betriebssysteme Boot loader
Legacy MBR enthält: Code, der vom BIOS ausgeführt wird, nachdem es sich selbst initialisiert hat Startpunkt für Betriebssysteme Boot loader LILO Alles im MBR Der Code, der im MBR steht, bootet den Kernel
Legacy MBR enthält: Code, der vom BIOS ausgeführt wird, nachdem es sich selbst initialisiert hat Startpunkt für Betriebssysteme Boot loader LILO Alles im MBR Der Code, der im MBR steht, bootet den Kernel GRUB1 Viel Code, passt nicht in den MBR Stage 1: im MBR, enthält den Sprungbefehl zur Stage2 Stage 2: zwischen MBR und der ersten Partition
Legacy MBR enthält: Code, der vom BIOS ausgeführt wird, nachdem es sich selbst initialisiert hat Startpunkt für Betriebssysteme Boot loader LILO Alles im MBR Der Code, der im MBR steht, bootet den Kernel GRUB1 Viel Code, passt nicht in den MBR Stage 1: im MBR, enthält den Sprungbefehl zur Stage2 Stage 2: zwischen MBR und der ersten Partition GRUB2 Stage 1,5: Enthält Dateisystemtreiber, um die auf der Bootpartition befindliche Stage2 zu laden Stage 2: Liegt auf dem Boot-Dateisystem und kann vieles, da sie beliebig groß sein kann
Legacy MBR enthält: Code, der vom BIOS ausgeführt wird, nachdem es sich selbst initialisiert hat Startpunkt für Betriebssysteme Boot loader LILO Alles im MBR Der Code, der im MBR steht, bootet den Kernel GRUB1 Viel Code, passt nicht in den MBR Stage 1: im MBR, enthält den Sprungbefehl zur Stage2 Stage 2: zwischen MBR und der ersten Partition GRUB2 Stage 1,5: Enthält Dateisystemtreiber, um die auf der Bootpartition befindliche Stage2 zu laden Stage 2: Liegt auf dem Boot-Dateisystem und kann vieles, da sie beliebig groß sein kann SysLinux: bootet wie GRUB2
EFI/UEFI Kann direkt (EFI-fähige) Kernel booten, die auf einer bestimmten Partition liegen
EFI/UEFI Kann direkt (EFI-fähige) Kernel booten, die auf einer bestimmten Partition liegen die FAT32-formatiert und als EFI-System markiert ist!!!
EFI/UEFI Kann direkt (EFI-fähige) Kernel booten, die auf einer bestimmten Partition liegen die FAT32-formatiert und als EFI-System markiert ist!!! Bei Linux: /boot
EFI/UEFI Kann direkt (EFI-fähige) Kernel booten, die auf einer bestimmten Partition liegen die FAT32-formatiert und als EFI-System markiert ist!!! Bei Linux: /boot Hat native Applikationen (wie Bootloader, Shell)
EFI/UEFI Kann direkt (EFI-fähige) Kernel booten, die auf einer bestimmten Partition liegen die FAT32-formatiert und als EFI-System markiert ist!!! Bei Linux: /boot Hat native Applikationen (wie Bootloader, Shell) Braucht für normale Funktionen keinen Boot Loader
EFI/UEFI Kann direkt (EFI-fähige) Kernel booten, die auf einer bestimmten Partition liegen die FAT32-formatiert und als EFI-System markiert ist!!! Bei Linux: /boot Hat native Applikationen (wie Bootloader, Shell) Braucht für normale Funktionen keinen Boot Loader Erweiterung Secure Boot: Nur digital Signiertes wird geladen
Boot auf Kernel-Seite Kernel initialisiert sich selbst und grundlegende Speicherverwaltung und die Hardware, gemäß seiner Treiber
Boot auf Kernel-Seite Kernel initialisiert sich selbst und grundlegende Speicherverwaltung und die Hardware, gemäß seiner Treiber Kernel startet einen festlegbaren Prozess
Boot auf Kernel-Seite Kernel initialisiert sich selbst und grundlegende Speicherverwaltung und die Hardware, gemäß seiner Treiber Kernel startet einen festlegbaren Prozess in aller Regel ein Initsystem, das den Systemstart ab dort übernimmt und überwacht
Boot auf Kernel-Seite Kernel initialisiert sich selbst und grundlegende Speicherverwaltung und die Hardware, gemäß seiner Treiber Kernel startet einen festlegbaren Prozess in aller Regel ein Initsystem, das den Systemstart ab dort übernimmt und überwacht Für Wartungsaufgaben kann man auch eine Shell starten
Kernelmodule Codeteile welche zur Laufzeit geladen werden können
Kernelmodule Codeteile welche zur Laufzeit geladen werden können zb Gerätetreiber
Kernelmodule Codeteile welche zur Laufzeit geladen werden können zb Gerätetreiber kein reboot bei Änderungen
Kernelmodule Codeteile welche zur Laufzeit geladen werden können zb Gerätetreiber kein reboot bei Änderungen kein kompletter Systemabsturz bei Fehlverhalten
Kernelmodule lsmod Anzeigen geladener Module
Kernelmodule lsmod Anzeigen geladener Module modinfo Informationen über ein Modul
Kernelmodule lsmod Anzeigen geladener Module modinfo Informationen über ein Modul systool Optionen eines Moduls
Kernelmodule lsmod Anzeigen geladener Module modinfo Informationen über ein Modul systool Optionen eines Moduls modprobe Laden/Entladen von Modulen
Kernelmodule lsmod Anzeigen geladener Module modinfo Informationen über ein Modul systool Optionen eines Moduls modprobe Laden/Entladen von Modulen /etc/modules-loadd/ default-konfiguration
SysV-Init (historisch) serieller Start entsprechend der Runlevel aller Dienste
SysV-Init (historisch) serieller Start entsprechend der Runlevel aller Dienste manuelle Konfiguration der Startreihenfolge
SysV-Init (historisch) serieller Start entsprechend der Runlevel aller Dienste manuelle Konfiguration der Startreihenfolge alle Dienste laufen im Hintergrund schwierig festzustellen ob ein Prozess noch läuft
SysV-Init (historisch) serieller Start entsprechend der Runlevel aller Dienste manuelle Konfiguration der Startreihenfolge alle Dienste laufen im Hintergrund schwierig festzustellen ob ein Prozess noch läuft Runlevel (starre Konfiguration)
SysV-Init (historisch) serieller Start entsprechend der Runlevel aller Dienste manuelle Konfiguration der Startreihenfolge alle Dienste laufen im Hintergrund schwierig festzustellen ob ein Prozess noch läuft Runlevel (starre Konfiguration) 0 = poweroff 6 = reboot 3 = multiuser mit netzwerk
Openrc vollständig abwärtskompartibel mit SysV-Init
Openrc vollständig abwärtskompartibel mit SysV-Init hauptsächliche Verwendung bei Gentooderivaten (aber nicht exclusive)
Openrc vollständig abwärtskompartibel mit SysV-Init hauptsächliche Verwendung bei Gentooderivaten (aber nicht exclusive) depscansh baut einen Dependency-tree
Openrc vollständig abwärtskompartibel mit SysV-Init hauptsächliche Verwendung bei Gentooderivaten (aber nicht exclusive) depscansh baut einen Dependency-tree weitere Informationen: https://wikigentooorg/wiki/openrc
systemd (System- und Sessionmanger) strickt paralleler Start aller Dienste
systemd (System- und Sessionmanger) strickt paralleler Start aller Dienste manuelle Konfiguration der Startreihenfolge entfällt
systemd (System- und Sessionmanger) strickt paralleler Start aller Dienste manuelle Konfiguration der Startreihenfolge entfällt Scripte in INI-änlichem Format liegen in /{etc,lib}/systemd/system/
systemd (System- und Sessionmanger) strickt paralleler Start aller Dienste manuelle Konfiguration der Startreihenfolge entfällt Scripte in INI-änlichem Format liegen in /{etc,lib}/systemd/system/ Units werden in folgende Typen unterschieden device Legt Gerätedateien an mount Ein- und Aushängen von Dateisystemen automount Automatisches Ein- und Aushängen von Dateisystemen path Startet die Unit via inotify service Für Dienste socket Stellt Verbindungen zwischen Prozessen her target Definiert eine Gruppe von Units timer Für wiederkehrende Aufgaben, ähnlich cron-jobs
systemd (System- und Sessionmanger) strickt paralleler Start aller Dienste manuelle Konfiguration der Startreihenfolge entfällt Scripte in INI-änlichem Format liegen in /{etc,lib}/systemd/system/ Units werden in folgende Typen unterschieden device Legt Gerätedateien an mount Ein- und Aushängen von Dateisystemen automount Automatisches Ein- und Aushängen von Dateisystemen path Startet die Unit via inotify service Für Dienste socket Stellt Verbindungen zwischen Prozessen her target Definiert eine Gruppe von Units timer Für wiederkehrende Aufgaben, ähnlich cron-jobs nur service und timer Units sollten vom Benutzer geändert werden
Beispiele für Servicefiles [Unit] Description=Foo Documentation=[https://,man:]path/to/file Wants= list of dependencys Conflicts= list of units Before=, After= list of units OnFailure= list of units StopWhenUnneeded=[true,false]
wichtige Variablen [Service] Type=[simple,forking,oneshot,dbus,notify,idle] ExecStart=/path/to/binary ExecStartPre=, ExecStartPost= ExecReload=, ExecStop=, ExecStopPost= Restart=[no,on-success,on-failure,on-abnormal,on-watchdog,onabort,always] SuccessExitStatus=1 2 8 SIGKILL [Install] WantedBy=multi-usertarget