Linux-Praxisbuch/ Zugriff auf Laufwerke

Das vorliegende Kapitel behandelt den Zugriff auf Laufwerke mit wechselbaren Medien. Dabei wird es sich im Regelfall um Laufwerke für CD-ROMs, DVDs oder Disketten handeln, aber das hier Gesagte trifft auch für seltenere Laufwerks-Typen wie beispielsweise ZIP-Laufwerke oder Bandlaufwerke zu. Die Behandlung von Festplatten schließen wir in diesem Kapitel aus. Obwohl die grundlegende Behandlung nahezu identisch ist, sind für den Umgang mit Festplatten-Partitionen weitere Kenntnisse erforderlich, die den Rahmen dieses Kapitels sprengen würden.



Grundsätzliches

Die Verzeichnis- und Dateistruktur von Linux stellt einen Baum dar, der mit dem Wurzelverzeichnis / beginnt. Der Baum selbst ist nicht mit dem verwendeten Dateisystem zu verwechseln. Tatsächlich kann der Baum gleichzeitig zahlreiche verschiedene Dateisysteme enthalten. Darüber hinaus gibt es Spezialdateien, die keine Daten im herkömmlichen Sinne enthalten und die auch nicht als Teil eines Dateisystems betrachtet werden können. Hierzu gehören auch die Gerätedateien.

Jedes Gerät, das unter Linux verwendet werden soll, wird durch eine solche Gerätedatei innerhalb des Verzeichnis- und Dateibaumes repräsentiert werden. Um sich eine ungefähre Vorstellung vom Sinn dieser Dateien zu machen, kann man sie sich als die Adresse innerhalb des Verzeichnisbaumes vorstellen, von welcher der Kernel liest oder auf die er schreibt, wenn er auf das Gerät zugreift.

In diesem Kapitel interessiert uns jedoch ein besonderer Typ von Geräten, den wir in der Überschrift als Laufwerke bezeichnet haben. Alle Laufwerke haben zweierlei gemeinsam: Zum einen enthalten sie fixierte oder wechselbare Datenträger. Diese Datenträger enthalten die Daten, die gewissermaßen den eigentlichen Sinn des Laufwerks ausmachen. Zweitens müssen die Datenträger dieser Laufwerke mit einem bestimmten Dateisystem formatiert sein. Hier kommt also der Begriff des Dateisystems ins Spiel.

Wie hängt das Dateisystem eines Datenträgers mit dem oben beschriebenen Baum zusammen? Auch wenn ein Laufwerk bereits durch eine Gerätedatei repräsentiert wird, ist das Dateisystem seines Datenträgers noch nicht benutzbar. Der Kernel weiß von dem betreffenden Laufwerk nämlich bislang nur, dass es sich um ein blockorientiertes Gerät handelt (dass die Daten des Gerätes also blockweise zu lesen und zu schreiben sind) und hoffentlich auch, welchen Treiber er für Zugriffe auf das Gerät zu verwenden hat. Das verwendete Dateisystem ist dem Kernel noch unbekannt, und ohne diese Kenntnis machen blockweise Zugriffe auf das Gerät keinen großen Sinn. Den Typ des Dateisystems teilt man dem Kernel nun mit, indem man das Gerät (repräsentiert durch seine Gerätedatei) in den Verzeichnisbaum einhängt. In diesem Zusammenhang verwendet man auch häufig den englischen Begriff mounten. Man sagt, dass ein Laufwerk gemountet werden muss.

Beim Mounten geschieht also zweierlei: Zum einen wird dem Kernel mitgeteilt, welchen Dateisystem-Typ das neu eingehängte Gerät verwendet. Zweitens muss der Kernel wissen, an welcher Stelle im Dateibaum er das neue Gerät einhängen soll. Ihm wird also ein Verzeichnispfad mitgeteilt, unter dem das Gerät fortan anzusprechen ist.

Nach so viel allgemeiner Erklärung fassen wir die zentralen Begriffe im Folgenden nochmals zusammen. Wenn Ihnen die ein oder andere Frage zunächst unbeantwortet geblieben ist, lesen Sie zunächst weiter - vieles wird sich bei der konkreten Betrachtung der Handhabung von Laufwerken später von selbst klären.

Kurze Zusammenfassung der wichtigsten Begriffe

Mounten:

Das Englische to mount bedeutet so viel wie anbringen oder montieren. Man spricht anschaulich vom Einhängen in das Dateisystem. Als Mountpoint oder Mountpunkt wird auch die Stelle bezeichnet, an der ein Gerät in das Dateisystem eingehängt wird.

Gerät:

