System und Booten

Das Linux-System unter der „Haube“ und der Startvorgang…

Bootvorgang

Eine exemplarische Darstellung inklusive Erläuterungen zu Linux-Bootvorgängen:

  1. Einschalten (Reset, POST - Power On Self Test)

  2. BIOS / UEFI mit Bootsequenz (Startreihenfolge; engl: Bootsequence / Startmedien)

    Übersicht Bootmedien:

    USB (Sticks / HD), Netzwerk (PXE / TFTP), Festplatten / SSDs, Optische Medien (CD/DVD)

  3. MBR lesen- Masterbootrecord mit Partitionstabelle

    (maximal 4 Partitionen: 4 Primäre oder 3 Primäre und 1 Erweiterte)

    Hinweis:

    für das Booten von HDs > 2,2 TB wird UEFI mit GPT (GUID Partition Table) benötigt

    Erinnerung / Tipp: (ggf. nach Fehlschlag Parallelinstalation zu Windows)

    Win-Systeme benötigen als Bootstandard eine Aktive primäre Partition inkl. eines „sauberen“ MBR (Generischer MBR)

    → Reparatur-Tipp zum MBR: mit Win-DVD:

    bootrec /fixmbr (bzw. bootrec /fixboot für Bootsektor) in Reparaturkonsole

    Darstellung zu Partitionierungen:

    exemplarische Szenarios für Parallelinstallation mit Windows - Linktipp MS

  4. Linux-Bootmanager: GRUB2 (Übersicht Bootmanager und Technik Bootmanager folgt)

    Vorgänger / Bootalternativen: GRUB (Version 1), LILO (Linux Loader)

  5. Kernel und initrd (klassisch: init Ramdisk - initrd laden; Anm.: die Ramdisk ist optional)

    Symlinks bei openSUSE: vmlinux (komprimierter Kernel), initrd

    Analyse Kernel-Version: uname -a bzw. uname -r

  6. systemd (Erster Prozess mit ID „1“) (früher: SysVInit mit Urprozess init)

Anm.: openSUSE (und fast alle anderen Linuxe benutzen systemd („abwärtskompatibel“ zu init),

Ubuntu hatte zwischenzeitlich upstart als init-Lösung (aktuell: auch systemd ab Ubuntu 16.04 LTS)

Gründe für Abkehr von SysVinit zu alternativen init-Techiken:

Effizienter, Parallel arbeitend, Abhängigkeiten von Prozessen cleverer lösend

Tipp zur Startanalyse:

systemd-analyze blame (erzählt in ms - Millisekunden - die Geschichte der „Starts“)

oder auch: systemd-analyze plot > grafische-analyse.svg (erstellt SVG-Grafik)

Systemd Analyse mit Plot

Systemd Analyse mit Plot

Technisch: systemd arbeitet mit Targets (z.B. default.target) statt den klassischen Runleveln

Befehle:

init , telinit , runlevel , systemctl (statt sysctl bei init-Technik), journalctl (für Analyse/Logging)

Bootmanager GRUB2

Lilo (sehr alt und unflexibel), GRUB (Version 1 bzw. GRUB Legacy - Erläuterungen auf openSUSE Portal)

aktuell: GRUB2 (technisch extrem zu GRUB abweichend und mächtiger!)

GRUB-Ordner: /boot/grub2

GRUB konfigurieren mit /etc/default/grub und den /etc/grub.d/ Dateien

GRUB aktualisieren mit Befehlen

grub2-mkconfig -o /boot/grub2/grub.cfg

(so bei Suse - andere OS haben ein kleines Hilfsskript namens update-grub, welches diese Syntax ersetzt)

Grub2-Techniken bedürfen genauer Recherche und Betrachtungen!

Hinweis zum Bootloader mittels YaST - System - Bootloader mögliche Speicherorte für GRUB: MBR (Master Boot Record), Bootsektor einer Partition

Erläuterungen zu GRUB2: Link Ubuntuusers-Wiki (Achtung „Ubuntu-Brille“),

Linupedia-Artikel

Runlevel

(klassischer Begriff - systemd arbeitet mit Targets)

Grundlagenartikel systemd von Heise.de)

  • 0 - Stop/Halt

  • 1 / s / S - Single User (zu Wartungsarbeiten)

  • 2 - Multi-User (mit und ohne Netzwerk - je nach Distribution)

  • 3 - Multi-User und Netzwerk (klassische Serverumgebung LAMP und Co)

  • 4 - unbenutzt

  • 5 - Multi-User, Netzwerk, X-Server (heute mit Desktops wie KDE oder Gnome)

  • 6 - Reboot

