Was ist der Unterschied zwischen mount und mount -o loop?

28

Ich habe eine ISO-Datei mit dem Namen ubuntu.iso.

Ich kann mountes mit dem Befehl: mount ubuntu.iso /mnt. Nach der Montage es, ich kann es aus dem outout des Befehls sehen df -h: /dev/loop0 825M 825M 0 100% /mnt.

Wenn ich jedoch den Befehl ausführe mount -o loop ubuntu.iso /mnt, erhalte ich das gleiche Ergebnis.

Wie ich weiß, können wir mit loop device die iso-Datei als Gerät aufrufen. Aus diesem Grund haben wir die Option hinzugefügt -o loop . Aber ich kann meine ISO-Datei auch dann aufrufen, wenn ich sie nur ausführe mount ubuntu.iso /mnt.

Also kann ich den Unterschied zwischen mountund nicht erkennen mount -o loop.

Yves
quelle
Außerdem ist es manchmal wichtig, dass mount das Loopback-Gerät nicht mit geeigneten Anpassungen einrichten kann. Beispiel: mount ubuntu.iso /mntEs wird kein schreibgeschütztes Loopback-Gerät eingerichtet und mount /image.squashfs /mntes wird kein DIO( losetup --direct-io=on) Loopback-Gerät eingerichtet.
Analphabet

Antworten:

46

Beide Versionen verwenden Loop-Geräte und führen zu demselben Ergebnis. Die Kurzfassung basiert auf der mountin den letzten Jahren hinzugefügten „Cleverness“ . mount -o loopweist mountausdrücklich an, ein Loop-Gerät zu verwenden; Es überlässt es dem Loop-Gerät selbst, nach mounteinem verfügbaren Gerät zu suchen, es einzurichten und dieses zu verwenden. (Sie können das Gerät angeben zu mit zB mount -o loop=/dev/loop1 .)

Die Cleverness ist, dass, wenn eine Datei zum Mounten mountangegeben wird, diese bei Bedarf automatisch über ein Loop-Gerät gemountet wird - dh , das Dateisystem ist nicht angegeben oder es libblkidwird nur auf Block-Geräten (und daher a) unterstützt loop device wird benötigt, um die Datei in ein Blockgerät zu übersetzen).

Der Loop-Geräteabschnitt der mountManpage enthält weitere Details.

Stephen Kitt
quelle
1
Vor nicht allzu langer Zeit gab es in mount auch keine Option "-o loop", und Sie müssten das Loop-Gerät manuell mit dem Befehl losetup erstellen.
Edheldil
@Edheldil das hängt von deiner Vorstellung von "vor langer Zeit" ab ;-). util-linux2.11 wurde mount -o loopim Jahr 2001 unterstützt, und ich denke, 2.10 hatte es auch, zumindest ein Jahr zuvor.
Stephen Kitt
Ja, aber haben die 2001 üblicherweise verwendeten Stable-Distributionen Util-Linux 2.11 bereits verwendet?
Rackandboneman
2
@rackandboneman Ich ging ein bisschen mehr graben, und es stellt sich heraus, dass die Unterstützung für -o loopirgendwann zwischen util-linux2.4 und 2.5j hinzugefügt wurde; Debian 1.1 hatte letzteres und wurde im Juni 1996 veröffentlicht. Diese Option ist also seit über zwanzig Jahren in Distributionen verfügbar.
Stephen Kitt
Ein Vorteil dieser Cleverness: Wenn / wenn die neue "Direct File Mount" -Funktion von XFS-Entwicklern (ohne die Notwendigkeit von Loop-Geräten) den Kernel erreicht, mountkann transparent auf diesen Mechanismus umgeschaltet werden (zumindest für die ersten 15 Minuten bis dahin) Es stellte sich heraus, dass jemandes Shellscript kaputt gegangen ist und jeder zu Loop-Geräten zurückkehren muss (im Gegensatz zu mount -o loopdenen , die immer noch explizit nach dem alten (aktuellen) Mechanismus fragen ).
Grawity
9

Das loopGerät wird hauptsächlich mit dem losteupBefehl gesteuert . So erhalten losetup -aSie einen Überblick über die verwendeten Loop-Geräte und angehängten Dateien. Der mountBefehl kann nur das Blockgerät mounten . Das Loop-Gerät kann das virtuelle Blockgerät aus einer Datei (Zeichengerät) erstellen.

Tatsächlich gibt es einen großen Unterschied zwischen diesen Befehlen, da auf älteren Linux-Systemen die Datei nicht als das richtige anzuhängende Gerät mounterkannt werden konnte, aber während der Zeit, in der der Befehl zum Anhängen mit vielen Funktionen ausgeführt wurde, kann sie dies nun selbst entscheiden Versuchen Sie, den Befehl losetup aufzurufen und das Ergebnis einzuhängen. Wenn Sie jedoch ein ganzes Disk-Image haben, das nicht im ISO-Format sondern z. B. mit MBR am Anfang vorliegt , konnte der Befehl mount es nicht erkennen, und Sie müssen die verwendbare Partition (z. B. mit dem Befehl) selbst finden und dann mit der vollständigen Option mount comman mounten wie :parted disk_image.raw unit B print

mount disk_image.raw /mntpoint/ -o loop,offset=${OFFSET_of_PARTITION}

In dieser Syntax wurde das Loop-Gerät nicht angegeben und es wird davon ausgegangen, dass das System das erste freie ( /dev/loop0, /dev/loop1usw.) auswählt. Zu den weiteren neuen Funktionen des Befehls mount gehört, dass Sie den Dateisystemtyp des bereitgestellten Block-Geräts nicht angeben müssen (in Ihrem Fall -t iso9660). wenn die Dateisystemunterstützung installiert wurde.

schweik
quelle
7

Es gibt keinen Unterschied zwischen mount ubuntu.iso /mntund mount -o loop ubuntu.iso /mnt.

Der erste wird transparent behandelt, als ob Sie den zweiten verwendet hätten.

Emmanuel Rosa
quelle