Linux verwendet eine einheitliche, abstrakte Schnittstelle für Geräte. Dabei handelt es sich um das Gerätedateisystem /dev. Wenn Sie ein Laufwerk verwenden möchten, so nutzen Sie jedoch nicht direkt das Gerätedateisystem, sondern hängen das entsprechende Gerät, das sich im Verzeichnis /dev (Abk. für engl. device = Gerät) befindet, an einer anderen Stelle in den Dateibaum ein. Dabei müssen Sie den Dateisystemtyp des verwendeten Datenträgers und den Mountpunkt angeben.

Verzeichnisbaum:

Der Linux-Verzeichnisbaum beginnt mit dem Wurzelverzeichnis /. Er bildet eine Abstraktion von den eigentlichen Verzeichnissen und Dateien sowie auch von allen tatsächlichen und virtuellen Geräten. Der Linux-Verzeichnisbaum wird von FHS dem File Hierarchie System definiert.

Dateisystem:

Ein Dateisystem legt die Strukturierung von Daten auf blockorientierten Datenträgern fest. Einen Datenträger mit einem Dateisystem zu formatieren heißt, den Datenträger mit dieser Strukturierung zu versehen.

Theorie okay. Aber wie geht man mit mount um?

Um das CD-ROM-Laufwerk ansprechen zu können, muss es also in das Dateisystem eingehängt werden. Normalerweise muss man sich nicht viele Gedanken machen, wie das geht. Eine kurze Zeile in der Bash erledigt das für Sie. Da das CD-ROM-Laufwerk unter /mnt eingehängt wird (wir nehmen wieder Red Hat als Beispiel), sieht dies wie folgt aus.

user@linux ~$ mount /mnt/cdrom 

Nach dem oben Gesagten muss uns dieses Kommando irritieren, denn weder wird die erforderliche Gerätedatei angegeben noch der Typ des Dateisystems. Wenn das Kommando dennoch funktioniert, liegt das an einem Eintrag in der Datei /etc/fstab. mount schaut in dieser Datei nach, ob es einen Eintrag für den Mountpunkt /mnt/cdrom findet. Ist dies der Fall, liest es die zugehörige Gerätedatei sowie den Dateisystemtyp aus /etc/fstab und hängt das Gerät unter /mnt/cdrom ein.

Um das CD-ROM-Laufwerk auch ohne Eintrag in der /etc/fstab benutzen zu können, geben Sie die folgende Zeile ein:

user@linux ~$ mount -r -t iso9660 /dev/cdrom /mnt/cdrom 

Lassen Sie sich nicht durch die -r Option irritieren (r steht für engl. readonly = nur lesen). Sie gibt lediglich an, dass wir hier ein ausschließlich lesbares Dateisystem einhängen wollen. Sie wäre nicht unbedingt notwendig gewesen, andernfalls hätte mount uns jedoch mitgeteilt, dass das eingehängte Dateisystem schreibgeschützt ist.

Der Befehl df müsste Ihnen jetzt in etwa folgende Zeilen ausgeben:

user@linux ~$ df

Dateisystem  1k-Blöcke   Benutzt Verfügbar Ben% montiert auf
/dev/hda3      4032124   2582084   1245212  68% /
/dev/hda1        23302     10063     12036  46% /boot
none             63244         0     63244   0% /dev/shm
/dev/cdrom      506144    506144         0 100% /mnt/cdrom 	

Interessant ist die letzte Zeile der Ausgabe:

/dev/cdrom     506144   506144          0  100%  /mnt/cdrom 	

1k-Blöcke zeigt das Fassungsvermögen der CD. Benutzt zeigt an, wieviel Speicherplatz bereits belegt ist. Verfügbar zeigt die Menge des freien Speicherplatzes. Bei CD-ROMs ist alles belegt und nichts mehr frei, da wir nicht darauf schreiben können.

Die Ausgabe zeigt uns, dass das CD-ROM-Laufwerk, welches über die Gerätedatei /dev/cdrom angesprochen wird, in das Dateisystem eingebunden ist, nämlich unter dem angegebenen Verzeichnis /mnt/cdrom. Mittels ls /mnt/cdrom können wir uns den Inhalt der CD ansehen. Hätte das Laufwerk keine CD enthalten, wäre es übrigens zu einer Fehlermeldung der folgenden Art gekommen:

user@linux ~$ mount -r -t iso9660 /dev/cdrecorder /media/dvd 
mount: Kein Medium gefunden 	

Verbreitete Dateisystem-Typen bei Wechselmedien

