Der aktuelle Bootprozess unter Debian baut nach wie vor auf Runleven und damit verbundenen Init-Skripten auf (sysvinit). Dies bedeutet, dass die Scripte seriell in der vorgegebenen Reihenfolge ausgeführt werden. Ubuntu hat daher vor einiger Zeit mit Upstart angefangen den Bootprozess zu verändern. Die Idee dabei war, dass heut zu Tage beim booten meißt nur eine CPU belastet wird, bis das Betriebssystem hoch gefahren ist. Dies könnten man doch ändern, indem man die Abhängigkeiten gewissermaßen "auflöst" und somit die Verarbeitung der Startskripte auf alle Prozessoren verteilt.

    Bei OpenSUSE hat man aus diesem Grund auf das im Jahr 2010 entstandene systemd (Trick 17) umgestellt. Hier starter der init Prozess parallel die einzelnen Skript und stellt vor deren Aktivierung schon alle notwendigen Sockets, über die die Prozesse miteinander kommunizieren bereit. Die Daten, die anschließend über diese Sockets ausgetauscht werden, werden zwischengepuffert, bis der eigentliche Prozess hinter dem Socket zur Verarbeitung der Daten bereit ist.

    Beispiel: Ein Prozess, der einen Log-Eintrag schreiben möchte, musste immer warten bis der Log-Daemon bereit ist Daten zu empfangen. Somit konnte der Dienst auch erst danach starten. Systemd puffert diese Log-Meldungen zwischen, somit kann der eigentliche Prozess bereits starten, auch wenn der Log-Daemon noch nicht bereit ist. Sobald dieser jedoch bereit ist, werden die Meldungen weiter geleitet. Das ganze beschleunigt den Start eines Linux-Systems erheblich.

    Nun habe ich mir mal angeschaut, wie man Debian von sysvinit auf systemd umstellen kann. Dazu gibt es von Debian selber folgenden Atrikel:

    http://wiki.debian.org/systemd#systemd_-_system_and_service_manager

    Installiert werden kann systemd aktuell nur im Testing (Debian 7) Zweig.

    apt-get install systemd

    Anschließend muss in der /etc/default/grub die kernel Zeile um "init=/bin/systemd" erweitert werden.

    kernel /boot/vmlinuz root=/dev/hdb2 init=/bin/systemd

    Alternativ kann man das auch einmalig beim booten eintragen. Um den Unterschied zwischen sysvinit und systemd deutlich zu machen, habe ich beide Bootprozesse mit Bootchart einmal aufzeichnen lasssen.

    Nach der Installation von systemd, ist von nun an systemd für den Bootprozess verantwortlich. Um Temporär oder dauerhaft wieder sysvinit zum Booten zu verwenden, muss entweder im Bootload oder in der Grub Konfig sysvinit mittels init= angegeben werden:

    kernel /boot/vmlinuz root=/dev/hdb2 init=/sbin/init

    Wer systemd dauerhaft verwenden möchte, sollte vorher seinen log-daemon durch rsyslog ersetzten, da es der  einzige systemd taugliche Log-Daemon ist.

    Leave A Reply