Klassischer Ordner für Skripte /etc/init.d mit Unterordnern fürdie Runlevel

Momentaufnahme openSUSE 42.1 Runlevel 5:

/etc/init.d/rc5.d beinhaltet noch 3 Dienste mit entsprechenden (S Start - K Stop/Kill) Skripten

hier: avahi-daemon, postfix, udev

diese init-Skripte arbeiten dann mit Parametern start | stop | restart | reload

Momentaufnahme openSUSE 42.3:

keinerlei Skripte mehr in den Runlevel-Unterordnern /etc/init.d/rc0.d bis rc6.d (Anm.: nur noch in ./boot.d für AppArmor)

Anm.: Red Hat (und Co) arbeiten mit /etc/rc.d als Haupt-Skriptordner - siehe auch SymLink rc.d auf init.d bei openSUSE

systemd

(Reference Manual Chapter: The systemd Daemon)

init-Technik wird durch systemd-Technik ersetzt bei Beibehaltung der alten (abwärtskompatiblen) init-Skript-Techniken und Ordnerstrukturen nach SysVinit;

dadurch werden die Start-/Stoppmechanismen durch teils gleichzeitiges Abarbeiten von Aufrufen beschleunigt - siehe S- und K-Links in Runlevel-Ordnern alle mit gleicher Nummerierung (hier 50 - S50… / K50…)

Nur noch Skripte, die nicht sauber mit systemd arbeiten - oder noch nicht umgeschrieben worden sind - konnte man noch in diesen Ordnern finden!

Hinweis ab openSUSE 42.3:

Aktuell befinden sich nur im „allgemeinen“ Bootordner /etc/init.d/boot.d noch Start-/Stop-Skripte für AppArmor!

Runlevel-Tools:

runlevel , init X (X = S, 0, 1, 3, 5, 6) , shutdown , halt , reboot

Hier mal eine ausführlichere Gegenüberstellung:

SysVinit

systemd

Bemerkungen

Runlevel

Targets

Bezeichungen für gewünschte Bootumgebung

/etc/inittab

keine /etc/inittab (!!) in Ordnern diverse Dateien: (z.B.) /usr/lib/systemd/system

Konfigurationsdatei(en)

runlevel init telinit sysctl chkkonfig

runlevel (wegen Kompatibilität) init (w. K.) telinit (w. K.) systemctl journalctl systemd- (z.B. systemd-analyze blame)

Tools

service sshd status

systemctl status sshd.service

Status openSSH Server

service sshd start

systemctl start sshd.service

Starten openSSH Server

service sshd stop

systemctl stop sshd.service

Stoppen openSSH Server

service sshd restart

systemctl restart sshd.service

Restarten openSSH Server

service sshd reload

systemctl reload sshd.service

Konfiguration openSSH Server neu laden

chkconfig sshd on

systemctl enable sshd.service

openSSH im Runlevel/Target aktivieren

chkconfig sshd off

systemctl disable sshd.service

openSSH im Runlevel/Target deaktivieren

Man. Suche in Logdateien

journalctl -u sshd.service

Journal für openSSH (als root)

chkconfig –list

systemctl list-unit-files systemctl list-dependencies multi-user-target

Übersicht Dienste in Runleveln/im Target

init 3 (oder) telinit 3

systemctl isolate runlevel3.target systemctl isolate multi-user.target

in Runlevel 3 wechseln bzw. in multi-user.target

init 5 (oder) telinit 5

systemctl isolate runlevel5.target systemctl isolate graphical.target

in Runlevel 5 wechseln bzw. in graphical.target

systemctl isolate default.target

in Standard-Runlevel wechseln bzw. in default.target

init 0 (oder) telinit 0 shutdown -h poweroff

systemctl isolate runlevel0.target systemctl isolate poweroff.target shutdown -h poweroff

Rechner ausschalten

init 6 (oder) telinit 6 shutdown -r reboot

systemctl isolate runlevel6.target systemctl isolate reboot.target shutdown -r reboot

Rechner rebooten

