Ich verstehe, was Mounten unter Linux ist, und ich verstehe Gerätedateien. Allerdings verstehe ich nicht, WARUM wir montieren müssen.
Zum Beispiel, wie in der akzeptierten Antwort auf diese Frage erklärt , mit diesem Befehl:
mount /dev/cdrom /media/cdrom
Wir mounten das CD-ROM-Gerät /media/cdrom
und sind schließlich in der Lage, mit dem folgenden Befehl auf die Dateien der CD-ROM zuzugreifen
ls /media/cdrom
Daraufhin wird der Inhalt der CD-ROM aufgelistet.
Warum überspringen Sie die Montage nicht und gehen Sie wie folgt vor?
ls /dev/cdrom
Und lassen Sie den Inhalt der CD-ROM auflisten. Ich erwarte, dass eine der Antworten lautet : " So ist Linux aufgebaut ". Aber wenn ja, warum wurde es dann so entworfen? Warum nicht /dev/cdrom
direkt auf das Verzeichnis zugreifen ? Was ist der eigentliche Zweck der Montage?
mount -t umsdos
zum Mounten verwenden, Sie haben alle Linux-Berechtigungen, -Besitzverhältnisse, -Sonderdateien, -FIFOS usw. Wenn Siemount -t vfat
sich wie eine einfache Windows-Partition verhalten.Why not access the /dev/cdrom directory directly?
Weil es kein Verzeichnis ist.Antworten:
Ein Grund dafür ist, dass der Zugriff auf Blockebene eine etwas niedrigere Ebene ist, als
ls
dies möglich wäre./dev/cdrom
oderdev/sda1
Ihr CD-ROM-Laufwerk bzw. Partition 1 Ihrer Festplatte, aber sie implementieren nicht ISO 9660 / ext4 - sie sind nur RAW-Zeiger auf Geräte, die als Gerätedateien bezeichnet werden .Mount entscheidet unter anderem darüber, wie dieser unformatierte Zugriff verwendet wird - welche Dateisystemlogik-, Treiber- und Kernelmodule
ls /mnt/cdrom
die Lese- / Schreibvorgänge verwalten oder in welche Blöcke übersetzt werden müssen und wie deren Inhalt zu interpretieren ist Blöcke in Dinge wiefile.txt
.In anderen Fällen kann dieser Zugriff auf niedriger Ebene ausreichend sein. Ich habe gerade von seriellen Anschlüssen, 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 genommen die ext4-Logik neu implementieren müsste, die unter anderem Folgendes beinhalten könnte: Suchen Sie die Datei-Inodes, und suchen Sie die Speicherblöcke, lesen Sie den vollständigen Block, nehmen Sie meine Änderungen vor, schreiben Sie die vollständigen Blöcke und aktualisieren Sie dann (möglicherweise) den Inode, oder schreiben Sie dies stattdessen alles in das Journal - viel zu schwierig.
Eine Möglichkeit, dies selbst zu sehen, besteht darin, es einfach auszuprobieren:
/dev
ist ein Verzeichnis, und Sie könnencd
undls
alles, was Sie mögen./dev/sda1
ist kein Verzeichnis; Es ist ein spezieller Dateityp, den der Kernel als "Handle" für dieses Gerät anbietet.Weitere Informationen finden Sie im Wikipedia-Eintrag zu Gerätedateien .
quelle
/dev/sda1
. Beachten Sie, dass einige Tools direkt mit Raw-Datenträgern interagieren, z. B.swapon/swapoff
unddd
.cat >/dev/sda1
nach Herzenslust und Linux wird Sie nicht aufhalten. (Selbstverständlich würde dies das Dateisystem vollständig beschädigen.)Grundsätzlich und um es einfach auszudrücken, muss das Betriebssystem wissen, wie auf die Dateien auf diesem Gerät zugegriffen werden kann.
mount
gibt nicht nur "Ihnen Zugriff auf die Dateien", sondern teilt dem Betriebssystem mit, über welches Dateisystem das Laufwerk verfügt, ob es schreibgeschützt oder schreibgeschützt ist usw./dev/cdrom
ist ein Low-Level - Gerät, wissen die Funktionen des Betriebssystems würde nicht , wie sie für den Zugriff auf ... stellen Sie sich (auch eine Audio - CD) in eine bizarr formatiert CD - ROM setzen, wie würdenls
auf welche Dateien (falls vorhanden) gibt es sagen die cd-rom ohne es zuerst "einzuhängen"?Beachten Sie, dass dies in vielen Betriebssystemen automatisch geschieht (bei einigen Distributionen und Grafikschnittstellen sogar unter Linux). Dies bedeutet jedoch nicht, dass andere Betriebssysteme die Laufwerke nicht "mounten".
quelle
Für die Konsistenz
Stellen Sie sich vor, Sie haben einige Partitionen auf der ersten Festplatte in Ihrem System. Zum Beispiel
/dev/sda2
. Sie stellen später fest, dass das Laufwerk nicht groß genug ist. Kaufen Sie ein zweites und fügen Sie es dem System hinzu. Plötzlich wird das/dev/sda
und Ihr aktuelles Laufwerk wird/dev/sdb
. Ihre Partition ist jetzt/dev/sdb2
.Wenn Sie Ihr vorgeschlagenes System verwenden, müssen Sie alle Skripts, 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 bearbeiten
/etc/fstab
, um Ihrem System mitzuteilen, dass (zum Beispiel)/media/backup
jetzt/dev/sdb2
stattdessen ist, aber das ist nur eine Bearbeitung.Beachten Sie, dass moderne Systeme noch einfacher sind. Anstatt auf das Gerät als
/dev/sda2
oder zu verweisen/dev/sdb2
, weisen sieUUIDS
ähnlichec5845b43-fe98-499a-bf31-4eccae14261b
oder freundlichere Bezeichnungen auf, z. B.backup
als Referenz für das Gerät bei der Montage. Auf diese Weise ändert sich der Gerätename nicht, wenn ein neues Gerät hinzugefügt wird, wodurch die Verwaltung noch einfacher wird:Zur sicherheit
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 montiert ist, aber nicht, wenn es verwendet wird (es sei denn, Sie möchten Daten verlieren). Wenn Sie ein Windows-Benutzer sind (waren), erinnern Sie sich an das kleine grüne Symbol im Infobereich, das Sie darüber informiert, dass das Entfernen eines USB-Sticks sicher ist? Das ist Windows-Montage und Demontage des Sticks für Sie. Das Prinzip ist also nicht nur ein Unix / Linux-Prinzip.
quelle
Ich würde es historische Gründe nennen. Nicht, dass die anderen Antworten falsch wären, aber die Geschichte hat ein bisschen mehr zu bieten.
Windows vergleichen: Windows wurde als Einzelcomputer-Einzelbenutzer-Betriebssystem gestartet. Dieser einzelne Computer hatte wahrscheinlich ein Diskettenlaufwerk und eine Festplatte, keine Netzwerkverbindung, kein USB, kein Nichts. (Windows 3.11 verfügte über native Netzwerkfunktionen, Windows 3.1 nicht .)
Die Art der Einstellung, in die Windows eingebaut wurde, war so einfach, dass man sich nichts ausdenken musste: Einfach jedes Mal alles (alle zwei Geräte) automatisch einbinden, es gibt nicht viele Dinge, die schief gehen könnten.
Im Gegensatz dazu sollte Unix von Anfang an in Servernetzwerken mit mehreren Benutzern ausgeführt werden.
Eine der Entscheidungen beim Unix-Design war, dass das Dateisystem für die Endbenutzer als eine einzige, einheitliche Einheit angezeigt wird, unabhängig davon, auf wie viele Computer die physischen Festplatten verteilt sind, unabhängig davon, welche Art von Festplatte und welche von Dutzenden von Computern der Benutzer würde darauf zugreifen. Der logische Pfad zu den Dateien des Benutzers würde derselbe bleiben, selbst wenn sich der physische Speicherort dieser Dateien über Nacht geändert hätte, z. B. aufgrund von Serverwartung.
Sie abstrahierten das logische Dateisystem und die Pfade zu Dateien von den physischen Geräten, auf denen diese Dateien gespeichert waren. Angenommen, Server A ist normalerweise das Hosting / Home-System, aber Server A muss gewartet werden: Hängen Sie Server A einfach aus und stellen Sie Backup-Server B stattdessen auf / home bereit, und niemand außer den Administratoren würde dies überhaupt bemerken.
(Im Gegensatz zur Windows-Konvention, unterschiedlichen physischen Geräten unterschiedliche Namen zuzuweisen - C :, D: usw. -, die gegen die von Unix angestrebte Transparenz wirkt.)
In einer solchen 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 müssen in der Lage sein, anzugeben, was wo und wann bereitgestellt wird, um z. B. einen Computer kontrolliert herunterzufahren, während ein anderer Computer transparent das Hosten derselben Dateien übernimmt.
Aus historischer Sicht ist dies der Grund: Windows und Unix stammten aus verschiedenen Bereichen. Man könnte es einen kulturellen Unterschied nennen, wenn man möchte:
In jüngerer Zeit rücken die Betriebssysteme näher zusammen:
Es ist jedoch immer noch leicht zu sagen, dass die beiden das Ergebnis unterschiedlicher Traditionen sind.
quelle
Die derzeitige Anordnung bietet mehrere Vorteile. Sie können in die Vorteile von Blockspezialdateien und die Vorteile von Mountpunkten eingeteilt werden.
Spezielle Dateien sind Dateien, die Geräte darstellen. Eine der Ideen, auf denen Unix aufbaut, 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, Partitionieren oder Formatieren einer Festplatte nur eine Dateioperation. Es spielt keine Rolle, ob es sich bei der Festplatte um mfm, ide, scsi, fiberchanel oder etwas anderem handelt, es handelt sich lediglich um eine Datei.
Auf der anderen Seite möchten Sie möglicherweise nicht die gesamte Festplatte oder Partition, sondern nur die Dateien, 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 einem Verzeichnis ablegen. In meinen Slackware-Tagen, als eine gute Festplatte ein paar hundert MB groß war, war es üblich, die CD als / usr und die Festplatte als /, / usr / local zu verwenden und zu tauschen. Oder Sie könnten / auf einem Laufwerk und / nach Hause auf einem anderen setzen.
Jetzt ist mir aufgefallen, dass Sie erwähnt haben, dass Sie Ihre CD auf / media / cdrom mounten. Dies ist praktisch für Computer mit nur einem CD-ROM-Laufwerk, aber was ist, wenn Sie mehr als ein Laufwerk haben? wo solltest du den zweiten 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 war.
quelle
mount
komplett überspringt und einfach/dev/cd0, /dev/cd2, /dev/sda1, /dev/sda2
direkt mit ihm interagiert - jeder hat bereits ein bestimmtes 'Verzeichnis'.dd if=/file of=/dev/sda2 bs=4096 skip=382765832 count=84756
geschweige denn die zugehörige Aktualisierung von Inode / FAT / Journal.Der Fragentitel fragt: Warum müssen wir auf 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, sondern können dies automatisch veranlassen. Dies wird von Linux-Distributionen bereits für die meisten Geräte durchgeführt, genau wie bei Windows und Mac.
Das wollten Sie also wahrscheinlich nicht fragen.
Eine zweite Interpretation: Warum müssen wir manchmal explizite
mount
Befehle ausgeben , um Dateisysteme unter Linux verfügbar zu machen? Warum lässt du das Betriebssystem es nicht immer für uns tun und verbirgst es vor dem Benutzer?Dies ist die Frage, die ich im Fragentext lese, wenn Sie fragen:
Überspringen Sie die Montage, und führen Sie die folgenden Schritte aus
und ist der Inhalt der CD-ROM aufgeführt?
Vermutlich meinst du: Warum nicht einfach dieses Kommando was machen lassen
macht jetzt?
In diesem Fall
/dev/cdrom
wäre es 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?
Wann immer Sie eine CD-ROM oder ein anderes Gerät verwenden, auf dem Dateien gespeichert sind, wird eine Software verwendet, die alles, was sich auf Ihrer CD-ROM befindet, als Verzeichnisbaum von Dateien interpretiert. Es wird immer dann aufgerufen, wenn Sie
ls
einen Befehl oder eine andere 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 Siemount
ein Dateisystem verwenden, teilen Sie dem System mit, welcher Dateisystemtreiber für das Gerät verwendet werden soll. Ob Sie dies explizit mit einemmount
Befehl, oder überlassen Sie es dem Betriebssystem, um automatisch ausgeführt zu werden, es muss ausgeführt werden, und natürlich muss die Dateisystem-Treibersoftware an erster Stelle vorhanden sein.Wie erledigt ein Dateisystemtreiber seine Arbeit? Die Antwort: Das geschieht durch Lesen und Schreiben in die Gerätedatei. Warum? Die Antwort, wie Sie bereits sagten: Unix wurde so konzipiert. In 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 Operationen auf der Gerätedatei implementieren. Auf diese Weise muss übergeordnete Software (z. B. ein Dateisystemtreiber) nicht so viel über die interne Funktionsweise einzelner Geräte wissen. Die Gerätetreiber auf niedriger Ebene und die Dateisystemtreiber können von verschiedenen Personen getrennt geschrieben werden, sofern sie sich auf eine gemeinsame Art der Schnittstelle einigen, und für diese Zwecke sind die Gerätedateien bestimmt.
Daher benötigen Dateisystemtreiber die Gerätedateien.
Aber warum sehen wir, normale Benutzer, die Gerätedateien? Die Antwort ist, dass Unix für die Verwendung durch Programmierer von Betriebssystemen entwickelt wurde. Es wurde entwickelt, um Benutzern das Schreiben von Gerätetreibern und Dateisystemtreibern zu ermöglichen. So werden sie geschrieben.
Gleiches gilt für Linux: Sie können Ihren eigenen Dateisystemtreiber (oder Gerätetreiber) schreiben, installieren und dann verwenden. Es macht Linux (oder eine 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 zum Implementieren 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.
quelle
Viele Datenbank-Engines können direkt mit Raw-Festplatten oder Partitionen arbeiten. Zum Beispiel MySQL:
http://dev.mysql.com/doc/refman/5.7/de/innodb-raw-devices.html
Dies vermeidet den Aufwand beim Durchlaufen von Dateisystemtreibern, wenn die DB-Engine nur eine große Datei benötigt, die die Festplatte füllt.
quelle
Denn es
/dev/cdrom
ist ein Gerät, wohingegen/media/cdrom
es ein Dateisystem ist . Sie müssen erstere auf letzteren mounten, um auf die Dateien auf der CD-ROM zugreifen zu können.Ihr Betriebssystem hängt das Root- und Benutzer-Dateisystem bereits automatisch von Ihrem physischen Festplattengerät ein, wenn Sie Ihren Computer starten. Dies fügt lediglich weitere zu verwendende Dateisysteme hinzu.
Alle Betriebssysteme tun dies - einige (wie Windows, wenn es eine CD-ROM anhängt
D:
) tun dies jedoch transparent. Linux überlässt es Ihnen, damit Sie mehr Kontrolle über den Prozess haben.quelle
/dev/cdrom
ist eine Gerätedatei (mit speziellen Funktionen, die es uns ermöglichen, auf einfache Weise eine E / A-Kommunikation vom / zum zugeordneten Gerät herzustellen)./media/cdrom
ist ein Verzeichnis, aber im Grunde ist es eine andere Datei (denken Sie daran, dass unter Linux alles eine Datei ist, einschließlich der Verzeichnisse). Jetzt haben wirmount
eine spezielle Möglichkeit, den Inhalt der Gerätedatei als Dateisystem anzuzeigen. Mein Verständnis des letzten Gefühls beruht auf dem Lesen der obigen Antworten.Dies liegt daran, dass bei vielen Medien für Desktop- und Laptop-Benutzeroberflächen Unklarheiten darüber bestehen, was zu tun ist, wenn die Medien eingelegt werden, da das Einlegen der Festplatte in die physische Box, mit der der Benutzer interagiert, nicht anders ist , setzen Sie es in ein Gerät neben dem Computer ein, der über eine Netzwerkverbindung verfügt.
Grundsätzlich muss die Benutzeroberfläche für Medien die beiden Arten von potenziellen Mount-Ereignissen ähnlich behandeln, und es gibt keine gute Möglichkeit für Computer, Netzwerkmounts so intuitiv wie Netzwerkmounts mit anderen Benutzeroberflächen für Computer zu handhaben. B. Smartphones, Tablets und tragbare Computer, in die keine physischen Medien eingelegt werden können. (Beachten Sie, wie schrecklich das iPhone-Interface für den Wechsel von SIM-Karten ist, die eine Art von physischen Medien haben, die iOS-Geräte in sie eingelegt haben.
Beachten Sie auch, dass bei anderen gängigen Ansätzen 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)) dieselben Probleme auftreten und verwenden Sie zusätzliche GUI-Dialogfelder, um mögliche Verwirrungen zu beseitigen (z. B. ist Windows 8 normalerweise so konfiguriert, dass bei jeder neu eingelegten CD gefragt wird, ob sie als Dateisystem, Musikmedium oder gegebenenfalls als Sammlung von MP4-Videos bereitgestellt werden soll ). Es gibt keinen Grund, warum eines dieser Benutzerdialogfelder nicht mit Linux oder anderen UNIX-Betriebssystemen verwendet werden kann.
quelle