Wie mountet man ZIPs/CDs oder andere externe Medien?

  1. Hintergrund
  2. Wie finde ich den Namen des zum Medium gehörigen device-Files heraus
  3. Wie mounte ich den nun?
  4. Geht es auch einfacher?
  5. Muss ich dazu immer root sein
  6. Geht das nicht auch automatisch?
  7. Wie kriege ich mein Medium wieder raus
  8. Achtung Falle

Hintergrund

Linux spricht alle Geräte, die nicht einigermassen direkt an der CPU hängen (wie z.B. PCI-Karten), über sogenannte device-Files an. Um eine Medium mounten zu können, d.h. in den Dateibaum einbinden zu können, muss man aber den device-file der zu mountenden Partition auf dem Medium wissen.

Wie finde ich den Namen des zum Medium gehörigen device-Files heraus

Die Namen von device-Files für Laufwerke (incl. Festplatten) sind nach folgendem Schema aufgebaut:

/dev/sdXY bei SCSI-Geräten
/dev/scdX bei SCSI-CD-ROM-Laufwerken
/dev/hdXY bei IDE-Geräten
/dev/hdX bei IDE-CD-ROM-Laufwerken

Das 'X' steht dabei für einen Buchstaben, den Linux dem Laufwerk zuordnet.
Bei IDE-Laufwerk werden der Reihe der Kanäle nach durchbuchstabiert:
       a für Kanal1,Master,
       b für Kanal1,Slave,
       c für Kanal2, Master, usw. .
Bei SCSI werden die SCSI-Busse (wenn mehrere vorhanden, wie z.B. beim PowerMac 7500) der Reihe nach und auf jedem Bus bei den kleinen SCSI-ID's beginnend durchgescannt. In der Reihenfolge, wie dabei die SCSI-Geräte angetroffen werden, werden sie durchbuchstabiert.

Das 'Y' in obiger Tabelle bezeichnet dagegen die Nummern der Partitionen auf dem jeweiligen Laufwerk. Ist das Medium nach dem PC-Schema partitioniert beginnen diese Nummern bei 1. Auf dem Mac belegen jedoch die Treiber, die Partitiontabelle und ggfs. einige Patches die ersten Partitionen, so dass die erste nutzbare Partition die Nummer 3-5 trägt.

Man muss sich jedoch nicht die Mühe machen, das alles genau auszurechen. Bei Booten teilt Linux einem mit welches Gerät auf welchen Device-file bzw. welche Gruppe von device-files gelegt wurden. Falls man das ganze beim Booten verpasst hat, kann man es auch (als root) in der Datei /var/log/messages nachlesen. Bei mir sieht die Meldung beim Booten so aus:

     hda: QUANTUM FIREBALL EX6.4A, ATA DISK drive
     hdb: IBM-DJNA-372200, ATA DISK drive
     hde: MATSHITADVD-ROM SR-8583, ATAPI CDROM drive
    
Ich habe also eine Festplatte auf /dev/hday, eine weitere auf /dev/hdby und ein DVD-ROM auf /dev/hde.

Um nun noch die Partitionsnummer herauszubekommen, wirft man am besten mit pdisk (bzw. fdisk für PC-partitioniert Medien) eine Blick darauf.

    > pdisk -l /dev/hda
    
liefert alle was über das Laufwerk an /dev/hda man wissen muss.

 

Wie mounte ich den nun?

Mounten ist eigentlich ganz einfach. Wenn man den device-file kennt, muss man nur noch ein Verzeichnis anlegen (diese sollte für alle volle Rechte gesetzt haben) und man sollte root sein. Dann mountet man mit

    > mount /dev/hda8 /mnt
    

die 8. Partition der Master-Festplatte auf IDE-Kanal 1 auf den Pfad /mnt. Anders als bei MacOS darf das Verzeichnis irgendwo im lokalen Datenbaum liegen. Nur auf Netz- / NFS-Partitionen sollte es nicht liegen. Es ist also auch

    > mount /dev/hda8 /usr/local/lan
möglich.

 

Geht es auch einfacher?

Nun man kann den device-file oder das Verzeichnis weglassen, wenn man die Partition in der Datei /etc/fstab eingetragen hat. Beispielsweise kann man seine CD-ROM mit:

    > mount /cdrom    
auf /cdrom mounten, wenn in der /etc/fstab diese Zeile steht
    /dev/hde                /cdrom          auto    noauto,ro  0 0

Diese besagt, dass das Gerät unter /dev/hde auf /cdrom gemounten werden soll, dass dabei der Type des Filesystems (ext2fs, hfs, fat,...) automatisch bestimmt werden soll (auto), dass dieses Partition/dises Laufwerk beim Booten nicht automatisch gemountet werden soll (noauto) und dass das Medium read-only gemountet werden soll(ro). Der Name des device-file muss dabei natürlich den Gegebenheiten auf dem eignen Rechner angepasst werden.

