Wie kann ich ein optisches Laufwerk so freigeben, dass der Client denkt, es sei ein lokales Laufwerk?

10

Ich bin in einer ehrlich gesagt lächerlichen Situation, in der mein Desktop zwei optische Laufwerke hat und mein Media Center keine (noch Platz für eine). Bevor ich etwas so Extremes wie den Kauf eines externen optischen Laufwerks in Betracht ziehe, möchte ich prüfen, ob es eine Möglichkeit gibt, meine Laufwerke über das Netzwerk zu binden.

Beide Computer sind Ubuntu und verfügen bereits über eine NFS-Freigabe für den Zugriff auf Medien vom Desktop aus.

Der Grund, den ich frage (anstatt nur / media / cdrom zu exportieren), ist, dass eine gemountete NFS-Freigabe für den Remote-Computer nicht wie ein CD-ROM-Gerät aussieht . Dies ist für mich von Bedeutung, da XBMC das Laufwerk als solches erkennen muss, damit es die Discs automatisch und angemessen handhaben kann.

Jetzt weiß ich nicht, wie ein optisches Laufwerk für Ubuntu wie ein optisches Laufwerk aussieht . Wenn ich das wüsste, würde ich wahrscheinlich wissen, was ich tun muss. Ich vermute, irgendwann gibt es dort heiße udevAction.

Gibt es eine Möglichkeit, ein Block-Level-Gerät (z. B. /dev/sr0) gemeinsam zu nutzen, damit beide Computer es separat montieren können? Ich habe das Gefühl, ich stürze in den Kaninchenbau und sehe all diese massiv überentwickelten Lösungen wie iSCSI und Passthrough-Virtualisierung taucht vor mir auf ... Sicher gibt es eine einfache Möglichkeit, ein paar Laufwerksmodi zwischen zwei Ubuntu-Computern zu teilen!

Oli
quelle
Ich weiß nicht, ob dies ausreicht: thegeekstuff.com/2009/02/… --- Ich weiß nicht, ob es das ioctlfür die DVD benötigte Special exportiert . Ich habe es vor Jahren für eine schlecht durchdachte Idee verwendet, über das Netz zu tauschen, und dann bis jetzt vergessen ... (besserer Link: linux-mag.com/id/7118 )
Rmano
Die 2 Methoden, die ich erfolgreich verwendet habe, um ähnliche Dinge zu tun, sind NFS und Samba, aber angesichts Ihres Vertreters gehe ich davon aus, dass Sie sicher über NFS Bescheid wissen und dies möglicherweise über Samba tun. LMK, wenn Sie weitere Hilfe benötigen.
Slm
@slm Ja, es gibt bereits NFS zwischen den beiden Computern. Ich habe die CD /media/cdromzu nfs und montierte sie am anderen Ende als /media/cdrom(und ich kann die Dateien sehen) , aber XBMC ist keine Änderung der Medien Erfassen (er nicht glaubt , dass die einhängepunkt ist eine DVD). Mache ich etwas dummes
Oli
@Oli - OK, sieh dir mein A an und lass es mich wissen, wenn du danach suchst. Die andere Methode, die ich verwendet habe, besteht übrigens darin, eine ISO der DVD zu erstellen, diese über NFS freizugeben und dann mount -o looplokal auf anderen Computern.
Slm

Antworten:

9

Ich denke, Sie können möglicherweise mit Network Block Devices (NBD) das erreichen, was Sie wollen. Auf der Wikipedia-Seite zu diesem Thema wird ein Tool namens genannt nbd. Es besteht aus einer Client- und einer Serverkomponente.

Beispiel

In diesem Szenario richte ich eine CD-ROM auf meinem Fedora 19-Laptop (Server) ein und teile sie an ein Ubuntu 12.10-System (Client) weiter.

Installation
$ apt-cache search ^nbd-
nbd-client - Network Block Device protocol - client
nbd-server - Network Block Device protocol - server

$ sudo apt-get install nbd-server nbd-client
eine CD teilen

Zurück auf dem Server (Fedodra 19) mache ich etwas Ähnliches mit dem Paketmanager YUM. Sobald der Vorgang abgeschlossen ist, lege ich eine CD ein und führe diesen Befehl aus, um sie als Blockgerät freizugeben:

$ sudo nbd-server 2000 /dev/sr0

** (process:29516): WARNING **: Specifying an export on the command line is deprecated.

** (process:29516): WARNING **: Please use a configuration file instead.
$

Eine schnelle Überprüfung, um festzustellen, ob es läuft:

$ ps -eaf | grep nbd
root     29517     1  0 12:02 ?        00:00:00 nbd-server 2000 /dev/sr0
root     29519 29071  0 12:02 pts/6    00:00:00 grep --color=auto nbd
CD einhängen

Nun zurück auf dem Ubuntu-Client müssen wir uns wie folgt mit dem nbd-serverusing verbinden nbd-client:

$ sudo nbd-client greeneggs 2000 /dev/nbd0
Negotiation: ..size = 643MB
bs=1024, sz=674983936 bytes

