Hier ist die Situation. Ich habe ein Videogerät /dev/video0
auf einem VMware-Server und möchte über eine virtuelle Maschine auf dieses Gerät zugreifen. Aus irgendeinem Grund kann ich das Gerät jedoch nicht direkt mit der VM verbinden, es muss jedoch mit dem Host verbunden sein.
Kann ich ein Gerät unter /dev
Verwendung von NFS, Samba, sshfs oder einem anderen Protokoll zwischen zwei Hosts freigeben, da unter Unix-Philosophie eigentlich alles nur eine Datei ist , damit ein Linux auf einem Server auf Geräte auf einem anderen Server zugreifen kann?
Antworten:
Nein.
Sie können eine Gerätedatei über NFS oder ein anderes Netzwerkdateisystem exportieren. Die Bedeutung der Gerätedatei hängt jedoch von dem Computer ab, auf dem Sie sie öffnen. Wenn Sie
/dev/video0
über NFS von einem Server-Computer auf einen Client-Computer exportieren , sieht der Client-Computer nur "Zeichengerät 81: 0" und interpretiert es als sein eigenes Videoaufnahmegerät. Der Client-Computer muss nicht einmal dieselbe Gerätenummernzuweisung wie der Server haben. Beispielsweise würde ein OpenBSD-Client dieselbe Datei wie der Pseudo-Terminal-Treiber sehen , da sich char 81: 0 unter OpenBSD befindet.Was Sie verlangen, wäre sehr schön, aber auch sehr schwer. Jede Anfrage auf dem Client müsste an den Server weitergeleitet werden und umgekehrt. Es müsste eine spezifische Unterstützung für einzelne Fahrer geben. Beispielsweise verlassen sich einige Treiber auf den gemeinsamen Speicher zwischen dem Prozess und dem Kernel, und eine transparente Unterstützung im gesamten Netzwerk wäre in vielen Fällen schwierig und unerschwinglich teuer. Ich weiß nicht, ob der Videoaufnahmetreiber gemeinsam genutzten Speicher verwendet, aber da er wahrscheinlich große Datenmengen asynchron überträgt, erwarte ich dies.
Linux bietet spezielle Unterstützung für Netzwerkblockgeräte . Sie sind nicht auf ein Netzwerkdateisystem angewiesen. Die Gerätedatei ist nur auf dem Client vorhanden, und ein Dämon auf dem Server emuliert ein physisches Blockgerät (es leitet die Vorgänge möglicherweise von und zu einem realen physischen Gerät weiter, liest und schreibt jedoch häufig in eine Image-Datei).
Sie sollten nach einer Lösung suchen, die speziell für die Videoaufnahme geeignet ist. Versuchen Sie, so viel datenintensiven Teil auf dem Computer auszuführen, an den das physische Gerät angeschlossen ist. Oder suchen Sie eine Lösung für eine virtuelle Maschine, die den direkten Zugriff auf das physische Gerät innerhalb der virtuellen Maschine unterstützt (ich weiß nicht, ob eine Host- / Gastlösung dies tut; Hypervisor-basierte Lösungen sind wahrscheinlicher).
quelle
dd
eine Festplatte ohne Verwendung eines Schraubendrehers auf eine andere Maschine zu übertragen.ssh root@othermachine cat /dev/sdb >/dev/sdc
cat
wichtigen Binärdaten nicht. Muss ein tief vergrabenes Trauma sein, an das ich mich nicht bewusst erinnere. Und nein, ich bin kein Hund; das ist es nicht.cat
wurde und auf jeden Fallcat
auf allen aktuellen Systemen funktioniert. GNU-Dienstprogramme (die unter Linux) haben Binärdaten immer korrekt behandelt, es war von Anfang an ein Entwurfsziel. Die Verwendung vondd
Binärdaten ist eine Gewohnheit, die aus den Tagen der Magnetbänder stammt. Auf modernen Linux-Systemen ist dies nicht nur eine unnötige Komplikation, sondern sogar langsamer .Zusätzlich zu Gilles Antwort - solange Sie nicht beabsichtigen, ioctls in einer Datei zu erstellen, handelt es sich lediglich um einen Stream. Also, wenn Sie vor Gast gelaufen sind
/ dev / fakevideo0 verhält sich wie ein Puffer. Wenn Sie also davon lesen, erhalten Sie einen Stream von der Kamera.
quelle
Dies beantwortet die Frage von OP nicht, aber es gibt dieses Tool namens netevent unter https://github.com/Blub/netevent , mit dem Sie ioctl-Geräte
/dev/input/event*
zwischen Computern freigeben können . Ich habe es persönlich selbst versucht und es hat bei mir funktioniert.quelle