it-swarm.com.de

Warum müssen wir unter Linux mounten?

Ich verstehe, was das Mounten unter Linux ist, und ich verstehe Gerätedateien. Ich verstehe jedoch nicht, WARUM wir montieren müssen.

Zum Beispiel, wie in akzeptierte Antwort auf diese Frage erläutert, mit diesem Befehl:

mount /dev/cdrom /media/cdrom

wir mounten das CD-ROM-Gerät auf /media/cdrom und können schließlich mit dem folgenden Befehl auf die CD-ROM-Dateien zugreifen

ls /media/cdrom

hier wird der Inhalt der CD-ROM aufgelistet.

Warum nicht die Montage ganz überspringen und Folgendes tun?

ls /dev/cdrom

Und lassen Sie den Inhalt der CD-ROM auflisten. Ich erwarte eine der Antworten: " So wird Linux entworfen ". Aber wenn ja, warum wurde es dann so entworfen? Warum nicht direkt auf das Verzeichnis /dev/cdrom Zugreifen? Was ist der eigentliche Zweck der Montage?

67
Greeso

Ein Grund dafür ist, dass der Zugriff auf Blockebene etwas niedriger ist, als mit ls arbeiten könnte. /dev/cdrom Oder dev/sda1 Ist möglicherweise Ihre CD ROM Laufwerk und Partition 1 Ihrer Festplatte, sie implementieren jedoch nicht ISO 9660/ext4 - Sie sind nur RAW-Zeiger auf Geräte, die als Gerätedateien bekannt sind.

Mount bestimmt unter anderem, wie dieser unformatierte Zugriff verwendet werden soll - welche Dateisystemlogik-/Treiber-/Kernelmodule die Lese-/Schreibvorgänge verwalten oder ls /mnt/cdrom In welche Blöcke wie lesen müssen den Inhalt dieser Blöcke in Dinge wie file.txt zu interpretieren.

In anderen Fällen kann dieser Zugriff auf niedriger Ebene gut genug sein. Ich habe gerade von seriellen Schnittstellen, USB-Geräten, Tty-Terminals und anderen relativ einfachen Geräten gelesen und darauf geschrieben. Ich würde niemals versuchen, manuell aus/dev/sda1 zu lesen/schreiben, um beispielsweise eine Textdatei zu bearbeiten, da ich im Grunde die ext4-Logik neu implementieren müsste, was unter anderem Folgendes beinhalten könnte: Nachschlagen der Datei-Inodes, Finden der Speicherblöcke, lesen Sie den vollständigen Block, nehmen Sie meine Änderungen vor, schreiben Sie die vollständigen Blöcke, aktualisieren Sie dann den Inode (vielleicht) oder schreiben Sie dies alles in das Journal - viel zu schwierig.

Eine Möglichkeit, dies selbst zu sehen, besteht darin, es zu versuchen:

[[email protected] dev]# cd /dev/sda1
bash: cd: /dev/sda1: Not a directory

/dev Ist ein Verzeichnis, und Sie können cd und ls alles, was Sie möchten. /dev/sda1 Ist kein Verzeichnis; Es handelt sich um einen speziellen Dateityp, den der Kernel als "Handle" für dieses Gerät anbietet.

Weitere Informationen finden Sie unter Wikipedia-Eintrag zu Gerätedateien .

68
Ehryk

Grundsätzlich muss das Betriebssystem wissen, wie es auf die Dateien auf diesem Gerät zugreifen kann.

mount bedeutet nicht nur "Zugriff auf die Dateien", sondern teilt dem Betriebssystem mit, über welches Dateisystem das Laufwerk verfügt, ob es schreibgeschützt ist oder ob Lese-/Schreibzugriff usw.

/dev/cdrom ist ein Low-Level-Gerät, die Betriebssystemfunktionen würden nicht wissen, wie sie darauf zugreifen sollen ... Stellen Sie sich vor, Sie legen eine seltsam formatierte CD-ROM hinein (sogar eine Audio-CD), wie würde ls sagen, welche Dateien (falls vorhanden) befinden sich auf der CD-ROM, ohne sie zuerst zu "mounten"?

