Usrmerge bereinigt den Dateibaum um überflüssige, historisch bedingte Verzeichnisse.
Software befindet sich bekanntlich ständig im Fluss – Menschen neigen aber meist dazu, den Status quo beizubehalten. So lösen denn auch einschneidende Änderungen bei der Software, die wir täglich benutzen, des Öfteren großen Unmut aus. Ein gutes Beispiel dafür bietet die Einführung von Systemd: Die hitzige Diskussion, die Debians Entscheidungsprozess für oder gegen Systemd im Jahr 2014 auslöste, verließ schnell die technische Ebene und nahm stark ideologisch geprägte Züge an.
Nun steht bei Debian wieder eine einschneidende Änderung an, die aber bisher keine große öffentliche Diskussion verursachte, weil im täglichen Umgang mit der Software nur wenige Anwender etwas davon mitbekommen. Es geht um den Usrmerge [1], der den Filesystem Hierarchy Standard (FHS) [2] ändert.
Der FHS stellt seit 1993 die Richtlinie für die Verzeichnisstruktur von unixoiden Betriebssystemen dar. Er schreibt vor, dass die Partition des Wurzelverzeichnisses alle Dateien enthält, die das System zum Hochfahren und zum Einbinden weiterer Partitionen benötigt. Dazu sind 14 Verzeichnisse oder symbolische Verknüpfungen darauf notwendig.
Es handelt sich dabei um die Verzeichnisse /bin, /boot, /dev, /etc, /lib, /media, /mnt, /opt, /run, /sbin, /srv, /tmp, /usr und /var. Lediglich die Ordner /opt, /usr und /var dürfen sich in anderen Partitionen befinden.
Das Home-Verzeichnis sieht der FHS als optional an, ebenso wie /root, /lib32 und /lib64. Seit 2015 ist der FHS mit der Linux Standard Base (LSB) unter dem Dach der Linux Foundation vereint. Distributionen, die den Usrmerge umsetzen, sind damit nicht mehr LSB-konform.
Wurzelbehandlung
Mit der bevorstehenden Veröffentlichung von Debian 10 alias “Buster” nimmt Debian für neue Installationen Änderungen am Wurzelverzeichnis vor. Der sogenannte Usrmerge (engl. “merge”, vereinen) sieht vor, den Inhalt der Verzeichnisse /bin, /sbin, /lib und /lib64 in entsprechende Verzeichnisse unter /usr zu verschieben. Aus Kompatibilitätsgründen verbleiben lediglich symbolische Links dazu im Wurzelverzeichnis. Somit verschmelzen jeweils zwei Verzeichnisse für Binärdateien und Bibliotheken zu einem (Abbildung 1).
Debian führt diese Änderung relativ spät ein: Bereits 2012 machte Fedora 17 den Vorreiter [3], Solaris stellte mit Version 11 sogar schon zwei Jahre früher um. Bei Fedora nahmen sich die Systemd-Entwickler Harald Hoyer und Kay Sievers des Usrmerge an und setzten ihn um. Auch Arch Linux begann bereits 2012 mit den Vorbereitungen für die Vereinigung der Verzeichnisse, die das Projekt dann 2013 umsetzte – und zusätzlich /bin und /sbin zusammenführte. Das sieht Debian derzeit nicht vor.
Lennart Poettering unterstützte diese Änderung, da sie zustandslose Systeme [4] erleichtert. Mit dem Usrmerge ergibt sich die Möglichkeit, die unveränderlichen Teile des installierten Betriebssystems schreibgeschützt einzuhängen, es atomar zu aktualisieren oder gar auf mehrere Hosts oder Container zu verteilen.
Die historische Aufteilung vor dem Usrmerge wurde früher benötigt, um /usr als separate Partition oder über ein Netzwerk einhängen zu können. Das Verzeichnis /usr mountet das System aber schon früh im Bootprozess, lange vor der Initial Ramdisk (Initrd) [5]. Die Gründe für die heutige Aufteilung der FHS gehen bis zum Beginn der Unix-Entwicklung zurück.
Historisch bedingt
Die Wurzeln der historischen Aufteilung, bei der einige Verzeichnisse sowohl direkt unter der Wurzel als auch in /usr gedoppelt vorliegen, gehen bis in die 70er-Jahre des letzten Jahrhunderts zurück. Als 1969 Ken Thompson und Dennis Ritchie begannen, Unix zu entwickeln, war der Speicherplatz eng begrenzt.
Zu Beginn verwendeten sie Disketten und wechselten etwa 1971 auf einen Rechner des Typs PDP-11 von Digital Equipment Corporation [6], der bereits über eine Festplatte mit bis 512 KByte Kapazität verfügte und ein mit 2,5 MByte zwar größeres, aber wesentlich langsameres magnetisches Wechselmedienlaufwerk RK05-DECpack [7] unterstützte.
Als das Wurzelsystem von Unix über ein halbes MByte hinauswuchs, speicherten sie das größte Verzeichnis mit den Applikationen und Werkzeugen im RK05-DECpack, das bis dahin nur User-Daten enthielt. Der Überlieferung nach nannten sie diesen Einhängepunkt deshalb /usr. Andere Quellen behaupten, das Akronym stehe für “Unix System Resources”. Vermutlich stimmt beides, denn nach dem Bereitstellen einer dritten Festplatte wanderten die User-Daten dorthin, und somit war eine Umbenennung sinnvoll.
Da sich nun aus Platzgründen das Wurzelverzeichnis auf zwei Festplatten verteilte, erforderte ein erfolgreicher Boot-Prozess, auf der ersten Platte alles Nötige im Zugriff zu halten, um das System soweit zu starten, dass sich /usr einhängen ließ. Das führte dazu, dass sich Verzeichnisse wie /bin, /lib und /sbin sowohl direkt unter der Wurzel fanden als auch noch einmal unter /usr.
Dieser Zustand wurde dann ohne Not lange Jahre mitgeschleppt und in den FHS gegossen, obwohl längst Festplatten mit ausreichender Kapazität für das ganze Root-System existierten. Heute gibt es keinen sinnvollen Grund mehr, diese Verzeichnisse doppelt vorzuhalten. Mehr Informationen dazu liefert ein Essay von Rob Landley [8].
Vorletzter
Canonical liefert seit Ubuntu 19.04 ein vereinheitlichtes Usr-Verzeichnis aus, Debian zieht mit der Veröffentlichung von “Buster” nach. Dann bleibt von den großen Distributionen nur noch OpenSuse ohne Usrmerge.
2016 begann Debian die Umstellung mit der Verfügbarkeit des Pakets usrmerge im Unstable-Zweig [9]. Es enthält ein Perl-Skript, das ein bestehendes System in eines mit einem zusammengeführten /usr umwandelt. Zeitgleich nahmen die Entwickler eine Änderung am Paket debootstrap vor, sodass es die benötigten symbolischen Links selbst erstellt, bevor es Pakete in einer Chroot installiert.
Aufgrund von Fehlern, die das Projekt für Debian 9 nicht mehr korrigieren konnte, verschoben die Entwickler die Vereinheitlichung von / und /usr auf Debian 10. Im Laufe der weiteren Entwicklung traten aber auch hier Fehler zutage, weil nach der Vereinheitlichung erstellte Pakete auf nicht umgestellten Systemen nicht lauffähig sein würden.
Die meisten dieser Fehler gehören mittlerweile der Vergangenheit an, oder es stehen Patches bereit [10]. Debian-Entwickler Ian Jackson meint aber, die Umstellung könne weitere schwerwiegende Fehler nach sich ziehen, und rief das Debian Technical Committee (TC) an, um den Usrmerge erneut zu verschieben [11]. Im März lehnte das TC dieses Ansinnen jedoch ab, sodass Debian 10 mit vollzogenem Usrmerge erscheint [12].
Bei “Testing” Realität
Das TC geht in seiner Erläuterung der Entscheidung neben der Begründung auch auf die Vor- und Nachteile ein sowie auf die zukünftige Planung für Debian 11 “Bullseye”. Wer derzeit Debian “Testing” oder Siduction beziehungsweise nach der Veröffentlichung Debian 10 neu installiert, erhält ein System mit vereinheitlichtem Usr-Verzeichnis und symbolischen Links der Verzeichnisse /bin, /sbin, /lib auf /usr/bin, /usr/sbin, /usr/lib (Abbildung 2).

