Como montar um dispositivo de bloco de um computador para outro via rede como um dispositivo de bloco?


40

É possível exportar um dispositivo de bloco como um DVD ou CD-ROM e torná-lo montável em outro computador como um dispositivo de bloco?

NOTA: Não estou interessado em fazer isso usando NFS ou Samba; na verdade, quero que a unidade óptica seja exibida como uma unidade óptica em um computador remoto.

Respostas:


33

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 nbd-clientassim. NOTA: o nome do servidor nbd é greeneggs neste exemplo.

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

(Em alguns sistemas - por exemplo, Fedora - é preciso modprobe nbdprimeiro.)

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.


Eu recebo o seguinte: "AVISO A especificação de uma exportação na linha de comando está obsoleta. Em vez disso, use um arquivo de configuração". Versão: 3.3
guettli

@ guettli - obrigado pelo feedback. Em que distro foi essa?
Slm

@sim openSUSE 13.1
guettli

Nota: greeneggsé o nome do host do servidor.
Devius

11
Observe que o protocolo de estilo antigo (ou seja, usando uma porta para cada dispositivo) foi marcado como obsoleto para várias versões e foi descartado no nbd 3.10 .
maxschlepzig

20

Uma alternativa para nbd(se você estiver interessado) é usar o iSCSI. tgtdpode ser configurado para ter um /devdispositivo como armazenamento de backup para um IQN iSCSI específico.

Se você estiver em um sistema RHEL, precisará instalar scsi-target-utilse configurar / iniciar tgtdno sistema de origem. A configuração de tgtdpode se envolver, mas a Red Hat fornece vários exemplos diferentes para os vários cenários.

Por exemplo:

<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 iniciá-lo no Fedora / RHEL:

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

Você instalaria iscsi-initiator-utilsno sistema do cliente e usaria iscsiadmpara enviar destinos e depois "efetuar login" nos destinos enumerados. Por exemplo:

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

Os LUNs do iSCSI serão apresentados ao sistema como dispositivos de bloco regulares. No RHEL, você pode verificar o transporte que um determinado dispositivo está chegando, basta fazer um ls -l /dev/disk/by-path | grep iscsipara ver qual armazenamento está chegando pelo iSCSI. O caminho também listará o IQN do destino no qual você efetuou login acima.

Quando o dispositivo iscsi não é mais necessário, é possível removê-lo via:

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

2
Se você quiser, pode adicionar seu A a este AU Q também, foi o que me levou a escrever este: askubuntu.com/questions/433231/…
slm

Eu gostaria, mas realmente não tenho um sistema Ubuntu à mão para garantir que os nomes dos pacotes sejam os mesmos ou se os exemplos de configuração que referi estão no upstream ou apenas algo que a Red Hat faz. A configuração em si deve ser a mesma, no entanto.
Bratchley

11
Joel você é o melhor ... no sistema Ubuntu 8-)
slm

11
Na verdade, era mais fácil de configurar do que o NBD. O problema com o NBD atual é que a maioria dos exemplos / documentação que você encontra via google usa a configuração de estilo antigo, onde as versões atuais removeram o suporte a ele. Além disso, a versão <3.10 pode ter o erro somente leitura .
maxschlepzig

9

Você obviamente prefere a solução SAN. Além do já mencionado iSCSI e NBD, você também tem a abordagem AoE (ATA over ethernet).

Isso é muito fácil de fazer:

No lado da porção, você precisa

modprobe aoe
vbladed 0 0 eth0 /dev/sdc

No lado do cliente

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

Seus dispositivos estão em

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

Onde e0.0está o seu /dev/sdce e0.0.p1está/dev/sdc1

dmesg no servidor:

[221384.454447] aoe: AoE v85 initialised.

dmesg saída no 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

Bem fácil.

Notas Adicionais

  • vbladedfaz parte do pacote vbladeno Fedora e Ubuntu, provavelmente o mesmo em outras distros também.
  • aoe-discovere também aoe-statfazem parte do pacote aoetoolsno Fedora e Ubuntu.
  • O dispositivo aparece fdiskcomo um dispositivo de bloco, por exemplo /dev/etherd/e0.0,.
  • A versão vbladedisponível nos repositórios F19 e ​​F20 é bastante antiga, é a versão 14. A página do projeto ATAoE tem a versão 21 disponível. Há um RPM atualizado disponível para o Fedora 19 x86_64 aqui .

Tentei fazer isso com o Fedora e o Ubuntu, mas não está funcionando.
slm

Eu costumo verificar tudo antes de postar. Q: aoe está carregado? Você deu argumentos adequados? No receptor: aoe encontrou o oponente? O que diz dmesg?

Eu sei que sim, eu não estava querendo dizer que era errado única que pode haver algumas etapas adicionais 8-)
SLM

mas não há etapas extras, essa é realmente uma tarefa fácil.

11
ROTFL, e você contou o smartphone também?

1

Embora essa solução funcione, ela é apresentada apenas como um método para mostrar esse TMWTDI.

Para esta configuração, precisamos de um sistema inspirado em unix para hospedar o dispositivo de bloco e um sistema com um dispositivo de loop back block para que o sistema o visualize. O Linux funcionará para ambos.

Em seguida, precisamos de um sistema de arquivos de rede idiota (ele não deve fazer otimizações do armazenamento de dados), como samba ou webdav. Especificamente, NFS e AFS não funcionarão.

Coloque o dispositivo de bloco em uma pasta que é exportada. ( man mknodajudará.) desative a verificação do dispositivo de bloco, se aplicável. monte o sistema de arquivos exportado no computador-cliente, crie um dispositivo de loop usando o arquivo importado como backup e monte-o normalmente. ( losetupou mount -o loop)

Como e por que funciona e por que o desempenho é péssimo: Uma das idéias principais por trás do unix é que tudo é um arquivo; portanto, os dispositivos são arquivos, apenas são um pouco especiais (é por isso que são chamados arquivos especiais). Existem vários tipos de arquivos especiais que o mknod pode produzir, mas apenas examinaremos os dispositivos de bloco. os dispositivos de bloco existem no sistema de arquivos como qualquer outro arquivo e como qualquer outro arquivo com proprietários, permissões, inodes e nomes; mas eles têm duas diferenças: eles não armazenam seus dados no sistema de arquivos e possuem recursos extras para poderem ser montados. Se o servidor de arquivos for burro o suficiente para não prestar atenção a essas diferenças, você poderá ignorá-las e exportá-las como arquivos regulares. Em seguida, o dispositivo de loop pega um arquivo comum (local ou remoto) e adiciona propriedades e recursos especiais para que você possa montar arquivos regulares como se fossem dispositivos de bloco. A grande desvantagem é o desempenho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.