Beachten Sie, dass dies in vielen Betriebssystemen automatisch geschieht (sogar in Linux bei einigen Distributionen und Grafikschnittstellen). Dies bedeutet jedoch nicht, dass andere Betriebssysteme die Laufwerke nicht "mounten".

20
Jcl

Aus Gründen der Konsistenz

Stellen Sie sich vor, Sie haben einige Partitionen auf der ersten Festplatte in Ihrem System. Zum Beispiel /dev/sda2. Sie entscheiden später, dass das Laufwerk nicht groß genug ist, also kaufen Sie ein zweites und fügen es dem System hinzu. Auf einmal wird dies zu /dev/sda Und Ihr aktuelles Laufwerk zu /dev/sdb. Ihre Partition ist jetzt /dev/sdb2.

Mit Ihrem vorgeschlagenen System müssten Sie alle Skripte, Anwendungen, Einstellungen usw. ändern, die auf die Daten auf Ihrer alten Partition zugreifen, um diese Namensänderung widerzuspiegeln.

Bei der Bereitstellung können Sie jedoch weiterhin denselben Bereitstellungspunkt für dieses umbenannte Laufwerk verwenden. Sie müssten /etc/fstab Bearbeiten, um Ihrem System mitzuteilen, dass (zum Beispiel) /media/backup Jetzt stattdessen /dev/sdb2 Ist, aber das ist nur eine Bearbeitung.

Beachten Sie, dass moderne Systeme noch einfacher sind. Anstatt das Gerät als /dev/sda2 Oder /dev/sdb2 Zu bezeichnen, haben sie UUIDS, die c5845b43-fe98-499a-bf31-4eccae14261b Ähnlich aussehen oder freundlichere Bezeichnungen wie backup, mit dem das Gerät bei der Montage referenziert werden kann. Auf diese Weise ändert sich der Gerätename beim Hinzufügen eines neuen Geräts nicht, was die Verwaltung noch einfacher macht:

# mount LABEL="backup" /media/backup

Aus Sicherheitsgründen

Wenn ein Gerät bereitgestellt werden muss, kann der Administrator den Zugriff auf das Gerät steuern. Das Gerät kann entfernt werden, wenn es nicht gemountet ist, aber nicht, wenn es verwendet wird (es sei denn, Sie möchten Datenverlust erleiden). Wenn Sie ein Windows-Benutzer sind (waren), erinnern Sie sich an das kleine grüne Symbol im Benachrichtigungsbereich, das Sie darüber informiert, dass das Entfernen eines USB-Sticks sicher ist. Das ist das Ein- und Aushängen des Sticks durch Windows für Sie. Das Prinzip ist also nicht nur ein Unix/Linux-Prinzip.

8
garethTheRed

Ich würde es historische Gründe nennen. Nicht dass die anderen Antworten falsch wären, aber die Geschichte enthält noch ein bisschen mehr.

Windows vergleichen: Windows wurde als Einzelcomputer- und Einzelbenutzerbetriebssystem gestartet. Dieser einzelne Computer hatte wahrscheinlich ein Diskettenlaufwerk und eine Festplatte, keine Netzwerkverbindung, kein USB, nichts. (Windows 3.11 hatte native Netzwerkfunktionen; Windows 3.1 nicht .)

Die Art der Einstellung, in die Windows hineingeboren wurde, war so einfach, dass man sich keine Gedanken machen musste: Mounten Sie einfach jedes Mal alles (alle zwei Geräte) automatisch, es gibt nicht (nicht) viele Dinge, die schief gehen könnten.

Im Gegensatz dazu wurde Unix von Anfang an für die Ausführung in Servernetzwerken mit mehreren Benutzern entwickelt.

Eine der Unix-Entwurfsentscheidungen war, dass das Dateisystem den Endbenutzern als eine einzige einheitliche Einheit angezeigt werden sollte, unabhängig davon, auf wie vielen Computern die physischen Festplatten verteilt waren, unabhängig von der Art der Festplatte und unabhängig von der Anzahl der Dutzende von Computern Der Benutzer würde von dort aus darauf zugreifen. Der logische Pfad zu den Benutzerdateien würde gleich bleiben, selbst wenn sich der physische Speicherort dieser Dateien über Nacht geändert hätte, z. aufgrund von Serverwartung.

