Abstract in English (Version: 0.2)

submount does not work any longer since Kernel 2.6.17 - please use automount4

If Linux administrators configure disk partitions for deferred mounting on demand a typical choice is autofs (the automounter). The drawbacks of autofs are: extra config files, some system overhead and automatic expiration of mounts. The automounter works fine with network shares but for local disks this text proposes the use of subfs (the submount kernel module). The advantages are: all config via /etc/fstab , little system overhead, no automatic expiration (unless you use cron).

Here the use of two shell-scripts is proposed (one working as an init.d service, the other one as a cron.hourly job). The submountd program that comes with subfs is not used here - that program tries to unmount subsf partions once per second and starts one process per mount! The usingSubmount solution is intended for long-lived mounts (disks-only, use autofs for network). It can cooperate with a new version of noflushd (see ngflushd) that allows to spin-down unused disks (reiserfs and ext3 supported).

Although the remainder of the documentation is in german, the shell scripts contain comments about their usage and the fstab configuration in english. To download please shift-click (depends on browser) the following link: usingSubmount (tgz-archive).

What's new ...

The 1st version of this text had thousends of downloads. This indicates that people really want to use subfs and that they are looking for information ... voila, here they get some. Version 0.2 contains a couple of bug fixes and this time the software comes as an archive. The usingSubmount tgz file contains some READMEs and a little installation routine. This documentation is also included. The software now supports SuSE 9.x and Debian Sarge.

Zusammenfassung in Deutsch (Version: 0.2)

submount funktioniert seit Kernel 2.6.17 nicht mehr - bitte automount4 verwenden

Wenn Linux Administratoren Plattenpartitionen für verzögertes Einhängen bei Bedarf einrichten, fällt die Wahl typischerweise auf autofs (den Automounter). Die Nachteile von autofs sind: zusätzliche Konfigurationsdateien, eine zusätzliche Systembelastung sowie das automatische Aushängen von Partitionen. Der Automounter funktioniert gut für Netzwerkfreigaben, aber für lokale Partitionen wird im folgenden Text vorgeschlagen subfs (das Submount Kernel Modul) einzusetzen. Dessen Vorteile sind: die gesamte Konfiguration erfolgt via /etc/fstab , geringe zusätzliche Systembelastung, kein automatisches Aushängen (wenn das nicht über Cron erfolgt).

Hier wird der Einsatz von zwei Shell-Skripts vorgeschlagen (eines als init.d Service, dass Andere als als cron.hourly Job). Das submountd Programm, das zusammen mit subfs installiert wird, findet hier keine Anwendung - denn das Programm versucht subfs Partitionen ein Mal pro Sekunde auszuhängen und startet pro Partition einen Prozess! Die usingSubmount Lösung wurde für langlebige Mounts entwickelt (nur Festplatten - für Netzwerk bitte autofs nutzen). Sie arbeitet bei Bedarf mit einer neuen Version von noflushd zusammen (siehe ngflushd), die den Spindelantrieb von unbenutzten Festplatten abschalten kann (ReiserFs und Ext3 werden unterstützt).

Was ist Neu ...

Die erste Fassung dieses Textes wurde mehrere tausend Mal geladen. Das deutet darauf hin, dass die Leute wirklich subfs einsetzen wollen und nach Informationen suchen ... voila, hier sind welche. Version 0.2 enthält eine Reihe von Fehlerkorrekturen and kommt dieses Mal als Archiv. Die usingSubmount tgz Datei beinhaltet einige READMEs and eine kleine Installationsroutine. Dieser Text ist auch enthalten. Nunmehr unterstützt die Software SuSE 9.x sowie Debian Sarge.


 

Hintergrund

Vielfach hat ein Rechner Plattenpartitionen die eher selten benutzt werden: Windows oder VFAT auf dem Arbeitsplatz, oder Archive auf dem Server. Eine Partition eingehängt zu lassen bedingt immer ein gewisses Risiko von Datenschäden falls der Rechner abstürzt oder behindert den Spin-Down von Festplatten (Energieverbrauch und Lärm!). Zudem kostet das Einhängen bei einem transaktionierenden Filesystem (z.B. ReiserFS) deutlich Zeit - dies ist auch das Problem mit autofs und dessen automatischen Aushängen. Für den Server mit vielen Platten, die z.B Bilder, Musik oder Filme enthalten sowie für Dual-Boot (Windows/Linux) Arbeitsplätze wird hier eine schlanke Lösung auf Basis von subfs vorgeschlagen. Netzwerk Verzeichnisse bleiben zunächst noch dem Automounter überlassen.

