101-systemarchitektur

From My Mnemonic Rhyme
Jump to navigation Jump to search

101.1 - Hardware Einstellungen ausfindig machen und anpassen

Allgemein

Der Kernel stellt die Schnittstelle zwischen Userspace und Hardware dar.

Linux ist modular aufgebaut. D.h. Komponenten können zur Laufzeit geladen werden. (keine/weniger Reboots erforderlich)

modular != monolithisch

Monolithische Kernel müssen bei Änderungen komplett ersetzt werden!

Es geht also darum die richtigen Module in den Kernel zu laden, um die Hardwarekomponenten korrekt anzusprechen.

Kernel Version

uname -r
2.6.35.8
/lib/modules/2.6.35.8# ls
build          modules.builtin      modules.inputmap   modules.pcimap    net
extra          modules.ccwmap       modules.isapnpmap  modules.seriomap
kernel         modules.dep          modules.ofmap      modules.symbols
modules.alias  modules.ieee1394map  modules.order      modules.usbmap
/usr/src# ls -ll
total 1
lrwxrwxrwx  1 root src   21 Mar 31 18:17 linux -> linux-source-2.6.35.8
drwxr-xr-x 25 root root 968 Nov 17 01:28 linux-source-2.6.35.8

Versionierung

2.6.35.8-tobis_finest

Erste Zahl: Major Release - nur "revolutionäre" Änderungen

Zweite Zahl: Minor Release - wesentliche Änderungen, nicht unterschätzen!

Wichtig: Gerade Zahlen = Stable 2.4, 2.6 Ungerade Zahlen = Dev 2.5, 2.7

Dritte Zahl: Patch-Level - Kleine Änderungen und Bugfixes

Vierte Zahl+Text:Kommentar - kann beim Compilieren des Kernels frei gewählt werden (im Makefile)

lsmod

Status der geladenen Module

Greift auf /proc/modules zu (nur besser lesbar)

lsmod
Module                  Size  Used by
freq_table              2007  2 cpufreq_stats,cpufreq_ondemand

modinfo

Details zu einem Modul anzeigen

Die einzelnen Module liegen unter

modinfo /lib/modules/2.6.35.8/kernel/drivers/
acpi/        crypto/      idle/        message/     platform/    telephony/
ata/         firewire/    ieee1394/    mfd/         power/       uio/
block/       firmware/    infiniband/  misc/        rtc/         usb/
bluetooth/   gpu/         input/       mmc/         scsi/        uwb/
char/        hid/         leds/        net/         serial/      video/
clocksource/ hwmon/       macintosh/   parport/     spi/         w1/
connector/   i2c/         md/          pci/         ssb/         watchdog/
cpufreq/     ide/         memstick/    pcmcia/      staging/

Zum Beispiel:

filename:       /lib/modules/2.6.35.8/kernel/drivers/cpufreq/freq_table.ko
license:        GPL
description:    CPUfreq frequency table helpers
author:         Dominik Brodowski <linux@brodo.de>
depends:
vermagic:       2.6.35.8 SMP mod_unload CORE2

Parameter

-V --version

-F --field Gibt nur ein spezielles Feld aus

z.B.

	modinfo /lib/modules/2.6.35.8/kernel/drivers/cpufreq/freq_table.ko -F filename
	/lib/modules/2.6.35.8/kernel/drivers/cpufreq/freq_table.ko
	...
	

-a Author des Moduls

Könnte auch per -F author abgefragt werden

-d Description

-l Lizenz

-p mögliche Parameter (falls vorhanden)

insmod

Module zur Laufzeit laden

Erwartet den kompletten Pfad + eventuelle Optionen! KEINE relative Angabe!

Abhängigkeiten werden geprüft, jedoch NICHT automatisch aufgelöst!

Im Erfolgsfall gibt insmod keine Bestätigung aus

Bei Fehlern meckert es ganz normal nach stdout

rmmod

Module aus dem Arbeitsspeicher entladen.

Keine absolute Pfadangabe möglich, da rmmod mit /proc/modules arbeitet.