Sie abstrahierten das logische Dateisystem, Pfade zu Dateien, von den physischen Geräten, auf denen diese Dateien gespeichert waren. Angenommen, Server A ist normalerweise Hosting/Home, aber Server A muss gewartet werden: Hängen Sie einfach Server A aus und mounten Sie stattdessen Backup-Server B auf/Home, und niemand außer den Administratoren würde es überhaupt bemerken.
(Im Gegensatz zur Windows-Konvention, verschiedenen physischen Geräten unterschiedliche Namen zu geben - C:, D: usw. -, die der von Unix angestrebten Transparenz entgegenwirkt.)

In dieser Umgebung kann man nicht einfach alles in Sichtweite montieren.

In einem großen Netzwerk sind einzelne Festplatten und Computer ständig außer Betrieb. Administratoren benötigen die Fähigkeit zu sagen, was wo und wann gemountet wird, z. ein kontrolliertes Herunterfahren eines Computers durchführen, während ein anderer Computer transparent das Hosten derselben Dateien übernimmt.

Aus historischer Sicht: Windows und Unix haben unterschiedliche Hintergründe. Sie könnten es einen kulturellen Unterschied nennen, wenn Sie möchten:

  • Unix wurde in einer Umgebung geboren, in der der Administrator die Bereitstellung steuern musste. Von den Dutzenden von Speichergeräten im Netzwerk muss der Administrator entscheiden, was wo und wann gemountet wird.
  • Windows wurde in einer Umgebung geboren, in der es keinen Administrator und nur zwei Speichergeräte gab, und der Benutzer würde wahrscheinlich wissen, ob sich seine Datei auf der Diskette oder auf der Festplatte befand.
  • (Linux wurde natürlich als Einzelcomputer-Betriebssystem geboren, wurde aber auch von Anfang an explizit entwickelt, um Unix auf einem Heimcomputer so genau wie möglich nachzuahmen.)

In jüngerer Zeit sind die Betriebssysteme näher zusammengerückt:

  • Linux hat mehr Einzelcomputer- und Einzelbenutzer-Inhalte hinzugefügt (z. B. Automounting). wie es häufig in Einzelcomputereinstellungen verwendet wurde.
  • Windows hat mehr Sicherheit, Netzwerk, Unterstützung für mehrere Benutzer usw. hinzugefügt. Als das Netzwerk allgegenwärtiger wurde und Microsoft begann, auch ein Betriebssystem für Server zu entwickeln.

Aber es ist immer noch leicht zu sagen, dass die beiden das Ergebnis unterschiedlicher Traditionen sind.

6
j-g-faustus

Der Fragentitel lautet: Warum müssen wir unter Linux mounten?

Eine Möglichkeit, diese Frage zu interpretieren: Warum müssen wir explizite mount - Befehle ausgeben, um Dateisysteme unter Linux verfügbar zu machen?

Die Antwort: Wir nicht.

Sie müssen Dateisysteme nicht explizit mounten, Sie können dafür sorgen, dass dies automatisch erfolgt, und Linux-Distributionen tun dies bereits für die meisten Geräte, genau wie Windows und Macs.

Das ist wahrscheinlich nicht das, was Sie fragen wollten.

Eine zweite Interpretation: Warum müssen wir manchmal explizite mount Befehle ausgeben, um Dateisysteme unter Linux verfügbar zu machen? Warum nicht das Betriebssystem immer für uns tun lassen und es vor dem Benutzer verbergen?

Dies ist die Frage, die ich im Fragentext lese, wenn Sie fragen:

Warum nicht die Montage ganz überspringen und Folgendes tun

ls /dev/cdrom

und den Inhalt der CD-ROM aufgelistet haben?

Vermutlich meinst du: Warum nicht einfach diesen Befehl was tun lassen?

ls /media/cdrom

tut jetzt?

Also in diesem Fall, /dev/cdrom wäre ein Verzeichnisbaum, keine Gerätedatei. Ihre eigentliche Frage scheint also zu sein: Warum haben Sie überhaupt eine Gerätedatei?

Ich möchte eine Antwort zu den bereits gegebenen hinzufügen.

Warum sehen Benutzer Gerätedateien?

