Come posso montare un dispositivo a blocchi da un computer a un altro tramite la rete come dispositivo a blocchi?


40

È possibile esportare un dispositivo a blocchi come un DVD o un CD-ROM e renderlo montabile su un altro computer come dispositivo a blocchi?

NOTA: Non sono interessato a farlo utilizzando NFS o Samba, in realtà voglio che l'unità ottica venga visualizzata come unità ottica su un computer remoto.

Risposte:


33

Penso che potresti essere in grado di realizzare ciò che desideri utilizzando i dispositivi di blocco di rete (NBD). Guardando la pagina di Wikipedia sull'argomento si parla di uno strumento chiamato nbd. Comprende un componente client e server.

Esempio

In questo scenario sto installando un CD-ROM sul mio laptop Fedora 19 (server) e lo sto condividendo con un sistema Ubuntu 12.10 (client).

installazione
$ 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
condividere un CD

Ora di nuovo sul server (Fedodra 19) faccio una cosa simile usando il suo gestore di pacchetti YUM. Una volta completato inserisco un CD ed eseguo questo comando per condividerlo come dispositivo a blocchi:

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

Un rapido controllo per vedere se è in esecuzione:

$ 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
Montaggio del CD

Ora di nuovo sul client Ubuntu dobbiamo collegarci nbd-serverall'utilizzo in questo nbd-clientmodo. NOTA: il nome del server nbd è greeneggs in questo esempio.

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

(Su alcuni sistemi - ad esempio Fedora - uno deve modprobe nbdprima.)

Possiamo confermare che ora c'è un dispositivo a blocchi sul 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 ora lo montiamo:

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

La suspense mi sta uccidendo e abbiamo il decollo:

$ sudo ls /mnt/
EFI  GPL  isolinux  LiveOS

C'è il contenuto di un LiveCD di CentOS che ho montato sul laptop Fedora 19 e che è stato in grado di montare come dispositivo a blocchi della rete su Ubuntu.


Ottengo questo: "ATTENZIONE La specifica di un'esportazione dalla riga di comando è obsoleta. Utilizzare invece un file di configurazione". Versione: 3.3
guettli,

@guettli - grazie per il feedback. Su quale distro era presente?
slm

@sim openSUSE 13.1
guettli

Nota: greeneggsè il nome host del server.
devius,

1
Si noti che il protocollo vecchio stile (ovvero utilizzando una porta per ciascun dispositivo) è stato contrassegnato come obsoleto per diverse versioni ed è stato eliminato in nbd 3.10 .
maxschlepzig,

20

Un'alternativa a nbd(se sei interessato) sta usando iSCSI. tgtdpuò essere configurato per avere un /devdispositivo come memoria di supporto per un determinato IQN iSCSI.

Se utilizzi un sistema RHEL, devi solo installare scsi-target-utilse quindi configurare / avviare tgtdil sistema di origine. La configurazione di tgtdpuò essere coinvolta, ma Red Hat fornisce molti esempi diversi per i vari scenari.

Per esempio:

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

Per avviarlo su Fedora / RHEL:

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

Dovresti installarlo iscsi-initiator-utilssul sistema client e utilizzarlo iscsiadmper inviare le destinazioni, quindi per "accedere" alle destinazioni elencate. Per esempio:

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

I LUN iSCSI verranno quindi presentati al sistema come normali dispositivi a blocchi. Su RHEL, puoi controllare il trasporto su cui arriva un determinato dispositivo, puoi semplicemente fare uno ls -l /dev/disk/by-path | grep iscsiper vedere quale memoria sta arrivando su iSCSI. Il percorso elencherà anche l'IQN della destinazione su cui hai effettuato l'accesso.

Quando il dispositivo iscsi non è più necessario, è possibile rimuoverlo tramite:

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

2
Se vuoi puoi aggiungere anche la tua A a questa AU Q, è ciò che mi ha spinto a scriverlo: askubuntu.com/questions/433231/…
slm

Vorrei, ma non ho davvero un sistema Ubuntu a portata di mano per garantire che i nomi dei pacchetti siano gli stessi o se gli esempi di configurazione a cui ho fatto riferimento sono a monte o semplicemente qualcosa che Red Hat fa. La configurazione stessa dovrebbe essere la stessa, però.
Bratchley,