Der Pfad DARF wie gesagt NICHT mitgegeben werden!

Wie bei insmod gibt es im Erfolgsfall keiner Rückmeldung.

Bei Fehlern verhält es sich ebenfalls gleich wie insmod.

modprobe

modprobe ist eine Kombination aus insmod und rmmod

Der Vorteil von modprobe ist, dass es Abhängigkeiten auflöst.

D.h. erkennt was fehlt, und dies dann mitläd.

Pfadangaben sind nicht notwendig.

modprobe greift auf uname -r zurück um den Pfad zum richtigen Kernel bzw. dessen Module zu finden.

Auch modprobe gibt im Erfolgsfall keine Meldung aus.

Es können mehrere Module mit Leerzeichen getrennt angegeben werden.

Parameter

-v verbose

-V Version

-a all

-t type

#Es wird versucht alle Module des Typs net zu laden.
modprobe -at net

-r Modul entfernen

# Vorsicht, mit folgendem Befehl!
modprobe -r ext3 reiserfs

-l Auflisten zeigt alle Module, in den Kernel geladen werden können

VORSICHT: lsmod != modprobe -l (lsmod listet alle GELADENEN Module auf!)

#Zeigt alle ladbaren Module an
modprobe -l

#Zeigt alle ladbaren Module des Typs Filesystem an
modprobe -lt fs

depmod

Zeigt Abhängigkeiten von Modulen an

Abhängigkeiten werden in der Datei modules.dep festgehalten.

/lib/modules/2.6.38.8-tobis-finest/modules.dep

Ohne Optionen erstellt depmod eine neue modules.dep / fragt alle Abhängigkeiten ab

Paramter

-n Trockenlauf, Ausgabe nach stdout

-A Schnelldurchgang, prüft ob es überhaupt Module gibt die neuer sind als die in modules.dep

Modulkonfigurationsdateien

modules.dep

/lib/modules/2.6.32.8-tobis-finest/kernel/.../Abhängiges-Modul:/.../Abhängigkeit

Abhängiges-Modul:Abhängigkeit

modules.conf modprobe.conf modprobe.conf.local

modules.conf Manpage

Steuern das Verhalten von modprobe.

Liegen unter /etc

Sind in neuern Distros nicht mehr zu finden.

So gibt es unter debian nun den Ordner modprobe.d

In /etc/modules (Debian) wird definiert welche Module beim Start geladen werden

Die Datei modprobe.conf.local wird nicht von GUIs beeinflusst und eigenet sich deshalb für manuelle Anpassungen.

Man kann z.B. IRQ und DMA festlegen

options 3c505	io=0x300 irq=10
# Gibt der 3Com LAN Karte den I/O 0x300 den Interrupt 10

Außerdem können aliases definiert werden

alias eth0 3c505
modprobe eth0

Unter Debian liegen die Aliases aktuell unter /etc/modprobe.d/aliases.conf !

Weitere Infos zu modprobe.d

Verzeichnisse und Dateien des Kernels

Quellen des Kernels

/usr/src/2.6.38.8-tobis-finest/

Zusätzlich zeigt der Softlink auf diesen Ordner

/usr/src/linux

Statischer Teil des Kernels

Der statischer Teil liegt unter /boot

Der Softlink /boot/vmlinuz zeigt auf den tatsächlichen Namen.

Je nach verwendetem Kernel / Distribution gewisse Abweichungen!

Module des Kernels

Die Module liegen unter /lib/modules

Es gibt für jeden installierten Kernel einen Unterordner, z.B.

/lib/modules/2.6.38.8-tobis-finest

Kernel vor Version 2.4: Hier lagen die Module direkt in diesem Verzeichnis

Kernel ab Version 2.4: Seit 2.4 liegen die Module im Unterverzeichnis kernel. Gefolgt von den Unterverzeichnissen der einzelnen Kategorien.

lenny:~# cd /lib/modules/2.6.26-2-686/kernel/
lenny:/lib/modules/2.6.26-2-686/kernel# ls
arch  crypto  drivers  fs  lib  net  sound