Wenn Sie eine CD-ROM oder ein anderes Gerät zum Speichern von Dateien verwenden, wird eine Software verwendet, die alles auf Ihrer CD-ROM als Verzeichnisbaum von Dateien interpretiert. Es wird immer dann aufgerufen, wenn Sie ls oder eine andere Art von Befehl oder Anwendung verwenden, die auf die Dateien auf Ihrer CD-ROM zugreift. Diese Software ist der Dateisystemtreiber für das jeweilige Dateisystem, mit dem die Dateien auf Ihre CD-ROM geschrieben werden. Wann immer Sie Dateien in einem Dateisystem auflisten, lesen oder schreiben, muss diese Software sicherstellen, dass die entsprechenden Lese- und Schreibvorgänge auf niedriger Ebene auf dem betreffenden Gerät ausgeführt werden. Wann immer Sie ein Dateisystem mount, teilen Sie dem System mit, welcher Dateisystemtreiber für das Gerät verwendet werden soll. Unabhängig davon, ob Sie dies explizit mit einem mount -Befehl tun oder es dem Betriebssystem überlassen, automatisch ausgeführt zu werden, muss dies erfolgen, und natürlich muss die Dateisystemtreibersoftware an erster Stelle vorhanden sein .

Wie macht ein Dateisystemtreiber seine Arbeit? Die Antwort: Dies geschieht durch Lesen und Schreiben aus der Gerätedatei. Warum? Die Antwort, wie Sie bereits sagten: Unix wurde so entworfen. Unter Unix sind Gerätedateien die übliche Abstraktion auf niedriger Ebene für Geräte. Die wirklich gerätespezifische Software (der Gerätetreiber) für ein bestimmtes Gerät soll das Öffnen, Schließen, Lesen und Schreiben auf dem Gerät als Vorgänge in der Gerätedatei implementieren. Auf diese Weise muss übergeordnete Software (z. B. ein Dateisystemtreiber) nicht so viel über die internen Abläufe einzelner Geräte wissen. Die Low-Level-Gerätetreiber und die Dateisystemtreiber können von verschiedenen Personen separat geschrieben werden, sofern sie sich auf eine gemeinsame Schnittstelle einigen, und dafür sind die Gerätedateien gedacht.

Dateisystemtreiber benötigen also die Gerätedateien.

Aber warum sehen wir, normale Benutzer, die Gerätedateien? Die Antwort ist, dass Unix für Betriebssystemprogrammierer entwickelt wurde. Es wurde entwickelt, um seinen Benutzern das Schreiben von Gerätetreibern und Dateisystemtreibern zu ermöglichen. So werden sie tatsächlich geschrieben.

Gleiches gilt für Linux: Sie können Ihren eigenen Dateisystemtreiber (oder Gerätetreiber) schreiben, installieren und dann verwenden. Es macht Linux (oder jede andere Variante von Unix) leicht erweiterbar (und es ist tatsächlich der Grund, warum Linux gestartet wurde): Wenn eine neue Hardware auf den Markt kommt oder eine neue, intelligentere Methode zur Implementierung eines Dateisystems entwickelt wird kann jemand den Code schreiben, um ihn zu unterstützen, zum Laufen zu bringen und ihn zu Linux beizutragen.

Gerätedateien erleichtern dies.

5
reinierpost

Die derzeitige Anordnung bietet mehrere Vorteile. Sie können in Vorteile von Blockspezialdateien und Vorteile von Mountpunkten eingeteilt werden.

Spezielle Dateien sind Dateien, die Geräte darstellen. Eine der Ideen, auf denen Unix basiert, ist, dass alles eine Datei ist. Dies macht viele Dinge einfach, zum Beispiel besteht die Benutzerinteraktion nur aus dem Lesen und Schreiben von Dateien auf einem tty-Gerät, bei dem es sich um eine spezielle Zeichendatei handelt. Ebenso ist das Überprüfen auf fehlerhafte Blöcke, das Partitionieren oder Formatieren einer Festplatte nur eine Dateioperation. Es spielt keine Rolle, ob es sich bei der Festplatte um mfm, ide, scsi, fibrechanel oder etwas anderes handelt, es handelt sich nur um eine Datei.

