Comment puis-je monter un périphérique bloc d'un ordinateur à un autre via le réseau en tant que périphérique bloc?


40

Est-il possible d'exporter un périphérique en mode bloc, tel qu'un DVD ou un CD-ROM, et de le monter de sorte qu'il puisse être monté sur un autre ordinateur en tant que périphérique en mode bloc?

REMARQUE: NFS ou Samba ne m'intéresse pas. Je souhaite en réalité que le lecteur optique s'affiche en tant que lecteur optique sur un ordinateur distant.

Réponses:


33

Je pense que vous pourrez peut-être accomplir ce que vous voulez en utilisant des dispositifs de blocage de réseau (NBD). En regardant la page wikipedia sur le sujet, il est mentionné un outil appelé nbd. Il est composé d'un composant client et serveur.

Exemple

Dans ce scénario, je configure un CD-ROM sur mon ordinateur portable Fedora 19 et le partage sur un système Ubuntu 12.10 (client).

l'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
partage d'un CD

De retour sur le serveur (Fedodra 19), je fais la même chose en utilisant son gestionnaire de paquets YUM. Une fois terminé, un CD est inséré dans le CD et lance cette commande pour le partager en tant que périphérique bloc:

$ 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.
$

Une vérification rapide pour voir si elle fonctionne:

$ 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
Monter le CD

Maintenant, revenons sur le client Ubuntu, nous devons nous connecter aux nbd-serverutilisateurs nbd-clientcomme ceci. REMARQUE: le nom du nbd-server est greeneggs dans cet exemple.

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

(Sur certains systèmes - par exemple Fedora - il faut d' modprobe nbdabord.)

Nous pouvons confirmer qu’il existe maintenant un périphérique bloc sur le système Ubuntu utilisant 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 

Et maintenant nous le montons:

$ sudo mount /dev/nbd0p1 /mnt/
mount: block device /dev/nbd0p1 is write-protected, mounting read-only
$
ça a fonctionné?

Le suspense me tue, et nous avons décollé:

$ sudo ls /mnt/
EFI  GPL  isolinux  LiveOS

Il y a le contenu d'un LiveCD de CentOS que j'ai monté dans l'ordinateur portable Fedora 19 et que je pouvais monter en tant que périphérique bloc du réseau sur Ubuntu.


Je reçois ceci: "AVERTISSEMENT La spécification d'une exportation sur la ligne de commande est obsolète. Veuillez utiliser un fichier de configuration à la place". Version: 3.3
guettli

@guettli - merci pour le retour De quelle distribution s'agissait-il?
slm

@sim openSUSE 13.1
guettli

Remarque: greeneggsest le nom d'hôte du serveur.
devius

1
Notez que l'ancien protocole (c'est-à-dire l'utilisation d'un port pour chaque périphérique) a été marqué comme obsolète pour plusieurs versions et a été supprimé dans nbd 3.10 .
maxschlepzig

20

Une alternative à nbd(si vous êtes intéressé) utilise iSCSI. tgtdpeut être configuré pour avoir un /devpériphérique comme stockage de sauvegarde pour un IQN iSCSI particulier.

Si vous utilisez un système RHEL, il vous suffit donc de l'installer scsi-target-utilspuis de le configurer / démarrer tgtdsur le système source. La configuration de tgtdpeut être impliquée, mais Red Hat fournit de nombreux exemples différents pour les différents scénarios.

Par exemple:

<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>

Pour le démarrer sur Fedora / RHEL:

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

Vous devez installer iscsi-initiator-utilssur le système client et utiliser iscsiadmpour envoyer des cibles, puis pour vous "connecter" aux cibles énumérées. Par exemple:

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

Les LUN iSCSI se présenteront alors au système comme des périphériques de bloc standard. Sur RHEL, vous pouvez vérifier le transport d'un périphérique particulier, vous pouvez simplement ls -l /dev/disk/by-path | grep iscsivérifier le stockage en cours sur iSCSI. Le chemin indiquera également le numéro IQ de la cible à laquelle vous vous êtes connecté ci-dessus.

Lorsque le périphérique iscsi n'est plus nécessaire, vous pouvez le supprimer via:

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

2
Si vous voulez, vous pouvez aussi ajouter votre A à cet AU Q, c'est ce qui m'a incité à écrire celui-ci: askubuntu.com/questions/433231/…
slm