(Komischerweise gibt es den Ordner auf meinem Vserver nicht QQ)

Zu erwähnen ist nochmals, dass die bereits angesprochene Datei modules.dep auch hier zu finden ist.

Die Module selbst sind kompilierte Dateien mit den Endungen .o wie Object (Version 2.4), bzw. .ko für Kernel-Object (seit Version 2.6)

Gerätedateien für HDDs und CD-ROMs

Physikalische und logische Laufwerke werden als Gerätedatei unter /dev dargestellt.

Das sind KEINE gewöhnlichen Ordner / Dateien, sondern sog. Präsentationen des Kernels.

--> Die Geräte wurden ins Userland "exportiert".

Bei älteren Kernels war die präsentation statisch. D.h. es wurden Geräte abgebildet, die garnicht im System vorhanden waren.

IDE Geräte

Werden normal als /dev/hd* dargestellt.

Der dritte Buchstabe gibt Info zur Position des Geräts am Controller aus. (Es kann jedoch nicht zwischen Gerätetypen unterschieden werden!)

Die meißten Controller haben 2 Kanäle: Primary und Secondary IDE

Jeweils können 2 Geräte angeschlossen werden. (Master+Slave)

/dev/hda #Primary Master
/dev/hdb #Primary Slave
/dev/hdc #Secondary Master
/dev/hdd #Secondary Salve

Raid-Controller verwalten mehr Geräte, sind jedoch nicht prüfungsrelevant!

lenny:/dev# ls -ll | grep hd
lrwxrwxrwx 1 root root           3  3. Apr 01:26 cdrom -> hdc
lrwxrwxrwx 1 root root           3  3. Apr 01:26 dvd -> hdc
brw-rw---- 1 root disk      3,   0  3. Apr 01:26 hda
brw-rw---- 1 root disk      3,   1  3. Apr 01:26 hda1
brw-rw---- 1 root disk      3,   2  3. Apr 01:26 hda2
brw-rw---- 1 root disk      3,   5  3. Apr 01:26 hda5
brw-rw---- 1 root cdrom    22,   0  3. Apr 01:26 hdc
lrwxrwxrwx 1 root root           4  3. Apr 01:26 root -> hda1

SCSI Geräte

Werden normal als /dev/sd* dargestellt.

Der Rest ist analog zur IDE Sektion.

Gerätedateien für Partitionen

Aufgrund der Beschaffenheit des MBR (Master Boot Record) können auf einer Festplatte nur maximal vier primäre Partitionen erstellt werden.

Es gibt primäre und erweiterte Partitionen.

Primäre Partitionen sind direkt ansprechbar.

Erweiterte Partitionen

Es KANN nur eine erweiterte Partition pro Festplatte geben!

Erweiterte Partitionen dienen als Container für logische Partitionen.

SCSI und SATA: Erweiterte Partitionen auf SCSI / SATA Devices können bis zu zwölf logische Partitionen beinhalten.

IDE: In der erweiterten Partition können bis zu 60 logische Partitionen erstellt werden. Das ergibt die Summe von 63 Partitionen.

Ordnung der Partitionen

Primäre und erweiterte Partitionen werden von 1-4 nummeriert.

Die erste logische Partition erhält IMMER die Ordnungszahl 5!

lenny:/dev# cat /proc/partitions
major minor  #blocks  name

   3     0    2097152 hda  #Die Platte als solches
   3     1    1943833 hda1 #Erste primäre Partition
   3     2          1 hda2 #EINZIGE erweiterte Partition
   3     5     152586 hda5 #Erste logische Partition  

Es sind also 2 Partitonen nurzbar... hda1 und hda5

Ob IDE oder SCSI macht bei der Partitioniertung keinen Unterschied!

WICHTIG: Es hat NICHTS miteinander zu tun, dass es max. vier IDE Geräte gibt.

Ressourcen für Hardware Komponenten

Die aktuelle Konfiguration von Hardwarekomponenten liegt unter /proc

