Como posso compartilhar uma unidade óptica de uma maneira que engane o cliente a pensar que é uma unidade local?

10

Estou na situação francamente ridícula em que minha área de trabalho possui duas unidades ópticas e minha central de mídia não possui nenhuma (nem espaço para uma). Antes de considerar algo tão extremo quanto comprar uma unidade óptica externa, gostaria de ver se há uma maneira de amarrar minhas unidades pela rede.

Ambas as máquinas são Ubuntu e já possuem compartilhamento NFS para acessar a mídia a partir da área de trabalho.

A razão pela qual estou perguntando (em vez de apenas exportar / media / cdrom) é que um compartilhamento NFS montado não se parece com um dispositivo no estilo CDROM para a máquina remota. Isso é importante para mim, porque eu preciso que o XBMC reconheça a unidade como tal para poder manipular os discos de forma automática e adequada.

Agora eu não sei o que faz com que uma unidade óptica olhar como uma unidade óptica para o Ubuntu. Se soubesse disso, provavelmente saberia o que precisava fazer. Eu estou supondo que há alguma udevação quente lá em algum momento.

Existe alguma maneira de compartilhar um dispositivo em nível de bloco (por exemplo /dev/sr0), permitindo que ambos os computadores o montem separadamente ... Sinto que estou caindo pela toca do coelho e posso ver todas essas soluções com excesso de engenharia, como o iSCSI e virtualização de passagem aparecendo na minha frente ... Certamente, há uma maneira simples de compartilhar alguns modos de unidade entre dois computadores Ubuntu!

Oli
fonte
Não sei se isso é suficiente: thegeekstuff.com/2009/02/… --- Não sei se exporta o especial ioctlnecessário para o DVD. Usei-o anos atrás para uma idéia mal-pensamento de trocar sobre a rede, e depois esqueceu-se até agora ... (melhor link: linux-mag.com/id/7118 )
Rmano
Os 2 métodos que eu usei com sucesso para fazer coisas semelhantes são o NFS e o Samba, mas, considerando o seu representante, presumo que você saiba sobre o NFS com certeza, e possivelmente fazendo isso via Samba. LMK se você precisar de mais ajuda.
SLM
@ SLI Sim, já existe NFS entre os dois computadores. Adicionei o CD /media/cdromao nfs e montei-o no outro lado como /media/cdrom(e posso ver os arquivos), mas o XBMC não está detectando uma mudança de mídia (ele não acha que o ponto de montagem seja um DVD). Estou fazendo algo estúpido?
Oli
@ Oli - OK, veja meu A e deixe-me saber se é isso que você está procurando. Aliás, o outro método que usei é criar um ISO do DVD, compartilhá-lo através do NFS e depois mount -o looplocalmente em outros computadores.
Slm

Respostas:

9

Eu acho que você pode conseguir o que deseja usando dispositivos de bloco de rede (NBD). Olhando para a página da Wikipedia sobre o assunto, há menção de uma ferramenta chamada nbd. É composto de um componente de cliente e servidor.

Exemplo

Nesse cenário, estou configurando um CD-ROM no meu laptop Fedora 19 (servidor) e compartilhando-o com um 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
compartilhando um CD

Agora, de volta ao servidor (Fedodra 19), faço uma coisa semelhante usando o gerenciador de pacotes YUM. Depois de concluído, coloco um CD e executo este comando para compartilhá-lo como um dispositivo de bloco:

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

Uma verificação rápida para ver se está em execução:

$ 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
Montando o CD

Agora, de volta ao cliente Ubuntu, precisamos nos conectar ao nbd-serveruso da seguinte nbd-clientforma:

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

Podemos confirmar que agora existe um dispositivo de bloco no 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 

E agora montamos:

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

O suspense está me matando, e temos decolagem:

$ sudo ls /mnt/
EFI  GPL  isolinux  LiveOS

Há o conteúdo de um LiveCD do CentOS que eu montei no laptop Fedora 19 e consegui montá-lo como um dispositivo de bloco da rede no Ubuntu.

Reprodução automática e montagem automática?

Na configuração acima, tive que montar manualmente o DVD.

Ao investigar a plausibilidade de se essa abordagem funcionaria com Autoplaying e automontagem, fora da caixa, autoplay do Ubuntu não trabalha, mas o nbd-cliente nbd-serverfiquei até quando eu ejectado o disco. Quando eu coloquei o DVD de volta, pude executar o mountcomando no Ubuntu, que remontou o DVD muito bem.

Então, eu suponho que você poderia aplicar uma regra UDEV no Ubuntu para detectar essa alteração e executar a montagem automática / automática automaticamente. Não vou tentar tudo, mas não vejo nada que me leve a pensar que não vai funcionar.

slm
fonte
1
Excelentes instruções! Não é perfeito: meu software ainda pode dizer que não é uma unidade de disco real. Suponho que ioctlnão esteja sendo tratado perfeitamente. Mas consegui fazer isso funcionar em duas máquinas archlinux com zero soluços! (Archlinux instalou cliente e servidor juntos como 'nbd'.)
Expiação limitada
3

Este método também usa NBD, mas usa a nova configuração de estilo. As únicas vantagens são que você não precisa iniciar o servidor manualmente e não recebe um aviso feio de reprovação.

Após instalar os pacotes nbd-servere nbd-client, continue com a edição do arquivo de configuração no servidor ( /etc/nbd-server/config) e verifique se ele se parece com isso:

[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: O [dvd]rótulo acima é um cabeçalho de seção e pode ser qualquer palavra que você queira entre colchetes. Ele é usado para identificar esse compartilhamento específico, portanto, use um nome fácil de usar e óbvio.

Após salvar as alterações no arquivo de configuração, inicie ou reinicie o servidor nbd (exemplo de reinicialização):

sudo service nbd-server restart

Em seguida, de volta à máquina cliente, conecte-se ao servidor usando o comando:

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

Nota: Substitua dvdpelo nome que você usou na configuração do servidor acima e hostnamepelo nome do host da máquina do servidor.

Finalmente, é apenas uma questão de montar o novo dispositivo de bloco compartilhado:

sudo mount /dev/nbd0 /mnt/
devius
fonte
Se você continuar recebendo Negotiation: ..Error: Server closed connection Exiting., comente as linhas usere as grouplinhas /etc/nbd-server/config. Isso faz rodar nbd-serverno root quem tem acesso ao seu/dev/sr0
Petr Újezdský