Wir können bestätigen, dass es jetzt ein Blockgerät auf dem Ubuntu-System gibt, indem wir lsblk:

$ sudo lsblk -l
NAME                 MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                    8:0    0 465.8G  0 disk 
sda1                   8:1    0   243M  0 part /boot
sda2                   8:2    0     1K  0 part 
sda5                   8:5    0 465.5G  0 part 
ubuntu-root (dm-0)   252:0    0 461.7G  0 lvm  /
ubuntu-swap_1 (dm-1) 252:1    0   3.8G  0 lvm  [SWAP]
sr0                   11:0    1 654.8M  0 rom  
nbd0                  43:0    0   643M  1 disk 
nbd0p1                43:1    0   643M  1 part 

Und jetzt montieren wir es:

$ sudo mount /dev/nbd0p1 /mnt/
mount: block device /dev/nbd0p1 is write-protected, mounting read-only
$
hat es funktioniert?

Die Spannung bringt mich um und wir haben Abheben:

$ sudo ls /mnt/
EFI  GPL  isolinux  LiveOS

Es gibt den Inhalt einer LiveCD von CentOS, die ich in den Fedora 19-Laptop gemountet habe und die ich als Blockgerät des Netzwerks unter Ubuntu mounten konnte.

Autoplaying & Automounting?

Im obigen Setup musste ich die DVD manuell mounten.

Bei der Untersuchung der Plausibilität, ob dieser Ansatz sofort mit Autoplaying und Automounting funktioniert, funktioniert Ubuntus Autoplay nicht, sondern mit dem nbd-clientund nbd-serverblieb auf, als ich die Festplatte auswarf. Als ich die DVD wieder mounteinlegte, konnte ich den Befehl unter Ubuntu ausführen , wodurch die DVD wieder einwandfrei montiert wurde.

Ich würde also davon ausgehen, dass Sie eine UDEV-Regel in Ubuntu einfügen können, um diese Änderung zu erkennen und die automatische Bereitstellung / automatische Wiedergabe automatisch durchzuführen. Ich werde nicht alles ausprobieren, aber ich sehe nichts, was mich glauben lassen würde, dass es nicht funktionieren wird.

slm
quelle
1
Hervorragende Anleitung! Es ist nicht perfekt: Meine Software kann immer noch erkennen, dass es sich nicht um ein tatsächliches Laufwerk handelt. Ich vermute, es ioctlwird nicht perfekt gehandhabt. Aber ich war in der Lage , diese Arbeit auf zwei archlinux Maschinen mit machen Null Schluckauf! (Archlinux installierte Client und Server zusammen als 'nbd'.)
Eingeschränktes Sühnopfer
3

Diese Methode verwendet ebenfalls NBD, verwendet jedoch stattdessen die neue Stilkonfiguration. Die einzigen Vorteile sind, dass Sie den Server nicht manuell starten müssen und keine hässliche Abwertungswarnung erhalten.

Bearbeiten Sie nach der Installation der Pakete nbd-serverund nbd-clientdie Konfigurationsdatei auf dem Server ( /etc/nbd-server/config) und stellen Sie sicher, dass sie ungefähr so ​​aussieht:

[generic]
# If you want to run everything as root rather than the nbd user, you
# may either say "root" in the two following lines, or remove them
# altogether. Do not remove the [generic] section, however.
    user = nbd
    group = cdrom
    includedir = /etc/nbd-server/conf.d
    allowlist = true

# What follows are export definitions. You may create as much of them as
# you want, but the section header has to be unique.

[dvd]
    exportname = /dev/sr0
    readonly = true

Hinweis: Die [dvd]obige Beschriftung ist eine Abschnittsüberschrift und kann ein beliebiges Wort in eckigen Klammern sein. Es wird verwendet, um diese bestimmte Freigabe zu identifizieren. Stellen Sie daher sicher, dass Sie einen Namen verwenden, der einfach zu verwenden und offensichtlich ist.

Starten Sie nach dem Speichern der Änderungen an der Konfigurationsdatei den nbd-Server oder starten Sie ihn neu (Beispiel für einen Neustart):

sudo service nbd-server restart

Stellen Sie dann auf dem Clientcomputer mit dem folgenden Befehl eine Verbindung zum Server her:

sudo nbd-client -N dvd hostname /dev/nbd0

Hinweis: Ersetzen Sie ihn dvddurch den Namen, den Sie in der obigen Serverkonfiguration verwendet haben, und hostnamedurch den Hostnamen des Servercomputers.

Schließlich geht es nur noch darum, das neue gemeinsam genutzte Blockgerät zu mounten:

sudo mount /dev/nbd0 /mnt/
Devius
quelle
Wenn Sie immer wieder bekommen, Negotiation: ..Error: Server closed connection Exiting.kommentieren Sie beide userund groupZeilen ein /etc/nbd-server/config. Dies macht Lauf nbd-serverunter root, der Zugriff auf Ihre/dev/sr0
Petr Újezdský