GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

Ich denke, Sie können möglicherweise mit Netzwerkblockgeräten (NBD) erreichen, was Sie wollen. Auf der Wikipedia-Seite zu diesem Thema wird ein Tool namens nbd erwähnt . 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 mit einem Ubuntu 12.10-System (Client).

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
eine CD teilen

Jetzt zurück auf dem Server (Fedodra 19) mache ich etwas Ähnliches mit dem Paketmanager YUM. Sobald ich fertig bin, 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, 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

Jetzt zurück auf dem Ubuntu-Client müssen wir uns mit nbd-server verbinden mit nbd-client wie so. HINWEIS: der name des nbd-servers ist in diesem beispiel greeneggs.

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

(Auf manchen Systemen - z.B. Fedora - muss man modprobe nbd zuerst.)

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

$ 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 mounten 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 starten:

$ 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 es als Blockgerät des Netzwerks unter Ubuntu mounten konnte.


Eine Alternative zu nbd (falls Sie interessiert sind) verwendet iSCSI. tgtd kann so konfiguriert werden, dass es einen /dev hat Gerät als Sicherungsspeicher für einen bestimmten iSCSI IQN.

Wenn Sie sich auf einem RHEL-System befinden, müssen Sie nur scsi-target-utils installieren und dann tgtd konfigurieren/starten auf dem Quellsystem. Konfiguration von tgtd können sich beteiligen, 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>

Um es auf Fedora/RHEL zu starten:

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

Sie würden iscsi-initiator-utils installieren auf dem Clientsystem und verwenden Sie iscsiadm um Ziele zu senden und sich dann bei den aufgezählten Zielen "einzuloggen". Zum Beispiel:

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

Die iSCSI-LUNs werden dem System dann als reguläre Blockgeräte angezeigt. Auf RHEL können Sie den Transport überprüfen, über den ein bestimmtes Gerät kommt, indem Sie einfach ls -l /dev/disk/by-path | grep iscsi eingeben um zu sehen, welcher Speicher über iSCSI kommt. Der Pfad listet auch den IQN des Ziels auf, bei dem Sie sich oben angemeldet haben.

Wenn das iscsi-gerät nicht mehr benötigt wird, kann man es entfernen über:

# iscsiadm -m node -T <Complete Target IQN> -u -p <remoteHost>

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

Das geht ganz einfach:

Auf der Serving-Seite 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

Wobei e0.0 ist Ihr /dev/sdc und e0.0.p1 ist /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 Hinweise

  • vbladed ist Teil des Pakets vblade auf Fedora &Ubuntu, wahrscheinlich auch in anderen Distributionen.
  • aoe-discover &aoe-stat sind Teil des Pakets aoetools auch auf Fedora &Ubuntu.
  • Gerät wird in fdisk angezeigt als Blockgerät beispielsweise /dev/etherd/e0.0 .
  • Die Version von vblade das in den F19- und F20-Repositories verfügbar ist, ist ziemlich veraltet, es ist Version 14. Auf der ATAoE-Projektseite ist Version 21 verfügbar. Hier ist ein aktualisiertes RPM für Fedora 19 x86_64 verfügbar.

Linux
  1. Wie kopiert man Einstellungen von einem Gerät auf ein anderes?

  2. Wie verschiebt man Dateien von einem Benutzerkonto zu einem anderen auf demselben Computer?

  3. So kopieren Sie eine Tabelle von einer MySQL-Datenbank in eine andere MySQL-Datenbank

  4. Wie kann ich PHP-Code von der Kommandozeile aus ausführen?

  5. Wie kopiert man die Top 10 der neuesten Dateien von einem Verzeichnis in ein anderes?

Wie kopiert man eine Datei aus einem anderen Verzeichnis in das aktuelle?

Wie können Sie den Stdout von einem Terminal auf ein anderes spiegeln?

Wie kann ich die Länge einer Videodatei von der Konsole abrufen?

So ersetzen Sie den gesamten Inhalt eines Ordners durch einen anderen

Wie entferne ich das Cache-Gerät aus bcache?

Wie wird die Portweiterleitung von einer IP zu einer anderen IP im selben Netzwerk durchgeführt?