¿Cómo puedo compartir una unidad óptica de manera que engañe al cliente haciéndole creer que es una unidad local?

10

Estoy en una situación francamente ridícula donde mi computadora de escritorio tiene dos unidades ópticas y mi centro de medios no tiene ninguna (ni espacio para una). Antes de considerar algo tan extremo como comprar una unidad óptica externa, me gustaría ver si hay una manera de conectar mis unidades a través de la red.

Ambas máquinas son Ubuntu y ya tienen el uso compartido de NFS para acceder a los medios desde el escritorio.

La razón por la que pregunto (en lugar de solo exportar / media / cdrom) es que un recurso compartido NFS montado no se parece a un dispositivo de estilo CDROM para la máquina remota. Esto es importante para mí porque necesito que XBMC reconozca la unidad como tal para que pueda manejar los discos de forma automática y adecuada.

Ahora yo no sé lo que hace que una unidad óptica mirada como una unidad óptica para Ubuntu. Si lo supiera, probablemente sabría lo que tenía que hacer. Supongo que hay alguna udevacción caliente allí en algún momento.

¿Hay alguna forma de compartir un dispositivo de nivel de bloque (por ejemplo /dev/sr0) para permitir que ambas computadoras lo monten por separado ... Siento que me estoy cayendo por el agujero del conejo y puedo ver todas estas soluciones de ingeniería masiva como iSCSI y la virtualización de paso apareciendo frente a mí ... ¡Seguramente hay una manera simple de compartir algunos modos de manejo entre dos computadoras Ubuntu!

Oli
fuente
No sé si esto es suficiente: thegeekstuff.com/2009/02/… --- No sé si exporta el especial ioctlnecesario para el DVD. Lo usé hace años para una idea mal pensada de cambiar por la red, y luego lo olvidé hasta ahora ... (mejor enlace: linux-mag.com/id/7118 )
Rmano
Los 2 métodos que he usado con éxito para hacer cosas similares son usar NFS y Samba, pero dado su representante, supongo que sabe con seguridad sobre NFS, y posiblemente lo haga a través de Samba. LMK si necesita más ayuda con él.
slm
@slm Sí, ya hay NFS entre las dos computadoras. Agregué el CD /media/cdroma nfs y lo monté en el otro extremo como /media/cdrom(y puedo ver los archivos) pero XBMC no está detectando un cambio de medios (no cree que el punto de montaje sea un DVD). ¿Estoy haciendo algo estúpido?
Oli
@Oli - OK, mira mi A y avísame si eso es lo que estás buscando. Por cierto, el otro método que he usado es hacer un ISO del DVD, compartirlo a través de NFS y luego mount -o looplocalmente en otras computadoras.
slm

Respuestas:

9

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. 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 la 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
Montaje del CD

Ahora de vuelta en el cliente de Ubuntu, necesitamos conectarnos al nbd-serveruso de esta nbd-clientmanera:

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

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.

Reproducción automática y montaje automático?

En la configuración anterior tuve que montar manualmente el DVD.

En la investigación de la plausibilidad de si este enfoque podría funcionar con reproducción automática y montaje automático, fuera de la caja, reproducción automática de Ubuntu no funciona pero el nbd-clienty nbd-serverse mantuvo hasta cuando expulsa el disco. Cuando volví a colocar el DVD pude ejecutar el mountcomando en Ubuntu, que volvió a montar el DVD perfectamente.

Por lo tanto, supongo que podría pegar una regla UDEV en Ubuntu para detectar este cambio y realizar el montaje automático / reproducción automática. No voy a probarlo todo, pero no veo nada que me haga pensar que no funcionará.

slm
fuente
1
Excelentes instrucciones! No es perfecto: mi software todavía puede decir que no es una unidad de disco real. Supongo que ioctlno se está manejando perfectamente. ¡Pero pude hacer que esto funcionara en dos máquinas archlinux con cero problemas ! (Archlinux instaló el cliente y el servidor juntos como 'nbd'.)
Expiación limitada el
3

Este método también usa NBD pero usa la nueva configuración de estilo en su lugar. Las únicas ventajas son que no tiene que iniciar el servidor manualmente y no recibe una advertencia de desaprobación fea.

Después de instalar los paquetes nbd-servery nbd-client, proceda a editar el archivo de configuración en el servidor ( /etc/nbd-server/config) y asegúrese de que se vea así:

[generic]
# If you want to run everything as root rather than the nbd user, you
# may either say "root" in the two following lines, or remove them
# altogether. Do not remove the [generic] section, however.
    user = nbd
    group = cdrom
    includedir = /etc/nbd-server/conf.d
    allowlist = true

# What follows are export definitions. You may create as much of them as
# you want, but the section header has to be unique.

[dvd]
    exportname = /dev/sr0
    readonly = true

Nota: La [dvd]etiqueta anterior es un encabezado de sección y puede ser cualquier palabra que desee encerrada entre corchetes. Se utiliza para identificar ese recurso compartido en particular, así que asegúrese de usar un nombre que sea fácil de usar y obvio.

Después de guardar los cambios en el archivo de configuración, inicie o reinicie el servidor nbd (ejemplo de reinicio):

sudo service nbd-server restart

Luego, nuevamente en la máquina cliente, conéctese al servidor con el comando:

sudo nbd-client -N dvd hostname /dev/nbd0

Nota: Reemplace dvdcon el nombre que utilizó en la configuración del servidor anterior y hostnamecon el nombre de host de la máquina del servidor.

Finalmente, solo es cuestión de montar el nuevo dispositivo de bloque compartido:

sudo mount /dev/nbd0 /mnt/
devius
fuente
Si sigues recibiendo Negotiation: ..Error: Server closed connection Exiting., comenta los dos usery las grouplíneas /etc/nbd-server/config. Esto hace que se ejecute nbd-serverbajo root quién tiene acceso a su/dev/sr0
Petr Újezdský