GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo montar un dispositivo de bloques de una computadora a otra a través de la red como un dispositivo de bloques?

Creo que podría lograr lo que desea utilizando dispositivos de bloque de red (NBD). Mirando la página de wikipedia sobre el tema, se menciona una herramienta llamada nbd . Se compone de un componente de cliente y servidor.

Ejemplo

En este escenario, estoy configurando un CDROM en mi computadora portátil Fedora 19 (servidor) y lo estoy compartiendo con un sistema Ubuntu 12.10 (cliente).

instalando
$ 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
compartir un CD

Ahora de vuelta en el servidor (Fedodra 19) hago algo similar usando su administrador de paquetes YUM. Una vez completado, introduzco un CD y ejecuto este comando para compartirlo como un dispositivo de bloque:

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

Una comprobación rápida para ver si se está ejecutando:

$ 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
Montar el CD

Ahora, de vuelta en el cliente de Ubuntu, necesitamos conectarnos al nbd-server usando nbd-client al igual que. NOTA: el nombre del servidor nbd es greeneggs en este ejemplo.

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

(En algunos sistemas, por ejemplo, Fedora, uno tiene que modprobe nbd primero.)

Podemos confirmar que ahora hay un dispositivo de bloqueo en el sistema Ubuntu usando 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 

Y ahora lo montamos:

$ sudo mount /dev/nbd0p1 /mnt/
mount: block device /dev/nbd0p1 is write-protected, mounting read-only
$
¿funcionó?

El suspenso me está matando y tenemos despegue:

$ sudo ls /mnt/
EFI  GPL  isolinux  LiveOS

Ahí está el contenido de un LiveCD de CentOS que monté en la computadora portátil Fedora 19 y pude montarlo como un dispositivo de bloque de la red en Ubuntu.


Una alternativa a nbd (si está interesado) está usando iSCSI. tgtd se puede configurar para tener un /dev dispositivo como su almacenamiento de respaldo para un iSCSI IQN en particular.

Si está en un sistema RHEL, solo necesita instalar scsi-target-utils y luego configurar/iniciar tgtd en el sistema fuente. Configuración de tgtd puede involucrarse, pero Red Hat proporciona muchos ejemplos diferentes para los distintos escenarios.

Por ejemplo:

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

Para iniciarlo en Fedora/RHEL:

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

Instalarías iscsi-initiator-utils en el sistema cliente y use iscsiadm para enviar objetivos y luego "iniciar sesión" en los objetivos enumerados. Por ejemplo:

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

Luego, los iSCSI LUN se presentarán al sistema como dispositivos de bloque regulares. En RHEL, puede verificar el transporte por el que viene un dispositivo en particular, simplemente puede hacer un ls -l /dev/disk/by-path | grep iscsi para ver qué almacenamiento viene a través de iSCSI. La ruta también mostrará el IQN del objetivo que inició sesión anteriormente.

Cuando ya no se necesita el dispositivo iscsi, se puede eliminar a través de:

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

Obviamente, prefiere la solución SAN. Además de los ya mencionados iSCSI y NBD, también tiene el enfoque AoE (ATA sobre Ethernet).

Esto es muy fácil de hacer:

En el lado de la porción, debe

modprobe aoe
vbladed 0 0 eth0 /dev/sdc

Del lado del cliente

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

Tus dispositivos están 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

Donde e0.0 es tu /dev/sdc y e0.0.p1 es /dev/sdc1

dmesg en el servidor:

[221384.454447] aoe: AoE v85 initialised.

dmesg salida en el cliente:

[ 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

Bastante fácil.

Notas adicionales

  • vbladed es parte del paquete vblade en Fedora y Ubuntu, probablemente también en otras distribuciones.
  • aoe-discover &aoe-stat forman parte del paquete aoetools en Fedora y Ubuntu también.
  • El dispositivo aparece en fdisk como un dispositivo de bloque, por ejemplo, /dev/etherd/e0.0 .
  • La versión de vblade que está disponible en los repositorios F19 y F20 está bastante anticuado, es la versión 14. La página del proyecto ATAoE tiene la versión 21 disponible. Hay un RPM actualizado disponible para Fedora 19 x86_64 aquí.

Linux
  1. Cómo reemplazar todo el contenido de una carpeta con otra

  2. ¿Cómo controlo el orden de las interfaces de red?

  3. ¿Cómo puedo reservar un bloque de memoria del kernel de Linux?

  4. ¿Cómo reenviar un puerto de una máquina a otra?

  5. ¿Cómo puedo cambiar el dispositivo de red predeterminado ens33 al antiguo eth0 en Fedora 19?

¿Cómo copiar un archivo de otro directorio al actual?

Cómo copiar una tabla de una base de datos mysql a otra base de datos mysql

¿Cómo puedo ejecutar código PHP desde la línea de comandos?

¿Cómo copiar los 10 archivos más recientes de un directorio a otro?

¿Cómo puedo obtener la duración de un archivo de video desde la consola?

¿Cómo puedo enumerar los atributos de usuario de Active Directory desde una computadora Linux?