Wenn Sie oder der Systemverwalter für ein Gerät keinen Eintrag in der /etc/fstab vorgenommen haben, so müssen Sie den Typ - wie oben gesehen - mittels der -t Option beim Einhängen angeben. Eine Liste der insgesamt verfügbaren Typen liefert die Manpage von mount. Derzeit werden folgende Typen unterstützt: adfs, affs, autofs, coda, coherent, cramfs, devpts, efs, ext, ext2, ext3, hfs, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, ntfs, proc, qnx4, reiserfs, romfs, smbfs, sysv, tmpfs, udf, ufs, umsdos, vfat, xenix, xfs, xiafs. Von diesen Typen kommt für Wechelmedien nur eine kleine Auswahl in Betracht. Wir wollen hier nur auf die meistverwendeten Typen für CDs und DVDs sowie Disketten für Floppy- und ZIP-Laufwerke eingehen.

Das übliche Format für CDs und DVDs wird durch die ISO Norm 9660 standardisiert. Diese Norm definiert drei Konformitätsebenen. Ebene 1 ist am restriktivsten, Ebene 3 am wenigsten restriktiv. Des weiteren gibt es verschiedene Erweiterungen (sogenannte Extensions), von denen Rock Ridge und Joliet die bekanntesten sind. Diese Erweiterungen heben einige der Restriktionen von ISO 9660 auf und werden daher nicht selten verwendet. Linux unterstützt sowohl die Ebenen 1 bis 3 als auch die Erweiterungen Rock Ridge und Joliet. Beim Einhängen geben Sie unabhängig von der verwendeten Ebene oder Erweiterung einfach die Option -t iso9660 an.

Disketten sind normalerweise mit einem MS-DOS-Dateisystem formatiert. Der Parameter lautet hier also -t msdos. Unix-Disketten können gelegentlich auch mit einem Minix-Dateisystem formatiert sein. Verwenden Sie dann -t minix. Die Disketten für ZIP-Laufwerke sind meist mit einem FAT32-Dateisystem formatiert, für das die Option -t vfat verwendet wird.

Die Datei /etc/fstab

Damit man schnell Geräte an festgelegten Stellen einhängen kann, kann man sich die Arbeit erleichtern. Wie schon oben gesehen funktioniert die Zeile mount /mnt/cdrom nicht immer. Damit immer wiederkehrende Geräte und Mountpunkte nicht immer komplett angegeben werden müssen, kann man sich die Datei /etc/fstab zu Hilfe nehmen.

fstab 
user@linux ~$ cat /etc/fstab 
LABEL=/      /           ext3    defaults           1 1
LABEL=/boot  /boot       ext3    defaults           1 2
none         /dev/pts    devpts  gid=5,mode=620     0 0
none         /proc       proc    defaults           0 0
none         /dev/shm    tmpfs   defaults           0 0
/dev/hda2    swap        swap    defaults           0 0
/dev/fd0     /mnt/floppy auto    noauto,owner       0 0 	

Um das CD-ROM-Laufwerk jetzt immer mittels

user@linux ~$ mount /mnt/cdrom 

oder

user@linux ~$ mount /dev/cdrom 

(auch die direkte Angabe der Gerätedatei ist also möglich, wenn ein Eintrag in /etc/fstab existiert) mounten zu können, tragen Sie einfach folgende Zeile in /etc/fstab ein:

/dev/cdrom   /mnt/cdrom   iso9660 noauto,user,ro 0 0 	

Hierfür benötigen Sie natürlich Systemverwalter-Rechte an dem betreffenden Rechner. Auf weitere Berechtigungsfragen gehen wir noch kurz im nächsten Abschnitt ein.

Rechte - Wer darf mounten?

Auf Produktiv-Systemen ist das Mounten der Laufwerke meist nur root gestattet. Auf Systemen, die weniger sicherheitsrelevant sind, können häufig auch Standardbenutzer mounten. Dies ist dann aufgrund eines Eintrages in der /etc/fstab möglich. Wir möchten uns nun einen ersten Überblick in die Art der Vergabe von Berechtigungen beim Einhängen von Geräten verschaffen.

Grundsätzlich gilt: Ist für ein Gerät kein Eintrag in der /etc/fstab enthalten, so darf nur root dieses Gerät einhängen. Gibt es für das Gerät einen Eintrag in der /etc/fstab, so muss dort explizit die Berechtigung vergeben werden. Dies geschieht in der Liste der Optionen, welche in der vierten Spalte der /etc/fstab eingetragen wird. Diese Liste (als Separator zwischen den einzelnen Optionen dient ein Komma) muss dann einen der Einträge user oder users enthalten. Wir wiederholen die oben schon gezeigte Zeile als Beispiel:

/dev/cdrom   /mnt/cdrom   iso9660 noauto,user,ro 0 0 	

