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

40

¿Es posible exportar un dispositivo de bloque como un DVD o CDROM y hacer que se pueda montar en otra computadora como un dispositivo de bloque?

NOTA: No estoy interesado en hacer esto usando NFS o Samba, en realidad quiero que la unidad óptica se muestre como una unidad óptica en una computadora remota.

slm
fuente

Respuestas:

33

Creo que podría lograr lo que desea utilizando dispositivos de bloqueo de red (NBD). Al mirar la página de wikipedia sobre el tema , se menciona una herramienta llamada nbd. Está compuesto por un componente de cliente y servidor.

Ejemplo

En este escenario, estoy configurando un CDROM en mi computadora portátil Fedora 19 (servidor) y la comparto 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
Montaje del CD

Ahora, de vuelta en el cliente de Ubuntu, necesitamos conectarnos al nbd-serveruso de esta nbd-clientmanera. 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 hacerlo modprobe nbdprimero).

Podemos confirmar que ahora hay un dispositivo de bloque 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

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

slm
fuente
Obtengo esto: "ADVERTENCIA La especificación de una exportación en la línea de comandos está en desuso. Utilice un archivo de configuración en su lugar". Versión: 3.3
guettli
@guettli: gracias por los comentarios. ¿En qué distribución estaba esto?
slm
@sim openSUSE 13.1
guettli
Nota: greeneggses el nombre de host del servidor.
devius
1
Tenga en cuenta que el protocolo de estilo antiguo (es decir, el uso de un puerto para cada dispositivo) se marcó como obsoleto para varias versiones y se eliminó en nbd 3.10 .
maxschlepzig
20

Una alternativa a nbd(si está interesado) es usar iSCSI. tgtdse puede configurar para tener un /devdispositivo como almacenamiento de respaldo para un iSCSI IQN particular.

Si está en un sistema RHEL, entonces solo necesita instalar scsi-target-utilsy luego configurar / iniciar tgtden el sistema fuente. La configuración de tgtdpuede involucrarse, pero Red Hat proporciona muchos ejemplos diferentes para los diversos 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ía iscsi-initiator-utilsen el sistema cliente y lo usaría iscsiadmpara enviar destinos y luego "iniciar sesión" en los destinos enumerados. Por ejemplo:

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

Los iSCSI LUN se presentarán al sistema como dispositivos de bloque normales. En RHEL, puede verificar el transporte al que se dirige un dispositivo en particular, simplemente puede hacer un recorrido ls -l /dev/disk/by-path | grep iscsipara ver qué almacenamiento está llegando a través de iSCSI. La ruta también enumerará el IQN del objetivo en el que inició sesión anteriormente.

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

# iscsiadm -m node -T <Complete Target IQN> -u -p <remoteHost>
Bratchley
fuente
2
Si lo desea, también puede agregar su A a esta AU Q, es lo que me impulsó a escribir esta: askubuntu.com/questions/433231/…
slm
Lo haría, pero realmente no tengo un sistema Ubuntu a mano para asegurarme de que los nombres de los paquetes sean los mismos o si los ejemplos de configuración a los que hice referencia son anteriores o simplemente algo que hace Red Hat. Sin embargo, la configuración en sí debería ser la misma.
Bratchley
1
Joel eres el mejor ... no hay sistema Ubuntu 8-)
slm
1
En realidad, fue más fácil de configurar que NBD. El problema con el NBD actual es que la mayoría de los ejemplos / documentación que encuentra a través de Google usan la configuración de estilo antiguo, donde las versiones actuales eliminaron el soporte para ello. Además, la versión <3.10 podría tener el error de solo lectura .
maxschlepzig
9

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 necesitas

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

¿Dónde e0.0está tu /dev/sdcy e0.0.p1es/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

Muy fácil.

Notas adicionales

  • vbladed es parte del paquete vblade en Fedora y Ubuntu, probablemente lo mismo en otras distribuciones también.
  • aoe-discovery aoe-statson parte del paqueteaoetools en Fedora y Ubuntu también.
  • El dispositivo aparece fdiskcomo un dispositivo de bloque, por ejemplo /dev/etherd/e0.0,.
  • La versión vbladeque está disponible en los repositorios F19 y F20 está bastante anticuada, 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í .

fuente
Intenté hacer esto en b / n Fedora y Ubuntu, no está funcionando.
slm
Usualmente reviso todo antes de publicar. P: ¿está cargado el aoe? ¿Diste argumentos apropiados? En el receptor: ¿encontró aoe al oponente? ¿Qué dice dmesg?
Sé que sí, no estaba insinuando que estaba mal solo que podría haber algunos pasos adicionales 8-)
slm
pero no hay pasos adicionales, esta es realmente una tarea fácil.
1
ROTFL, ¿y también contaste el teléfono inteligente?
1

Aunque esta solución funciona, se presenta solo como un método para mostrar ese TMWTDI.

Para esta configuración, necesitamos un sistema inspirado en Unix para alojar el dispositivo de bloqueo, y un sistema con un dispositivo de bloqueo de bucle para que el sistema lo vea. Linux funcionará para ambos.

A continuación, necesitamos un sistema de archivos de red tonto (no debe hacer optimizaciones del almacenamiento de datos), como samba o webdav. Específicamente, NFS y AFS no funcionarán.

Coloque el dispositivo de bloque en una carpeta que se exporta. ( man mknodayudará). deshabilite la comprobación de bloqueo de dispositivo si corresponde monte el sistema de archivos exportado en la computadora cliente, cree un dispositivo de bucle utilizando el archivo importado como almacén de respaldo y móntelo normalmente. ( losetupomount -o loop )

Cómo y por qué funciona, y por qué el rendimiento apesta: una de las ideas centrales detrás de Unix es que todo es un archivo, por lo que los dispositivos son archivos solo que son un poco especiales (es por eso que se llaman archivos especiales). Hay varios tipos de archivos especiales que mknod puede producir, pero solo vamos a ver los dispositivos de bloque. existen dispositivos de bloque en el sistema de archivos como cualquier otro archivo y, como cualquier otro archivo, tienen propietarios, permisos, inodes y nombres; pero tienen dos diferencias: no almacenan sus datos en el sistema de archivos y tienen capacidades adicionales para que puedan montarse. Si el servidor de archivos es lo suficientemente tonto como para no prestar atención a estas diferencias, puede ignorarlas y exportarlas como archivos normales. A continuación, el dispositivo de bucle toma un archivo ordinario (local o remoto) y agrega las propiedades y capacidades especiales para que pueda montar archivos normales como si fueran dispositivos de bloque. El gran inconveniente es el rendimiento.

hildred
fuente