1
Joel sei il migliore ... nessun sistema Ubuntu Cool
slm

1
In realtà era più facile da installare rispetto a NBD. Il problema con l'attuale NBD è che la maggior parte degli esempi / documentazione che trovi tramite google utilizza la configurazione vecchio stile, dove le versioni correnti hanno rimosso il supporto per esso. Inoltre, la versione <3.10 potrebbe avere il bug di sola lettura .
maxschlepzig,

9

Preferisci ovviamente la soluzione SAN. Oltre ai già citati iSCSI e NBD, hai anche l'approccio AoE (ATA over ethernet).

Questo è molto facile da fare:

Per quanto riguarda il servizio è necessario

modprobe aoe
vbladed 0 0 eth0 /dev/sdc

Dal lato client

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

I tuoi dispositivi sono presenti

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

Dov'è il e0.0tuo /dev/sdced e0.0.p1è/dev/sdc1

dmesg sul server:

[221384.454447] aoe: AoE v85 initialised.

dmesg output sul client:

[ 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

Molto facile.

Note aggiuntive

  • vbladedfa parte del pacchetto vbladesu Fedora e Ubuntu, probabilmente lo stesso anche in altre distro.
  • aoe-discovere aoe-statfanno parte del pacchetto anche aoetoolssu Fedora e Ubuntu.
  • Il dispositivo viene visualizzato fdiskcome un dispositivo a blocchi, ad esempio /dev/etherd/e0.0.
  • La versione vbladedisponibile nei repository F19 e ​​F20 è piuttosto datata, è la versione 14. La pagina del progetto ATAoE ha la versione 21 disponibile. C'è un RPM aggiornato disponibile per Fedora 19 x86_64 qui .

Ho provato a fare questo in b / n Fedora e Ubuntu, non funziona.
slm

Di solito controllo tutto prima di pubblicare. Q: è caricato aoe? Hai dato argomenti adeguati? Sul ricevitore: aoe ha trovato l'avversario? Cosa dice dmesg?

So che lo fai, non intendevo dire che era sbagliato solo che potrebbero esserci dei passaggi extra Cool
slm

ma non ci sono passaggi aggiuntivi, questo è davvero un compito facile.

1
ROTFL, e hai contato anche lo smartphone?

1

Sebbene questa soluzione funzioni, viene presentata solo come metodo per mostrare che TMWTDI.

Per questa configurazione abbiamo bisogno di un sistema ispirato unix per ospitare il dispositivo a blocchi e un sistema con un dispositivo di blocco loop back per il sistema per vederlo. Linux funzionerà per entrambi.

Successivamente abbiamo bisogno di un file system di rete stupido (non deve effettuare ottimizzazioni della memorizzazione dei dati), come samba o webdav. In particolare NFS e AFS non funzioneranno.

Posizionare il dispositivo a blocchi in una cartella esportata. ( man mknodaiuterà.) disabilitare il controllo del dispositivo a blocchi, se applicabile. monta il filesystem esportato sul computer client, crea un dispositivo loop usando il file importato come backup store e monta normalmente. ( losetupo mount -o loop)

Come e perché funziona, e perché le prestazioni fanno schifo: una delle idee alla base di unix è che tutto è un file, quindi i dispositivi sono file solo loro sono un po 'speciali (ecco perché sono chiamati file speciali). Esistono diversi tipi di file speciali che mknod può produrre, ma vedremo solo i dispositivi a blocchi. i dispositivi di blocco esistono nel file system come qualsiasi altro file e come qualsiasi altro file hanno proprietari, autorizzazioni, inode e nomi; ma hanno due differenze: non memorizzano i loro dati nel filesystem e hanno funzionalità extra in modo da poter essere montati. Se il file server è abbastanza stupido da non prestare attenzione a queste differenze, è possibile ignorarle ed esportarle come file normali. Successivamente il dispositivo loop prende un file ordinario (locale o remoto) e aggiunge le proprietà e le capacità speciali in modo da poter montare i file regolari come se fossero dispositivi a blocchi. Il grande svantaggio è rappresentato dalle prestazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.