Je le ferais, mais je n'ai pas vraiment de système Ubuntu pour vérifier si les noms de paquetages sont identiques ou si les exemples de configuration que j'ai mentionnés sont en amont ou simplement quelque chose que Red Hat fait. La configuration elle-même devrait cependant être la même.
Bratchley

1
Joel, tu es le meilleur ... pas de système Ubuntu 8-)
slm

1
Était réellement plus facile à installer que NBD. Le problème avec les NBD actuels est que la plupart des exemples / de la documentation que vous trouvez via Google utilisent la configuration de style ancien, dans laquelle les versions actuelles supprimaient la prise en charge. De plus, la version <3.10 pourrait avoir le bogue en lecture seule .
maxschlepzig

9

Vous préférez évidemment la solution SAN. Outre les normes iSCSI et NBD déjà mentionnées, vous avez également l'approche AoE (ATA over ethernet).

C'est très facile à faire:

Du côté du service, vous devez

modprobe aoe
vbladed 0 0 eth0 /dev/sdc

Côté client

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

Vos appareils sont en

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

e0.0est votre /dev/sdcet e0.0.p1est/dev/sdc1

dmesg sur le serveur:

[221384.454447] aoe: AoE v85 initialised.

dmesg sortie sur le 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

Plutôt facile.

Notes complémentaires

  • vbladedfait partie du paquet vbladesur Fedora & Ubuntu, probablement la même chose dans d’autres distributions.
  • aoe-discover& aoe-statfont également partie du paquet aoetoolssur Fedora et Ubuntu.
  • Le périphérique apparaît en fdisktant que périphérique bloc, par exemple /dev/etherd/e0.0.
  • La version vbladedisponible dans les référentiels F19 et F20 est assez ancienne, il s'agit de la version 14. La version 21 du projet ATAoE est disponible. Un RPM mis à jour est disponible pour Fedora 19 x86_64 ici .

J'ai essayé de faire cela entre Fedora et Ubuntu, cela ne fonctionne pas.
slm

Je vérifie généralement tout avant de poster. Q: Est-ce que Aoe est chargé? Avez-vous donné des arguments appropriés? Sur le receveur: aoe a-t-il trouvé l'adversaire? Que dit dmesg?

Je sais que vous le faites, je
n'insinuais

mais il n'y a pas d'étapes supplémentaires, c'est vraiment une tâche facile.

1
ROTFL, et avez-vous compté le smartphone aussi?

1

Bien que cette solution fonctionne, elle est présentée uniquement comme une méthode permettant de montrer que TMWTDI.

Pour cette configuration, nous avons besoin d’un système d’inspiration Unix pour héberger le périphérique en mode bloc, ainsi que d’un système doté d’un périphérique de bouclage en boucle. Linux fonctionnera pour les deux.

Ensuite, nous avons besoin d’un système de fichiers réseau muet (comme Samba ou webdav, il ne faut pas optimiser le stockage des données). Plus précisément, NFS et AFS ne fonctionneront pas.

Placez le périphérique de bloc dans un dossier exporté. ( man mknodaidera.) désactivez la vérification du périphérique de bloc, le cas échéant. montez le système de fichiers exporté sur l'ordinateur client, créez un périphérique de boucle en utilisant le fichier importé en tant que magasin de sauvegarde et montez normalement. ( losetupou mount -o loop)

Comment et pourquoi cela fonctionne-t-il et pourquoi la performance est-elle nulle? L'une des idées fondamentales de Unix est que tout est un fichier, les périphériques ne sont donc que des fichiers un peu spéciaux (c'est pourquoi ils sont appelés fichiers spéciaux). Mknod peut produire plusieurs types de fichiers spéciaux, mais nous allons seulement examiner les périphériques en mode bloc. Les dispositifs de blocage existent dans le système de fichiers comme tout autre fichier et comme tout autre fichier, ils ont des propriétaires, des autorisations, des inodes et des noms; mais ils ont deux différences: ils ne stockent pas leurs données dans le système de fichiers et ils disposent de fonctionnalités supplémentaires leur permettant d'être montés. Si le serveur de fichiers est suffisamment stupide pour ne pas prêter attention à ces différences, vous pouvez les ignorer et les exporter sous forme de fichiers normaux. Ensuite, le périphérique en boucle prend un fichier ordinaire (local ou distant) et ajoute les propriétés et fonctionnalités spéciales de sorte que vous puissiez monter des fichiers normaux comme s'il s'agissait de périphériques en mode bloc. Le gros inconvénient est la performance.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.