Como posso montar um dispositivo de bloco de um computador para outro através da rede como um dispositivo de bloco?

39

É possível exportar um dispositivo de bloco como um DVD ou CDROM e torná-lo de modo que seja montável em outro computador como um dispositivo de bloco?

NOTA: Eu não estou interessado em fazer isso usando NFS ou Samba, eu realmente quero que a unidade óptica apareça como uma unidade óptica em um computador remoto.

    
por slm 12.03.2014 / 17:32

4 respostas

33

Acho que você pode conseguir o que deseja usando dispositivos de bloco de rede (NBD). Analisando a página da Wikipédia sobre o assunto , mencionamos uma ferramenta chamada nbd . É composto por um componente de cliente e servidor.

Exemplo

Neste cenário, estou configurando um CDROM no meu laptop Fedora 19 (servidor) e estou compartilhando 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, insiro um CD e executo esse 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-server usando nbd-client . OBSERVAÇÃO: o nome do nbd-server é greeneggs neste exemplo.

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

(Em alguns sistemas - por exemplo, o Fedora - é preciso usar modprobe nbd primeiro.)

Podemos confirmar que agora há 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 nós temos decolagem:

$ sudo ls /mnt/
EFI  GPL  isolinux  LiveOS

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

    
por 12.03.2014 / 17:33
19

Uma alternativa para nbd (se você estiver interessado) está usando o iSCSI. tgtd pode ser configurado para ter um dispositivo /dev como armazenamento de apoio para um IQN iSCSI específico.

Se você estiver em um sistema RHEL, basta instalar scsi-target-utils e, em seguida, configurar / start tgtd no sistema de origem. A configuração de tgtd pode ser envolvida, mas a Red Hat fornece muitos 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 iniciar no Fedora / RHEL:

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

Você instalaria iscsi-initiator-utils no sistema do cliente e usaria iscsiadm para enviar os alvos para "fazer 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 iSCSI apresentarão então ao sistema como dispositivos de bloco regulares. No RHEL, você pode verificar o transporte de um determinado dispositivo que está chegando você pode apenas fazer um ls -l /dev/disk/by-path | grep iscsi para ver o armazenamento que está vindo sobre iSCSI. O caminho também listará o IQN do destino em que você se conectou acima.

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

# iscsiadm -m node -T <Complete Target IQN> -u -p <remoteHost>
    
por 12.03.2014 / 17:42
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 de serviç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

Em que e0.0 é seu /dev/sdc e e0.0.p1 é /dev/sdc1

dmesg no servidor:

[221384.454447] aoe: AoE v85 initialised.

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

Muito fácil.

Notas Adicionais

  • vbladed faz parte do pacote vblade no Fedora & Ubuntu, provavelmente o mesmo em outras distros também.
  • aoe-discover & aoe-stat fazem parte do pacote aoetools no Fedora & Ubuntu também.
  • O dispositivo aparece em fdisk como um dispositivo de bloco, por exemplo, /dev/etherd/e0.0 .
  • A versão de vblade que está disponível nos repositórios F19 e F20 está bem datada, é 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
por 12.03.2014 / 22:50
1

Embora esta solução funcione, ela é apresentada apenas como um método para mostrar que 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 bloco de loopback para o sistema visualizá-lo. 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, o NFS e o AFS não funcionarão.

Coloque o dispositivo de bloco em uma pasta que é exportada. ( man mknod ajudará.) desabilite a verificação do dispositivo de bloqueio, se aplicável. Monte o sistema de arquivos exportado no computador cliente, crie um dispositivo de loop usando o arquivo importado como armazenamento de backup e monte como normal. ( losetup ou mount -o loop )

Como e por que funciona, e por que a performance é uma porcaria: Uma das principais idéias por trás do unix é que tudo é um arquivo, então dispositivos são apenas arquivos, são um pouco especiais (por isso são chamados de arquivos especiais). Existem vários tipos de arquivos especiais que o mknod pode produzir, mas vamos apenas olhar para os dispositivos de bloco. dispositivos de bloco existem no sistema de arquivos como qualquer outro arquivo e, como qualquer outro arquivo, possuem 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 têm recursos extras para que possam ser montados. Se o servidor de arquivos é burro o suficiente para não prestar atenção a essas diferenças, você pode ignorá-los e exportá-los como arquivos regulares. Em seguida, o dispositivo de loop usa um arquivo comum (local ou remoto) e adiciona as propriedades e recursos especiais para que você possa montar arquivos regulares como se fossem dispositivos de bloco. A grande desvantagem é o desempenho.

    
por 14.03.2014 / 08:52