Mit dem 2.6er Kernel wurde subfs eingeführt

Durch Änderungen in der Kernel Infrastruktur konnte ein kleines Kernel Filesystem-Modul entwickelt werden, das als Hülle um ein anderes Filesystem arbeitet. Einzige Funktion dieser Hülle: wenn auf das innere Filesystem zugegriffen werden soll und dieses noch nicht eingehängt ist, wird von subfs ein Programm (im User Mode) gestartet um das Mount Kommando zum Einhängen auszuführen. Damit das funktioniert wird anstelle des inneren Filesystems subfs in /etc/inittab eingetragen. Das Mounten von subfs geht sehr schnell und braucht kaum Ressourcen. Subfs wacht nun über das innere Filesystem und ruft wannimmer nötig Mount auf.

Das mit subfs gelieferte Originalprogramm submountd ist sehr speziell. Es versucht beispielsweise ein Mal pro Sekunde das innere Filesystem wieder auszuhängen. Zudem startet es pro Mount einen zusätzlichen Prozess, der das Aushängen besorgt. Das ist viel zu viel des Guten und funktioniert u.A. nicht gut mit KDE, denn unter KDE versucht der Dateimanager Konqueror alle paar Sekunden festzustellen ob sich die Daten eines Verzeichnisse änderten. Unter KDE führt das mit dem Originalprogramm zu jeder Menge Mount und Unmount zusammen mit jeder Menge Einträgen im Logfile. Richtig verrückt wird es mit CD oder DVD Laufwerken - die machen dann ständig Lärm, weil nach dem Mount jeweils der Antrieb hochläuft. Daher verzichtet die hier vorgestellt Lösung auf automatisches Aushängen. Wer diese Funktion nachrüsten möchte kann dies z.B. über /etc/crontab oder /etc/cron.hourly einbauen (siehe unten).

Einschränkungen: zu Entscheiden ob subfs mit CDs oder DVDs wirklich vernünftig ist bleibt dem Anwender überlassen (ggf. bei SuSE 9.x unter /etc/sysconfig/hotplug subfs deaktivieren, siehe unten). Die hier vorgestellte Lösung sollte jedenfalls nicht für Netzwerk Mounts eingesetzt werden.

Einrichten

Hierfür sind zwei bis vier Schritte nötig, die Sache ist in 10 Minuten erledigt (das usingSubmount Archiv enthält ein kleines Script dazu):

Weil das hier vorgestellte submount ein Shell Skript ist, braucht nichts kompiliert zu werden. Das Skript ist lediglich nach /etc/init.d zu kopieren. Hier der Link zum Herunterladen mit Shift-Click (je nach Browser): usingSubmount (tgz-archive)

Editieren von /etc/fstab

Zunächst ist es wichtig das für die Einträge, die submount betreuen soll, folgende Angaben erfolgen: subfs , noauto , fs=xxx und program=/etc/init.d/submount . Mit noauto wird verhindert das bei jedem Systemstart zu einem frühen Zeitpunkt subfs Mounts erfolgen. Besser ist es die subfs kontrolliert über einen Service einzuhängen. Hier ein Beispiel (aber bitte jeweils ohne Zeilenumbruch hinter dem Komma!):

# Systemsachen...
proc            /proc          proc     defaults              0 0
usbfs           /proc/bus/usb  usbfs    noauto                0 0

# Root Partition ...
/dev/hda3       /              reiserfs defaults              1 1

# Einhängen mit submount ...
/dev/hda1       /mnt/windows   subfs    noauto,fs=ntfs,
    program=/etc/init.d/submount,ro,gid=wheel,umask=007,nls=utf8
/dev/hda2       /mnt/work      subfs    noauto,fs=vfat,
    program=/etc/init.d/submount,exec,gid=trusted,umask=007,iocharset=utf8

# Achtung bei DVD: den richtigen Gerätenamen angeben - kein Link!
/dev/hdb        /media/dvd     subfs    noauto,fs=auto,
    program=/etc/init.d/submount,ro,procuid,nosuid,nodev,exec,iocharset=utf8

