Mounten Sie eine ISO virtuell mit dem Gerät / dev / sr0

7

Ich mache eine Studie darüber, wie CD-ROM virtuell gemountet werden kann, und alles, was ich herausfinden konnte, war das Mounten mit Loop-Geräten.

mount -o loop disk1.iso /mount-point

Das ist ziemlich einfach.

Ich verstehe, dass dies /dev/sr0ein Blockgerät ist und auf einen Puffer im Kernel verweist, und der Kernel-Gerätetreiber legt das Dateisystem (oder was auch immer ich nicht sicher bin) in diesen Puffer und wenn wir es verwenden mount, hängt es das Dateisystem an dem angegebenen Einhängepunkt an .

Ich frage mich jedoch, ob wir eine ISO unserer Wahl (z. B. disk1.iso) mithilfe eines SCSI-CD-ROM-Geräts /dev/sr0(ohne Änderungen im Kernel) bereitstellen können, wie dies in VMware und Virtualbox der Fall ist, wo wir die ISO angeben und automatisch a emulieren können CD-ROM-Hardware und ISO können mit /dev/sr0Gerät gemountet werden ?

Das Hauptproblem, das ich hier sehe, ist, wie /dev/sr0/mit der ISO verbunden wird?

Tejendra
quelle
1
Wie würden Sie dem Betriebssystem mitteilen, dass / dev / sr0 auf eine bestimmte ISO-Datei verweist?
Anthon
@Anthon ja das ist es, was ich mich frage, wie wir die ISO zu / dev / sr0
Tejendra
Das ist eine schlechte Idee ... lass udev (oder deinen Lieblings-Kernel-Helfer) mit Sachen in / dev umgehen; man könnte es aber immer symlinken ... es ist doch * nix ... alles ist eine datei.
SailorCire
Etwas, an das ich gerade gedacht habe ... den ALTEN Befehl nachschlagen mknod.
SailorCire
1
Wenn Sie die Anforderung haben, dass nichts im Kernel geändert werden kann und die Verknüpfung von / dev / sr0 mit / dev / loop0 nicht akzeptabel ist, können Sie meines Erachtens nur ein externes USB-Hardwaregerät bereitstellen, das a emuliert CD-ROM-Laufwerk. Es gibt spezielle Hardwarekomponenten, die dies tun können, wie z. B. KVM-Switches sowie iLO-Module auf einigen Systemen, mit denen Sie ISO-Images über das Netzwerk bereitstellen können. Dies kann jedoch möglicherweise mit einem anderen Computer mit lokalem Festplattenspeicher durchgeführt werden, der ISO-Images enthält .
Mark Plotnick

Antworten:

5

Die Sache hier ist, dass /dev/sr0mit einem Kernel-Gerätetreiber verbunden ist. Dieser Gerätetreiber ermöglicht den Zugriff auf eine physische CD-ROM, sofern diese über diesen Knoten verfügbar ist. VMWare und VirtualBox emulieren Hardware, wie Sie bereits erwähnt haben, und daher glauben der Kernel und der Gerätetreiber, dass sie mit Hardware kommunizieren.

Der /dev/sr0verweist nicht direkt auf einen bestimmten Puffer, sondern bietet eine Schnittstelle zur Blockgeräteschnittstelle, über die Userspace-Prozesse auf den Inhalt des Hardwaregeräts zugreifen können.

Wenn Sie ein Image als Blockgerät verfügbar machen möchten, besteht Ihre einzige Wahl (neben Virtualisierung und Emulationshardware) darin, Loop-Geräte mit losetup... zu verwenden oder einen eigenen Ersatzgerätetreiber zu schreiben. Ich gehe jedoch davon aus, dass dies keine praktikable Option ist zur Zeit.

Wenn Sie das Bild zur Verfügung stellen mögen , wie /dev/sr0(reden wir über einige Software fälscht aus , den Zugriff auf ein CD - ROM an dieser Stelle verlangt?) , Dann können Sie diese Datei zB bewegen /dev/sr0.movedund Symlink dann die entsprechenden /dev/loopXzu /dev/sr0. Wenn die betreffende Software spezielle Befehle ausführt, die nur für CD-ROM-Geräte gelten, funktioniert dies natürlich nicht. Sonst sollte es kein Problem sein.

wurtel
quelle
aber in symbolischer Verknüpfung wird die Zieldatei erstellt, während in unserem System / dev / sr0 bereits vorhanden ist? Und Sie schreiben, ich möchte den Auswurfbefehl verwenden, der wiederum nicht funktioniert, da er schließlich auf dem verknüpften Gerät ausgeführt wird
Tejendra
Haben Sie den Teil über das Verschieben des Geräts unter einen anderen Namen verpasst (damit Sie es anschließend wieder verschieben können)? Sie können das vorhandene nicht /dev/sr0für Ihre Zwecke verwenden! Sie benötigen ein Loop-Gerät. Wenn Sie darauf bestehen, dass das Bild verfügbar /dev/sr0ist, ist dies der einzige Weg.
Wurtel
@Tejendra Was erwarten Sie, wenn Sie den Auswurfbefehl auf einem Gerät ausführen, das eigentlich keine Disc ist? Was kann es möglicherweise nützen?
Dieses Ding sieht genauso aus, wie es ohnehin nur eine andere Möglichkeit ist, Loopmount zu verwenden. Ich denke, der einzig mögliche Ausweg besteht darin, Loopmount zu verwenden, da die Verknüpfung von / dev / sr0 mit dem Loop-Gerät nur ein Gefühl für die Verwendung von / dev / sr0 vermittelt, aber es dient nicht dem Hauptzweck.
Tejendra
@ WumpusQ.Wumbley Ich wollte eigentlich nur die CD-ROM auswerfen, wusste aber nicht, dass es irgendwann versuchen wird, die Hauptdatei auszuwerfen, die Loop-Gerät ist
Tejendra
2

Wenn Sie cdemu anstelle des Loop-Mount verwenden, wird der gewünschte Effekt erzielt. Es emuliert ein CD-ROM-Gerät. Wobei als Montage nur Zugriff auf die Dateien gewährt. Es kann auch zum Mounten von Cue / Bin-Dateien und anderen Bildtypen verwendet werden. Dies gibt die Möglichkeit, Bilder mit mehr als einer Spur oder Daten- / Musikspurkombinationen zu mounten.

krj
quelle
Ich brauche Automount, wenn ich ein Image auf cdemu mounte. Wenn ich zum Beispiel eine Image-Datei mit cdemu mounte, brauche ich das von cdemu verwendete / dev / sr0, mount on / cdrom. Für Spiele mit Daten / Musik funktioniert das Spiel.
Inukaze