Auf der anderen Seite möchten Sie möglicherweise nicht die gesamte Festplatte oder Partition, sondern nur die Dateien behandeln, und in vielen Fällen mehr Dateien, als auf eine Festplatte passen. Wir haben also Mountpoints. Mit einem Mountpoint können Sie eine ganze Festplatte (oder Partition) in ein Verzeichnis stellen. In meinen Slackware-Tagen, als eine Festplatte mit guter Größe ein paar hundert MB groß war, war es üblich, die CD als/usr und die Festplatte für /,/usr/local zu verwenden und auszutauschen. Oder Sie könnten/auf ein Laufwerk und/nach Hause auf ein anderes setzen.

Jetzt ist mir aufgefallen, dass Sie erwähnt haben, dass Sie Ihre CD auf/media/cdrom mounten, was für Computer mit nur einem CD-ROM-Laufwerk praktisch ist. Was ist, wenn Sie mehr als eine haben? wo solltest du die zweite montieren oder der dritte? oder der fünfzehnte? Sie könnten sicherlich/media/cdrom2 usw. verwenden. Oder Sie könnten es auf/src/samba/resources/windows-install oder/var/www mounten oder wo immer es sinnvoll wäre.

5
hildred

Viele Datenbankmodule können direkt mit Raw-Festplatten oder Partitionen arbeiten. Zum Beispiel MySQL:

http://dev.mysql.com/doc/refman/5.7/en/innodb-raw-devices.html

Dies vermeidet den Aufwand für das Durchsuchen von Dateisystemtreibern, wenn die DB-Engine nur eine riesige Datei benötigt, die die Festplatte füllt.

4
Tom Robinson

Weil /dev/cdrom ist ein Gerät, während /media/cdrom ist ein Dateisystem. Sie müssen Ersteres auf Letzterem mounten, um auf die Dateien auf der CD-ROM zugreifen zu können.

Ihr Betriebssystem stellt die Root- und Benutzerdateisysteme bereits automatisch von Ihrem physischen Festplattengerät bereit, wenn Sie Ihren Computer starten. Dies fügt lediglich weitere zu verwendende Dateisysteme hinzu.

Alle Betriebssysteme tun dies - jedoch einige (z. B. Windows, wenn eine CD-ROM auf D:) mach es transparent. Linux überlässt es Ihnen, damit Sie mehr Kontrolle über den Prozess haben.

Dies liegt daran, dass bei vielen Medien für Desktop- und Laptop-Benutzeroberflächen Unklarheiten darüber bestehen, was beim Einlegen der Medien zu tun ist, da die Benutzerintuition darin besteht, dass das Einlegen der Festplatte in die physische Box, mit der der Benutzer interagiert, nicht anders ist als beispielsweise Einfügen in ein Gerät neben dem Computer mit Netzwerkverbindung.

Daher muss die Benutzeroberfläche für Medien die beiden Arten potenzieller Mount-Ereignisse im grundlegenden Sinne ähnlich behandeln, und es gibt keine gute Möglichkeit für Computer, Netzwerk-Mounts so intuitiv wie möglich für Netzwerk-Mounts mit anderen UIs für Computer zu handhaben. B. Smartphones, Tablets und tragbare Computer, bei denen keine physischen Medien in die Geräte eingelegt werden können. (Beachten Sie, wie schrecklich die iPhone-Oberfläche für das Wechseln von SIM-Karten ist, die eine Art von physischen Medien, die iOS-Geräte in sie eingelegt haben.

Beachten Sie auch, dass andere gängige Ansätze für Benutzeroberflächen für diese Art von physischer Box (z. B. Windows 98, Windows 8, Mac OS X 10.2 (Jaguar) und Mac OS X 10.9 (Mavericks)) auf dieselben Probleme stoßen Verwenden Sie zusätzliche GUI-Dialogfelder, um mögliche Verwirrungen zu beseitigen (z. B. ist Windows 8 in der Regel so konfiguriert, dass für jede neu eingelegte CD eine Eingabeaufforderung angezeigt wird, unabhängig davon, ob sie als Dateisystem, Musikmedium oder gegebenenfalls als Sammlung von MP4-Videos bereitgestellt werden soll ). Es gibt keinen Grund, warum diese Benutzerdialoge nicht mit Linux oder anderen UNIX-Dateien verwendet werden können.

0
Charles Stewart