GNU/Linux >> Tutoriels Linux >  >> Linux

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 ?

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

Exemple

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

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
partager un CD

De retour sur le serveur (Fedodra 19), je fais la même chose en utilisant son gestionnaire de packages YUM. Une fois terminé, j'insère un CD et j'exécute cette commande pour le partager en tant que périphérique de 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 s'il 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
Montage du CD

Maintenant, de retour sur le client Ubuntu, nous devons nous connecter au nbd-server en utilisant nbd-client ainsi. REMARQUE : le nom du serveur nbd 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 modprobe nbd d'abord.)

Nous pouvons confirmer qu'il existe maintenant un périphérique de bloc sur le système Ubuntu en 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 on le monte :

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

Le suspense me tue, et nous avons le décollage :

$ 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 j'ai pu le monter en tant que périphérique bloc du réseau sur Ubuntu.


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

Si vous êtes sur un système RHEL, il vous suffit d'installer scsi-target-utils puis configurer/démarrer tgtd sur le système source. Configuration de tgtd peut s'impliquer, 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 installeriez iscsi-initiator-utils sur le système client et utilisez iscsiadm pour envoyer des cibles puis "se 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 normaux. Sur RHEL, vous pouvez vérifier le transport d'un appareil particulier, vous pouvez simplement faire un ls -l /dev/disk/by-path | grep iscsi pour voir quel stockage arrive sur iSCSI. Le chemin indiquera également l'IQN 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>

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

C'est très simple à faire :

Côté 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.0 est votre /dev/sdc et e0.0.p1 est /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

Assez facile.

Remarques supplémentaires

  • vbladed fait partie du package vblade sur Fedora et Ubuntu, probablement la même chose dans d'autres distributions.
  • aoe-discover &aoe-stat font partie du package aoetools sur Fedora et Ubuntu également.
  • L'appareil s'affiche en fdisk en tant que périphérique bloc, par exemple, /dev/etherd/e0.0 .
  • La version de vblade qui est disponible dans les référentiels F19 et F20 est assez daté, c'est la version 14. La page du projet ATAoE a la version 21 disponible. Un RPM mis à jour est disponible pour Fedora 19 x86_64 ici.

Linux
  1. Comment mettre en miroir la sortie standard d'un terminal à un autre ?

  2. Comment copier des commits d'un dépôt Git à un autre ?

  3. Comment contrôler l'ordre des interfaces réseau ?

  4. Comment puis-je réserver un bloc de mémoire à partir du noyau Linux ?

  5. Comment supprimer le périphérique de cache de bcache ?

Comment copier un fichier d'un autre répertoire vers celui en cours ?

Comment puis-je obtenir la longueur d'un fichier vidéo à partir de la console ?

Comment puis-je lire les entrées du clavier de l'hôte lorsque je suis connecté via SSH ?

Comment rediriger un port d'une machine à une autre ?

Comment puis-je changer le périphérique réseau ens33 par défaut en ancien eth0 sur Fedora 19 ?

Comment puis-je répertorier les attributs d'utilisateur Active Directory à partir d'un ordinateur Linux ?