Wie kann ich ein Blockgerät über das Netzwerk als Blockgerät von einem Computer auf einen anderen laden?

40

Ist es möglich, ein Blockgerät wie eine DVD oder CD-ROM zu exportieren und es so zu gestalten, dass es auf einem anderen Computer als Blockgerät bereitgestellt werden kann?

ANMERKUNG: Ich bin nicht daran interessiert, dies mit NFS oder Samba zu tun. Ich möchte eigentlich, dass das optische Laufwerk als optisches Laufwerk auf einem Remotecomputer angezeigt wird.

slm
quelle

Antworten:

33

Ich denke, Sie könnten mit Network Block Devices (NBD) das erreichen, was Sie wollen. Wenn man sich die Wikipedia-Seite zum Thema ansieht, wird ein Tool namens erwähnt 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 auf ein Ubuntu 12.10-System (Client) aus.

installieren
$ 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
Teilen einer CD

Zurück auf dem Server (Fedodra 19) mache ich eine ähnliche Sache mit seinem Paketmanager YUM. Nach Abschluss 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 kurze Überprüfung, 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
Einhängen der CD

Nun zurück auf dem Ubuntu-Client müssen wir uns mit dem nbd-serverusing nbd-clientso verbinden. HINWEIS: der Name des NBD-Servers ist greeneggs in diesem Beispiel.

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

(Auf einigen Systemen - zB Fedora - muss man modprobe nbdzuerst.)

Wir können bestätigen, dass auf dem Ubuntu-System jetzt ein Block-Gerät vorhanden ist, indem wir Folgendes verwenden 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 Absprung:

$ sudo ls /mnt/
EFI  GPL  isolinux  LiveOS

Es gibt den Inhalt einer Live-CD von CentOS, die ich in den Fedora 19-Laptop eingehängt habe und die ich unter Ubuntu als Block-Gerät des Netzwerks einhängen konnte.

slm
quelle
Ich erhalte folgende Meldung: "WARNUNG Die Angabe eines Exports in der Befehlszeile ist veraltet. Verwenden Sie stattdessen eine Konfigurationsdatei." Version: 3.3
guettli
@guettli - danke für das feedback. Auf welcher Distribution war das?
slm
@sim openSUSE 13.1
guettli
Anmerkung: greeneggsIst der Hostname des Servers.
Devius
1
Beachten Sie, dass das Protokoll im alten Stil (dh die Verwendung eines Ports für jedes Gerät) für mehrere Versionen als veraltet markiert und in nbd 3.10 gelöscht wurde .
maxschlepzig
20

Eine Alternative zu nbd(falls Sie interessiert sind) ist die Verwendung von iSCSI. tgtdkann so konfiguriert werden, dass ein /devGerät als Sicherungsspeicher für einen bestimmten iSCSI-IQN verwendet wird.

Wenn Sie sich auf einem RHEL-System befinden, müssen Sie nur das Quellsystem installieren scsi-target-utilsund anschließend konfigurieren / starten tgtd. Die Konfiguration von tgtdkann mitmachen, aber Red Hat bietet viele verschiedene Beispiele für die verschiedenen Szenarien.

Zum Beispiel:

<target iqn.2008-09.com.example:server.target4>
    direct-store /dev/sdb      # Becomes LUN 1
    direct-store /dev/sdc      # Becomes LUN 2
    direct-store /dev/sdd      # Becomes LUN 3
    write-cache off
    vendor_id MyCompany Inc.
</target>

So starten Sie Fedora / RHEL:

# systemctl start tgtd.service
# firewall-cmd --add-service iscsi-target

Sie würden iscsi-initiator-utilsauf dem Client-System installieren und verwenden iscsiadm, um Ziele zu senden und sich dann bei den aufgelisteten Zielen anzumelden. Zum Beispiel:

# iscsiadm -m discovery -t sendtargets -p <remoteHost>
# iscsiadm -m node -T <Complete Target IQN> -l -p <remoteHost>

Die iSCSI-LUNs werden dann dem System als reguläre Blockgeräte angezeigt. Unter RHEL können Sie überprüfen, über ls -l /dev/disk/by-path | grep iscsiwelchen Transport ein bestimmtes Gerät übertragen wird. Sie können lediglich überprüfen , welcher Speicher über iSCSI übertragen wird. Der Pfad listet auch die IQN des Ziels auf, bei dem Sie sich oben angemeldet haben.

Wenn das iscsi-Gerät nicht mehr benötigt wird, kann es entfernt werden über:

# iscsiadm -m node -T <Complete Target IQN> -u -p <remoteHost>
Bratchley
quelle
2
Wenn Sie möchten, können Sie Ihr A auch zu diesem AU-Q hinzufügen. Das hat mich dazu veranlasst, dieses A
aufzuschreiben
Ich würde es tun, aber ich habe nicht wirklich ein Ubuntu-System zur Hand, um sicherzustellen, dass die Paketnamen gleich sind oder wenn die Konfigurationsbeispiele, auf die ich verwiesen habe, Upstream sind oder nur etwas, was Red Hat tut. Die Konfiguration selbst sollte jedoch identisch sein.
Bratchley
1
Joel, du bist der Beste ... kein Ubuntu-System 8-)
slm
1
War eigentlich einfacher einzurichten als NBD. Das Problem mit dem aktuellen NBD ist, dass die meisten Beispiele / Dokumentationen, die Sie über Google finden, die Konfiguration im alten Stil verwenden, wobei aktuelle Versionen die Unterstützung für diese Konfiguration entfernt haben. In Version <3.10 ist der Fehler möglicherweise auch schreibgeschützt .
maxschlepzig
9