Der Inhalt bildet die Parameter des Kernels ab.

Beschreibung von PC-erfahrung.de

Interrupts

/proc/interrupts - Zeigt die belegten IRQ-Interupts an

#Informationen üer die verwendeten Interrupts
lenny:~# cat /proc/interrupts
           CPU0
  0:     616666    XT-PIC-XT        timer
  1:        326    XT-PIC-XT        i8042
  2:          0    XT-PIC-XT        cascade
  5:       3352    XT-PIC-XT        Intel 82801AA-ICH, eth2
  9:    1836103    XT-PIC-XT        acpi, eth1
 10:    1859703    XT-PIC-XT        ehci_hcd:usb2, eth0
 12:      22456    XT-PIC-XT        i8042
 14:      58162    XT-PIC-XT        ide0
NMI:          0   Non-maskable interrupts
LOC:          0   Local timer interrupts
RES:          0   Rescheduling interrupts
CAL:          0   function call interrupts
TLB:          0   TLB shootdowns
TRM:          0   Thermal event interrupts
SPU:          0   Spurious interrupts
ERR:          0
MIS:          0

I/O Ports

/proc/ioports - Zeigt den Speicherbereich ("base address") bzw. die I/O-Ports an, die vom System genutzt wird

#Inforatmionen über die verwendeten I/O Adressen
lenny:~# cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard

DMA

/proc/dma - Zeigt Einstellungen bzgl. DMA an

lenny:~# cat /proc/dma
 2: floppy
 4: cascade

DMA - Direct Memory Access Steht für direkten Speicherzugriff auf die Festplatte, der über einen separaten Bus erfolgt. Dies beschleunigt den Datentransfer der Festplatte und sorgt dafür, dass der Hauptprozessor entlastet wird. DMA wird mittels hdparm aktiviert bzw. deaktiviert.

/proc/pci

/proc/bus/pci

bzw. /proc/pci (alte Kernel) - Verzeichnishirachie für Informationen zu den PCI Komponenten.

SCSI Geräte

bl01:/home/homaar# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: VMware,  Model: VMware Virtual S Rev: 1.0
  Type:   Direct-Access                    ANSI  SCSI revision: 02

/proc/sda
  • Immer in der Reihenfolge wie am Bus gefunden - egal an welchem Port gesteckt!
  • Zum Testen kann ein USB Stick verwendet werden!

Der PCI-Bus

  • Peripheral Component Interconnector
  • Auch onboard Komponenten können PCI sein!
  • ohci = compaq, uhci = intel
bl01:/home/homaar# lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
  • 3 Stufen von verbose
lspci -vvv
  • lspci arbeitet mit dem Verzeichnis /proc/bus/pci zusammen
bl01:/home/homaar# lspci -t #tree Darstellung
-[0000:00]-+-00.0
           +-01.0-[01]--
           +-07.0

USB - Universal Serial Bus


  • USB wird erst ab Kernel 2.2.18 unterstützt
  • USB 2.0 wird erst ab Kernel 2.4 unterstützt
  • USB 1.1 12 MB/s
  • Es gibt 2 Varianten von USB 1.1
    • OHCI (Open Host Controller Interface)
      • usb-ohci.o
    • UHCI (Universal Host Controller Interface)
      • usb-uhci.o
  • Unter Linux muss der passende Treiber zum jeweiligen Typ geladen werden


  • USB 2.0 überträgt bis zu 480MB/s
    • Alle beteiligten Geräge müssen dafür USB 2.0 können
    • Der Standard lautet EHCI (Enhanced Host Controller Interface)
USB - Klassen
  • Nach dem Treiber für den Controller muss der Treiber für die Geräteklasse geladen werden
    • Maus / Tastatur - hid.o (Human Interface Devices)
    • usb-storage.o (WICHTIG FÜR DIE PRÜFUNG!)


  • Geladene Module des Systems anzeigen
lsmod | grep usb
  • Informationen über USB-Geräte