Wer, wie oben gezeigt, seine CD oder DVB mit submount einhängen will muss zwei Stolperfallen umgehen: (1) als Device unbedingt den richtigen Pfad, also nicht ein Link wie /dev/dvd angeben (2) In SuSEs hotplug Konfiguration sollte zudem subfs mount deaktiviert werden, siehe unten.

Eventuell /etc/sysconfig/hotplug editieren (nur SuSE 9.x)

Insbesondere KDE-Benutzer oder Anwender die, wie in obigem Beispiel gezeigt, submount für CD oder DVD einsetzen wollen, sollten in SuSEs /etc/sysconfig/hotplug Konfiguration HOTPLUG_USE_SUBFS=no setzen

## Type:           yesno
## Default:        no
#
# enable subfs mounts of hotpluged devices
#
HOTPLUG_USE_SUBFS=no

Achtung: bitte zuvor ggf. per Online-Update Hotplug von SuSE 9.1 aktualisieren. Die minimale Version ist: hotplug-0.44-32.18 .

Das oben gezeigte Vorgehen schaltet Interferenzen mit SuSEs automatischem Einhängen von CDs und DVDs mit Sicherheit aus, leider deaktiviert man dadurch aber auch so schöne Sachen wie das automatische Einhängen von USB- oder Firewire-Speichern und z.B. Kameras (so es denn überhaupt funktioniert). An sich sucht das SuSE hotplug Skript in /etc/fstab nach einem Eintrag für die CD/DVD (der übrigens auch auskommentiert sein darf!), und deaktiviert dann hotplug für das jeweilige Gerät. Gegebenenfalls muss sich der hotplug Freund hier auf etwas Experimentieren einlassen (oder SuSEs Skript debuggen).

Mit insserv oder update-rc.d submount als Service einrichten

Weil im obigen Beispiel noauto angewandt wurde, ist submount zunächst nicht aktiv. Von Hand erfolgt die Aktivierung über:

# submount von Hand starten...

/etc/init.d/submount start

Nun kann man zunächst testen ob das Einhängen auch funktioniert. Das submount Skript macht einige Klimmzüge um per subfs eingehängte Partitionen wie normale Mounts aussehen zu lassen (im Gegensatz zum Originalprogramm). KDE oder mount kommen mit dem Result gut zurecht. Details entnehme man bitte den Kommentaren im Skript.

Als nächstes ist zu zeigen wie alle von submount eingehängten Partitionen wieder ausgehängt werden können (sofern diese nicht in Benutzung sind):

# submount Partitionen aushängen ...

/etc/init.d/submount expire

Schliesslich wird submount von Hand wieder ausgeschaltet:

# submount von Hand abschalten...

/etc/init.d/submount stop

Die oben dargestellten Vorgänge können automatisiert werden (zum automatischen Aushängen siehe zudem weiter unten). Das Mittel dazu ist es einen Service einzurichten. Das submount Skript ist dafür bereits vorbereitet:

# submount beim Systemstart als Service starten ...

insserv submount                  # SuSE
update-rc.d submount defaults 40  # Debian

Ein Beispiel zum automatischen Aushängen über Cron

Wer mag kann dazu Cron benutzen. Dazu wird in /etc/cron.hourly ein Skript namens submount_expire abgelegt:

cd /etc/cron.hourly
echo "#!/bin/sh"                    > submount_expire
echo "/etc/init.d/submount expire" >> submount_expire
echo "/etc/init.d/submount start"  >> submount_expire

Die erste Zeile des Skripts versucht alle nicht benutzten subfs Mounts auszuhängen und die zweite Zeile sorgt dafür dass ggf. alle subfs Mounts in /etc/fstab auch aktiv sind.

Zwei Schlussbemerkungen

Verwenden Sie grundsätzlich ein transaktionierendes Filesystem; bei SuSE fällt die Wahl auf ReiserFS. Viele Linuxer hassen ReiserFS nur deshalb weil der Erfinder dem Kind seinen eigenen Namen gegeben hat und für kommerzielle Erweiterungen Geld akzeptiert. Klassische Filesysteme wie ext2 oder VFat sind unbedingt zu vermeiden, es droht Datenverlust beim kleinsten Systemfehler.

Überhaupt ist das mit Systemfehlern so eine Sache. Das subfs ist ganz neu, und auch das hier vorgestellte Skript könnte zur Datenvernichtung beitragen. Denken Sie also daran: Sie arbeiten auf eigenes Risiko!