Abbildung 2: Das Wurzelverzeichnis vor dem Usrmerge (oben): Die Verzeichnisse /bin, /lib, /lib64 und /sbin liegen direkt in der Wurzel und nochmals im Verzeichnis /usr. Nach vollzogener Umstellung (unten) sind die Verzeichnisse /bin, /lib, /lib32, /lib64 und /sbin als symbolische Links auf die realen Verzeichnisse in /usr erkennbar.
Bestehende Systeme tastet das Setup nicht an, es sei denn, der Nutzer wünscht es. In diesem Fall genügt es, das Paket usrmerge zu installieren, das die entsprechenden Verzeichnisse verschiebt und die weiteren Anpassungen vornimmt. Bei der Installation fragt Debian explizit eine Bestätigung ab, da sich die Umstellung nicht zurücknehmen lässt.
Kontrollieren Sie nach der Umstellung, ob das Verzeichnis /etc/dpkg/dpkg.cfg.d/usrmerge existiert und ob es Paketnamen enthält. Ist das der Fall, bedeutet das, dass es mit diesen Paketen noch Konflikte gibt. Bleibt es leer oder existiert nicht, können Sie usrmerge wieder entfernen; ansonsten warten Sie damit, bis die Liste leer ist (Abbildung 3).

Abbildung 3: Auch das Wurzelverzeichnis in der Konsole spiegelt die neuen Verhältnisse wider und zeigt die symbolischen Links an.
Andere Distributionen stellten an einem Stichtag auf ein vereinheitlichtes Usr-Verzeichnis um. Debians Probleme mit der Umstellung resultieren größtenteils aus der Tatsache, dass die Entwickler entschieden, ältere Systeme unangetastet zu lassen, und dem Anwender die Wahl zu geben. Eine tiefgreifende Analyse, warum Debian bei dieser Umstellung mehr Probleme hat als andere Distributionen, finden Sie auf LWN.net [13].
Fazit und Ausblick
Das Umstellen auf Usrmerge beseitigt eine historisch bedingte Doppelung von Verzeichnissen und ebnet damit den Weg für moderne Techniken, wie unter anderem zustandslose Systeme und atomare Updates, was die Handhabung von Snapshots vereinfacht. Die meisten Desktop-Anwender bekommen davon aber kaum etwas mit. Die Symlinks auf die Unterverzeichnisse in /usr bleiben uns dagegen vermutlich noch einige Jahre erhalten. Für Debian 11 strebt das Projekt ein Szenario an, in dem sich Pakete für Debian auf Systemen mit und ohne Usrmerge bauen lassen, die auf dem jeweils anderen System uneingeschränkt funktionieren.
Infos
- Usrmerge: https://wiki.debian.org/Usrmerge
- FHS: https://de.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
- Usrmerge bei Fedora 17: https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrmerge/
- Zustandslose Systeme: https://de.wikipedia.org/wiki/Zustandslosigkeit
- Initrd: https://de.wikipedia.org/wiki/Initrd
- PDP-11: https://de.wikipedia.org/wiki/PDP-11
- RK05: https://en.wikipedia.org/wiki/RK05
- Rob Landley: http://landley.net/writing/hackermonthly-issue022-pg33.pdf
- Paket usrmerge: https://salsa.debian.org/md/usrmerge/raw/master/debian/README.Debian
- Usrmerge-Bugs: https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=usrmerge;users=md@linux.it
- Ian Jacksons Bugreport: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%23914897
- Entscheidung des TC: https://lists.debian.org/debian-devel-announce/2019/03/msg00001.html
- LWN.net: https://lwn.net/Articles/773342/