root@bt:/home/homaar# lspci
00:12.0 USB Controller: ATI Technologies Inc SB700/SB800 USB OHCI0 Controller
00:12.2 USB Controller: ATI Technologies Inc SB700/SB800 USB EHCI Controller
root@bt:/home/homaar# lsusb
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

#Tree Form
root@bt:/home/homaar# lsusb -t
Bus#  1
`-Dev#   1 Vendor 0x1d6b Product 0x0002
Bus#  2
`-Dev#   1 Vendor 0x1d6b Product 0x0002
  `-Dev#   3 Vendor 0x058f Product 0x6387
  • Wichtig bei der Suche nach Treibern und Informationen ist die Vendor- und Produktnummer
#Zeit genaue Informationen zu einem speziellen Gerät anhand der Vendor- und Produktnummer an
root@bt:/home/homaar# lsusb -d 0x1d6b:00001 -v

Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            9 Hub
  bDeviceSubClass         0 Unused
  bDeviceProtocol         0 Full speed (or root) hub
  bMaxPacketSize0        64
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0001 1.1 root hub
  bcdDevice            2.06
  iManufacturer           3 Linux 2.6.35.8 ohci_hcd
  iProduct                2 OHCI Host Controller
  ...
USB Module automatisch Laden
  • Zwei Verschiedene Mechanismen
    • usbmgr
      • kann ausschließlich USB-geräte verwalten
      • /etc/usbmgr/usbmgr.conf #IDs und korrospondierende Treibermodule
      • Die Datei usbmgr.conf muss in zyklischen Abständen aktualisiert werden
      • /etc/usbmgr/preload.conf #Liste mit Treibern zum Laden beim Systemstart
      • /etc/usbmgr/host #Namen des Treibers für den Host (usb-ohci,usb-uhci oder usb-ehci)
    • hotplug
      • Verwaltet USB PCMCIA und FireWire
      • Ist usbmgr zu bevorzugen
      • /etc/hotplug
      • USB-Geräte nicht einfach ziehen! sync -> umount !!!
  • Hint zum laden von USB Modulen mit alten Kernels siehe "Das USBDevFS-Dateisystem" im Linux-Praxis Link

Cold Plug & Hotplug

  • Coldplug: PS2, SATA,
  • Hotplug: PCMCIA, FireWire, USB
  • /etc/hotplug (nochmal nachfragen)
Meine unbeantworten Posts in #Debian
can anyone tell me a link / hint about auto load of usb devices in newer releases? i only find old usbmgr / hotplug stuff
can anyone tell me why i can't find /etc/hotplug/* - is usbmgr / hotplug replaced by another program?
i talk about usb hotplug and how it works

SysFS - Das virtuelle Dateisystem

  • Informationen über Treibermodule
  • /sys
  • ähnlich wie /proc
  • wird dynamisch generiert
root@bt:/sys# ls -l
total 0
drwxr-xr-x  28 root root 0 2011-04-27 01:33 block
drwxr-xr-x  20 root root 0 2011-04-27 01:33 bus
drwxr-xr-x  59 root root 0 2011-04-27 01:33 class
drwxr-xr-x   4 root root 0 2011-04-27 00:42 dev
drwxr-xr-x  11 root root 0 2011-04-27 01:33 devices
drwxr-xr-x   4 root root 0 2011-04-27 01:33 firmware
drwxr-xr-x   4 root root 0 2011-04-27 01:33 fs
drwxr-xr-x   7 root root 0 2011-04-27 01:33 kernel
drwxr-xr-x 136 root root 0 2011-04-26 23:33 module
drwxr-xr-x   2 root root 0 2011-04-27 01:33 power

udev, hald und dbus

  • hald - Hardware abstraction layer deamon
  • Information an dbus wenn Wechsellaufwerke angeschlossen werden

101.2 - Das System starten

Allgemeines

  • bootstrap -> Stiefelriehmen / Stiefelgurt
  • Boot-Strap Problem, Henne-Ei Problem
  • Bootvorgang eine Systems BIOS POST -> Bootloader
  • Bis zu 4 echte Partitionen
  • alles andere sind logische Laufwerke -> erweiterte Partition oder Bit-Slices
  • 3 priäre und eine erweiterte Partition
  • Der MBR gehört selbst keiner Partition an
    • Er ist genau 512 Byte groß
    • Befindet sich am Anfang der Festplatte Sektor 0, Spur 0
    • endet mit aa55 (55aa wird als aa55 dargestellt)
    • Big-Endian / Little-Endian
    • Das Big-Endian-Format ist ein Datenformat für die Übertragung oder Speicherung binärer Daten, in denen das höherwertige Byte oder Bit (Most Significant Byte, MSB) an erster Stelle kommt. Ein Big-Endian-System speichert höherwertige Bytes auf den niedrigsten Adressen. Mainframe-Prozessoren, einige RISC-Architekturen und Minicomputer verwenden das Big-Endian-System. In TCP/IP-Netzwerken erfolgt die Byte-Anordnung ebenfalls in Big Endian. Gegensatz: Little Endian.
  • !!! Startsektor != MBR !!!

Bootstrap-Loader

  • Es ist möglich Optionen beim Systemstart zu übergeben oder in den jeweiligen Konfigurationsdateien
  • Es gibt die Möglichkeit Hardware einen anderen IRQ-, DMA-Kanal oder eine andere Adresse zu übergeben


  • beim Systemstart in die bash starten (um ohne Passwort zu starten)
    • kann in der jeweiligen Config-Datei verboten werden
init=/bin/bash
mount -o remount,rw /
passwd root

lilo

  • /etc/lilo.conf
  • Wird die Datei lilo.conf editiert, so muss lilo ausgeführt werden um die Änderungen zu übernehmen
  • Parameter die bei jedem Systemstart benötigt werden via append in lilo.conf (mehrere Parameter möglich)
append="ida=nodma apm=off"

grub

  • /boot/grub/grub.conf
  • Parameter die bei jedem Systemstart benötigt werden in grub.conf
kernel /bzImage-2.6.11 root=/dev/hda2 ide=nodma apm=off

Kernel-Parameter

  • Über /etc/modules.conf werden Parameter an Module des Kernels übergeben
  • Mögliche Parameter wären:
ide=nodma
apm=off (siehe Link unten)
acpi=off

Wiki Advanced Power Management

  • einem veralteten CD-ROM Laufwerk I/O-Adresse 340 übergeben
options sonycd535        sonycd535=0x340
  • Auf diese Weise können jedoch keine Optionen an Kernel übergeben werden die NICHT modular kompiliert sind!

Startprotokollierung

  • dmesg liest den sog. Kernel-Ring-Buffer aus
  • Kurz nach dem Systemstart lassen sich dort Informationen auslesen
  • Da FW im Kernel integriert, wird dieser Buffer nach dem Systemstart überschrieben
dmesg > startup.log
dmesg | less


  • /var/log/messages -> wenn der Start länger zurück liegt
grep kernel /var/log/messages | less

101.3 - Runlevels / System anhalten / Neu starten

Allgemeines

  • Es ist nicht nur möglich das OS herauf oder herunterzufahren, es gibt weitere Abstufungen
  • init ist der "Vater aller Prozesse" PID 1

Die Runlevel und ihre Funktionen

Runlevel 0

  • schaltet den PC aus
  • In allen Distros gleich

Runlevel 1

  • Singeluser-Mode
  • kein Netzwerk
  • keine Multiuser Unterstützung
  • Nur zur Wartung/administrativen Zwecken
  • In allen Distros gleich

Runlevel 2

  • keine Unterstützung für grafische Anmeldung
  • Multiuser Funktionalität
  • Bei manchen Distros wird in diesem Runlevel das Netzwerk gestartet

Runlevel 3

  • spätestens jetzt wird das Netzwerk gestartet
  • nicht bei allen Distos gleich: grafische Anmeldung steht nicht immer zur Verfügung

Runlevel 4

  • wird von keiner bekannten Distribution genutzt

Runlevel 5

  • Das höchste funktionale Runlevel
  • Netzwerk, Multiuser-Unterstützung und grafische Anmeldung möglich

Runlevel 6

  • reboot
  • distributionsübergreifend festgelegt

inittab

  • /etc/inittab
  • telinit q liest die inittab neu ein!!
# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
  • Hauptkonfigurationsdatei für den init Prozess
# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
  • init als solches liegt unter /sbin
  • Hier wird definiert in welchen Runlevel der Rechner standardmäßig bootet (0 und 6 sind tödlich!)
# The default runlevel.
id:2:initdefault:
  • Was passiert wenn CTRL+ALT+DEL gedrückt wird
# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
#-t1 = 1 Sec.
#-r neustarten
#-a use /etc/shutdown.allow (jeweils der Loginname pro Zeile)
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
  • TTY ist eine sehr alte Abkürzung und steht für Teletyper
  • Die erste Stelle steht für die Consolen Nummer
  • Die zweite Stelle steht für die Runlevel in der die Console gestartet wird
  • respawn steht dafür, dass die Console automatisch neu gestartet wird, wenn sie mit kill beendet wurde


  • Was tun wenn der Midnight Commander ein Terminal blockiert?
  • Passiert z.B. wenn plötzlich ein NFS Laufwerk nicht mehr zur Verfügung steht
  • -> per pstree den mingetty Prozess (/sbin/mingetty) suchen und killen. Dann findet der Respawn statt

Verzeichnisse und Dateien des init-Prozesses

  • weitere Verzeichnisse / Dateien die der init Prozess ausliest
  • Basisverzeichnis der einzelnen init Scripte: /etc/init.d bzw. /etc/rc.d
  • Distributionsunterschiede: RedHat - monolythisches init Script, Debian - kleine Einzelscripte
  • Init-Scripts können natürlich von Hand ausgeführt werden
  • reload = SIGHUB
  • $1 ist immer der Übergabeparameter (nach dem man auch suchen kann)
bl01:/~# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .
bl01:/~# /etc/rc2.d/S19apache2 status
Apache2 is running (pid 13297).

bl01:/~# head /etc/init.d/apache2
#!/bin/sh
### BEGIN INIT INFO
# Provides:          apache2
# Required-Start:    $local_fs $remote_fs $network $syslog $named
# Required-Stop:     $local_fs $remote_fs $network $syslog $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop apache2 web server
### END INIT INFO
  • Required-Start/Stop gibt an was gestartet sein muss
  • Default-Start gibt die Runlevel an in denen apache2 laufen soll
  • Default-Stop gibt an in welchen Runleveln apache2 gestoppt werden soll


  • Die Scipts in den jeweiligen /etc/init.d/rcX.d Verzeichnissen fangen mit S = Start und K = Kill an. Gefolgt von der numerischen Reihenfolge
  • Diese werden beim eintreten / verlassen des Runlevels abgearbeitet
bl01:/~# ls /etc/rc0.d/ | grep apache
K01apache2
bl01:/~# ls /etc/rc2.d/ | grep apache
S19apache2

Runlevel wechseln, Herunterfahren, neu starten

  • Befehl runlevel:
bl01:/~# runlevel
N 2
  • sync vermeidet Datenverlust!
  • init oder telinit zum Wechseln des Runlevels
  • meißtens ist telinit kein eigenständiges Programm mehr, sondern ein Softlink auf init
  • init 1 -> wechselt in den Singelusermode
  • init 0 -> fährt das System herunter
  • init 6 -> Startet das System neu
  • Weitere Methoden zum herunterfahren / neu starten sind
    • shutdown
    • halt
    • reboot
    • poweroff
  • Allerdings sollte nur shutdown verwendet werden, da es sich bei den anderen um Hilfsprogramme von init handelt
    • -r reboot
    • -h halt
    • -t time in Sec.
    • -k Konsolenmeldung
    • -f kein fsck
    • -F fsck erzwingen
  • Folgender Befehl startet den PC ohne fsck neu:
shutdown -f -r now