Sie bevorzugen offensichtlich die SAN-Lösung. Neben dem bereits erwähnten iSCSI und NBD haben Sie auch den AoE (ATA over Ethernet) -Ansatz.

Das geht ganz einfach:

Auf der Servierseite müssen Sie

modprobe aoe
vbladed 0 0 eth0 /dev/sdc

Auf der Client-Seite

modprobe aoe
aoe-discover
aoe-stat
e0.0      1000.204GB       eth0 1024  up

Ihre Geräte sind in

ls -l /dev/etherd/
c-w--w----  1 root disk 152, 3 Mar 12 22:47 discover
brw-rw----  1 root disk 152, 0 Mar 12 22:47 e0.0
brw-rw----  1 root disk 152, 1 Mar 12 22:47 e0.0p1
cr--r-----  1 root disk 152, 2 Mar 12 22:47 err
c-w--w----  1 root disk 152, 6 Mar 12 22:47 flush
c-w--w----  1 root disk 152, 4 Mar 12 22:47 interfaces
c-w--w----  1 root disk 152, 5 Mar 12 22:47 revalidate

Wo e0.0ist dein /dev/sdcund e0.0.p1ist/dev/sdc1

dmesg auf dem Server:

[221384.454447] aoe: AoE v85 initialised.

dmesg Ausgabe auf Client:

[ 1923.225832] aoe: AoE v85 initialised.
[ 1923.226379] aoe: e0.0: setting 1024 byte data frames
[ 1923.226910] aoe: 38607725d8b1 e0.0 v4014 has 1953525168 sectors
[ 1923.653820]  etherd/e0.0: p1

Ziemlich einfach.

Zusätzliche Bemerkungen

  • vbladedist Teil des Pakets vbladeauf Fedora & Ubuntu, wahrscheinlich auch in anderen Distributionen.
  • aoe-discover& aoe-statsind ebenfalls Teil des Pakets aoetoolsauf Fedora & Ubuntu.
  • Das Gerät wird fdiskbeispielsweise als Blockgerät angezeigt /dev/etherd/e0.0.
  • Die Version vblade, die in den Repositorys F19 und F20 verfügbar ist, ist ziemlich veraltet, es ist Version 14. Auf der ATAoE-Projektseite ist Version 21 verfügbar. Für Fedora 19 x86_64 ist hier ein aktualisiertes RPM verfügbar .

quelle
Versucht, dies s / w Fedora und Ubuntu zu tun, es funktioniert nicht.
slm
Ich überprüfe normalerweise alles, bevor ich poste. F: Ist Aoe geladen? Haben Sie die richtigen Argumente angegeben? Auf empfänger: hat aoe den gegner gefunden? Was sagt dmesg?
Ich weiß, dass du es tust, ich habe nicht angedeutet, dass es nur falsch ist, dass es einige zusätzliche Schritte geben könnte. 8-)
slm
aber es gibt keine zusätzlichen schritte, das ist wirklich eine leichte aufgabe.
1
ROTFL, und hast du auch das Smartphone gezählt?
1

Obwohl diese Lösung funktioniert, wird sie nur als Methode vorgestellt, um TMWTDI zu veranschaulichen.

Für dieses Setup benötigen wir ein von Unix inspiriertes System zum Hosten des Blockgeräts und ein System mit einem Loopback-Blockgerät, damit das System es anzeigen kann. Linux wird für beide funktionieren.

Als nächstes brauchen wir ein dummes Netzwerk-Dateisystem (es darf keine Optimierungen des Datenspeichers vornehmen), wie Samba oder Webdav. Insbesondere NFS und AFS funktionieren nicht.

Platzieren Sie das Blockiergerät in einem Ordner, der exportiert wird. ( man mknodHilft.) Deaktivieren Sie ggf. die Block-Geräteprüfung. Mounten Sie das exportierte Dateisystem auf dem Client-Computer, erstellen Sie ein Loop-Gerät, indem Sie die importierte Datei als Backup-Speicher verwenden und mounten Sie sie wie gewohnt. ( losetupoder mount -o loop)

Wie und warum es funktioniert und warum die Leistung schlecht ist: Eine der Kernideen von Unix ist, dass alles eine Datei ist, daher sind Geräte nur Dateien, die etwas Besonderes sind (daher werden sie auch Spezialdateien genannt). Es gibt verschiedene Arten von speziellen Dateien, die mknod erzeugen kann, aber wir werden uns nur mit Blockgeräten befassen. Blockgeräte existieren im Dateisystem wie jede andere Datei und wie jede andere Datei besitzen sie Eigentümer, Berechtigungen, Inodes und Namen. Sie haben jedoch zwei Unterschiede: Sie speichern ihre Daten nicht im Dateisystem und sie verfügen über zusätzliche Funktionen, damit sie eingehängt werden können. Wenn der Dateiserver dumm genug ist, diese Unterschiede nicht zu berücksichtigen, können Sie sie ignorieren und als reguläre Dateien exportieren. Als Nächstes nimmt das Loop-Gerät eine normale Datei (lokal oder remote) und fügt die speziellen Eigenschaften und Funktionen hinzu, so dass Sie reguläre Dateien bereitstellen können, als wären sie Blockgeräte. Der große Nachteil ist die Leistung.

hildred
quelle