Die anderen Optionen interessieren uns nicht, aber der Eintrag user zwischen noauto und ro ermöglicht es auch Standardbenutzern, das CD-ROM-Laufwerk einzuhängen. Das Aushängen des Gerätes ist dann übrigens nur dem Benutzer erlaubt, der das Gerät zuvor eingehängt hat. Wenn Sie diese Einschränkung nicht wünschen, tragen sie als Option users an Stelle von user ein. Das Gerät kann dann auch von Benutzern wieder ausgehängt werden, die das Einhängen nicht selbst vorgenommen haben. Mit diesen beiden Optionen sind übrigens die Optionen nouser und owner verwandt. Ersteres schließt Standardbenutzern explizit vom Einhängen aus. Die Option owner ermöglicht es dem Besitzer der Gerätedatei, das Gerät einzuhängen. Die Eigentümerschaft an der Datei wird in diesem Fall explizit an den betreffenden Benutzer vergeben.

Mount wieder lösen und Medium freigeben

Wir haben oben bereits vom Wieder-Aushängen eines Gerätes gesprochen. Hierzu wird der Befehl umount benutzt. Bei CD-ROM-Laufwerken macht es sich besonders bemerkbar, wenn man das Aushängen vergisst. Wenn ein CD-ROM-Laufwerk gemountet ist, wird der eine oder andere schon mal vergeblich den Eject-Knopf gedrückt haben. Das Laufwerk ließ sich nicht öffnen, und die CD wurde nicht ausgegeben. Um die CD-Ausgabe zu ermöglichen, muss das Laufwerk zunächst wieder aus dem Dateibaum ausgehängt werden.

Auch Disketten sollten Sie vor dem Entfernen aus dem Laufwerk zunächst mittels umount wieder aushängen. Es ist ansonsten nicht sichergestellt, dass alle Schreib- und Lesezugriffe, die auf dem Laufwerk ausgeführt werden sollten, tatsächlich auch erfolgt sind. Dies hängt damit zusammen, dass Linux solche Zugriffe aus Effizienzgründen puffert. Wenn Sie beispielsweise eine Datei auf einer Diskette abspeichern, so erfolgt der Schreibzugriff auf die Diskette nicht notwendigerweise sofort. Das System könnte beispielsweise gerade mit wichtigeren Aufgaben beschäftigt sein und daher den Schreibzugriff verzögern. Wenn Sie in diesem Augenblick einfach die Diskette aus dem Laufwerk entfernen, kann die betreffende Datei unvollständig oder inkonsistent beschrieben worden sein. Um dies zu vermeiden, hängen Sie also vor dem Entfernen die Diskette zunächst mittels umount aus dem Dateibaum aus. Linux wird dann alle ausstehenden Zugriffe tätigen und das Laufwerk aushängen. Die Diskette kann dann immer in konsistentem Zustand entnommen werden.

Ein Laufwerk kann übrigens nur dann ausgehängt werden, wenn es nicht verwendet wird. Zur Verwendung eines Laufwerkes gehört es auch, wenn man sich in einer Shell in einem Verzeichnis befindet, die zum Dateisystem des Laufwerkes gehört. Versucht man in einem solchen Fall, das Laufwerk auszuhängen, so wird man eine Fehlermeldung der folgenden Art erhalten:

user@linux ~$ umount /mnt/cdrom 
umount: /mnt/cdrom: Das Gerät wird momentan noch benutzt 	

Der betreffende Benutzer muss dann zunächst sein aktuelles Arbeitsverzeichnis wechseln, bevor das Aushängen unternommen werden kann. Diese Situation kann auch versteckter sein, indem beispielsweise ein Programm auf eine Datei des eingehängten Laufwerkes zugreift. Die Datei muss dann innerhalb dieses Programmes geschlossen werden, bevor das Laufwerk ausgehängt werden kann.

Der Befehl lsof (list open files)

$ lsof | grep dvd # (bzw. das betreffende Laufwerk)
konqueror 3012  joe  129r      DIR        3,1      48     131618 /dvd

sollte den betreffenden Prozess zeigen der noch was auf dem Laufwerk schafft, der kann mit

$ kill -9 3012 # (Prozess-ID wird bei lsof angezeigt) 

gezielt abgebrochen werden.

Automatisches Einhängen

Bei den neueren Distributionen geschieht das Einhängen von CD-ROM-Laufwerken häufig automatisch. Das Einlegen eines Datenträgers wird vom System erkannt und anhand der Angaben in /etc/fstab eingehängt. Der Benutzer sieht hier nicht mehr, was genau im Hintergrund läuft. Dies ändert jedoch nichts an den prinzipiellen Mechanismen, die wir oben beschrieben haben.