Tabelle zu SysVinit vs. systemd (siehe auch Link Fedoraprojekt (Link)

Übungen: systemctl start | stop | enable

Verzeichnisstruktur

(eine kurze Übersicht - siehe auch ausführlicher Beitrag zu FHS auf Wikipedia)

Filesystem Hierarchy

Filesystem

Einige Verzeichnisse:

/bin - Binaries, ausführbare Programme

/boot - Kernel vmlinuz (komprimiert, mehrere Versionen mit Nummern), initrd (Ramdisk)

/boot/grub2 - Bootmanger (hier nicht konfigurieren - siehe /etc/default/grub)

/dev - Geräte (/dev/fd0, /dev/sr0, /dev/sda, /dev/sdb, /dev/null, /dev/urandom, …)

/etc - Konfigurationen (/etc/fstab, /etc/hosts, /etc/hostname, viele Konfigurations-Unterordner: /etc/skel, …)

/etc/X11 - der Ordner für den X-Server (Grundtechnik Grafikausgabe)

/home - Benutzerprofile (/home/username)

/lib - Programmbibliotheken (Libraries; siehe auch /lib64)

/lost+found - bei journaling File Systems Daten für Fehlersuchen/Behebungen (siehe auch Toolreihe fsck)

/media - klassischer Mountpoint für Wechselmedien (bei openSUSE nicht mehr vorhanden)

/run/media/username - neuer Mountpoint für Wechselmedien bei openSUSE und Co

/mnt - Mountpoint (der alte Standardmount für manuelle Mounts)

/opt - optionale Software (hier am Beispiel XAMPP Lamp Server - Link); auch: kommerzielle Software

/proc - Prozesseverwaltung (siehe Ordner mit PID-Nummern)

Übung: cat /proc/meminfo ; cat /proc/interrupts ; cat /proc/cpuinfo

/root - Homedir für SuperUser root

/sbin - Programme mit hohen Privilegien (SuperUser)

/srv - Serverdienste (Verzeichnisse z.B. für Webserver - diese findet man gerne auch unter /var/www ;-)

/tmp - Temporärer Ordner; gemeinschaftlich im System (später: besondere Zugriffsrechte)

/usr - Großteil der installierten Software im System (Unix System Resources)

/var - Variable Daten

Unterscheidung/Gruppierung von Daten auf Unix/Linux Systemen gemäß File Hierarchy Standard (FHS):

  • veränderliche / dynamische vs. statische und

  • gemeinsam genutzte vs. nicht gemeinsam genutzte Verzeichnisse

gemeinsam nutzbar

nicht gemeinsam nutzbar

statisch

/usr /opt

/etc /boot

dynamisch

/var/mail /var/spool/news

/var/run /var/lock

beispielhafte Darstellungen:

Linux Community - Linux User Zeitschrift (Link - Linux User Ausgabe 11 / 2011)

Mounten

Das Einbinden von Datenspeichern/Datenträgern und anderen Komponenten (siehe virtuelle Systeme) in das System.

Befehle: (Geräte/Datenträger werden automatisch erkannt und per Klick gemountet)

mount (der eigentliche Hauptbefehl zum Einbinden von Laufwerken/Mounten)

umount (Mounten beenden)

Hinweis: heutzutage bei allen Wechselmedien (optische, USB) automatisches Mounten durch User (technisch: im Userspace → FUSE)

Aktuellen Mount-Status anzeigen:

mount ohne Parameter (oder natürlich alternativ:

cat /etc/mtab

cat /etc/mtab | grep ^/dev/ (nur die Einträge mit /dev am Anfang - also Geräte)

Anweisungen für das System zum Mounten beim Systemstart:

cat /etc/fstab

Darstellung der Techniken und Vorgehensweisen mit einem USB-StickTools:

fdisk , mkfs.ext4 , mount

Alle Analysen wieder mit Hilfe von

lsblk , blkid , fdisk -l , cfdisk

Prozesse

Starten von Programmen in der Konsole im Hintergrund (Background - bg):

kate mittwoch.txt &

bzw. natürlich auch:

kdesu kate /etc/hosts &

Konsole meldet Prozess-ID; Recherche im Verzeichnisbaum:

/proc/... (Ordner mit PIDs)

ps in Kombination mit grep zum Suchen bestimmter laufender Prozesse (z.B. sshd)

Befehle: fg , bg , jobs , ps

ps ax | grep firefox (bitte wieder an ps --help und man ps denken)

hier: grep für „Filtern“ von Daten (Wikipedia Link - global regular expressions print)

Tools:

ps, pstree, pstree -p, top, kill (Signale beachten)

Anm.: „Overkill SIGKILL“ mit -9, Standardsignal SIGTERM ist -15

Prozesseigenschaften:

PID, Status (running, sleeping, zombie)

Tipp: Grafische Übersicht mit Strg + Esc (oder Aufruf/Suche mit System…)