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
Où 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 packagevblade
sur Fedora et Ubuntu, probablement la même chose dans d'autres distributions.aoe-discover
&aoe-stat
font partie du packageaoetools
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.