Anders ausgedrügt besteht jede Zeile in der /etc/fstab aus sechs Spalten, von denen hier die ersten 4 interessieren:

  1. Spalte: Hier steht der device-File
  2. Spalte: Hier steht der mount-point, d.h. das Verzeichnis, an dem die Partition einhangen wird
  3. Spalte: Type des Filesystems. Bei Wechelmedien, die unterschiedliche Filesysteme tragen können, kann hier auch auto stehen. Unter Linux steht hier meistens ext2fs.
  4. Spalte: Hier stehen verschiedene mount-Optionen. Die einfachste ist defaults.

Analog zum CD-ROMlassen sich auch andere Wechselmedien-Laufwerke einrichten, z.B. mit folgender Zeile für mein MO an meinem PM7500:

    /dev/sdc3               /mo          ext2fs    noauto,rw  0 0
Mit
    > mount /mo

wird die dritte Partition auf dem dritten Gerät der SCSI-Kette (das ist bei mir das MO) auf /mo gemountet. Im Gegensatz zur CD wird das MO auch beschreibbar gemountet (deshalb die Option rw statt ro).

 

Muss ich dazu immer root sein

Nein, man kann auch als normaler User mounten, aber nur Partitionen, für die dieses extra in der /etc/fstab freigegeben wurde. Partitionen oder Laufwerke, die nicht in der /etc/fstab eingetragen sind, kann nur root mounten.

Damit jeder user eine Partition oder Laufwerk mounten darf, muss bei dieser in /etc/fstab die Option user gesetzt sein. Für das CD-ROM sähe das so aus:

    /dev/hde                /cdrom          auto    noauto,user,ro  0 0

Leider impliziert die Option user in der /etc/fstab, dass von dort keine Programme mehr gestartet werden dürfen. Fügt man aber die Option exec hinzu, ist es wieder möglich Programme von diesem Medium zu starten:

    /dev/hde                /cdrom          auto    noauto,user,ro,exec  0 0

Wichtig ist, dass exec hinter user steht. Dasselbe gilt übrigens für den suid-Mechanismus, der bei Bedarf mit der Option suid wieder eingeschaltet werden muss.
Damit kann jetzt jeder User eine CD mit > mount /cdrom mounten.

Geht das nicht auch automatisch

Ja es geht. Es gibt dazu den einen sogenannten Automounter. Mit diesem kann man Linux dazu veranlassen ein Medium automatisch zu mounten, wenn darauf zugeriffenwerden soll. Mehr dazu in einem eigenen Artikel.

Wie kriege ich mein Medium wieder raus

Wie unter MacOS (und anders als unter Windows) sind Laufwerke mit gemounteten Medien oder Partitionen gesperrt. Man muss das Medium erts "entmounten" oder unmounten. Die geht einfach mit:

    > umount /cdrom    

Hierzu ist nicht einmal ein Eintrag in der /etc/fstab nötig, da der device-file und Verzeichnis ja noch über den mount verknüpft sind. Damit jeder User das Medium umounten darf, braucht man aber genau wie beim mounten den entsprechende Eintrag der Option user in der /etc/fstab.

Noch eleganter geht es mit dem Kommando eject (es findet sich bei LinuxPC 1999 im Packet eject-2.0.2-3.rpm, bei LinuxPPC 2000 ist es Teil des Basissystems und sollte installiert sein.). Mit

       > eject /cdrom    

Wird nicht nur das Medium geumountet sondern auch gleich noch ausgeworfen. Ist das ein Luxus ;-).

Achtung Falle

Beim Mounten von Wechselmedium (ausser CD-ROMs) gibt es eine kleine Falle. Aus unerfindlichen Gründen merkt Linux sich den Dateibaum eines Mediums auch nachdem dieses geumountet wurde. Wenn man nun ein anderes Medium in demselben Laufwerk mit derselben Partition mountet, so erscheint trotzdem wieder der Dateibaum des ersten Mediums. ;-(
Mit einem Trick kann man dieses jedoch umgehen. Nachdem man das erste Medium dem Laufwerk wieder entnommen hat, gibt man (eigentlich sinnloserweise) folgenden Befehl ein. Als Beispiel habe ich wieder mein MO (siehe oben) gewählt.

    > mount /mo
    

Da nun aber kein Medium im Laufwerk (hier im MO) ist, gibt es eine Fehlermeldung. Dabei vergisst Linux nun aber endlich den alten Dateibaum und man kann nun getrost ein neues Medium einschieben und mounten.


Rüdiger Goetz

Last modified: Mon Mar 17 08:12:14 CET 2003