Jak mogę zamontować urządzenie blokowe z jednego komputera do drugiego za pośrednictwem sieci jako urządzenie blokowe?


40

Czy można wyeksportować urządzenie blokowe, takie jak DVD lub CDROM, i umożliwić jego zamontowanie na innym komputerze jako urządzenie blokowe?

UWAGA: Nie jestem zainteresowany robieniem tego przy użyciu NFS lub Samby, tak naprawdę chcę, aby napęd optyczny pojawił się jako napęd optyczny na komputerze zdalnym.

Odpowiedzi:


33

Myślę, że możesz być w stanie osiągnąć to, co chcesz, używając bloków sieciowych (NBD). Patrząc na stronę wikipedii na ten temat, wspomina się o narzędziu o nazwie nbd. Składa się z komponentu klient i serwer.

Przykład

W tym scenariuszu konfiguruję CDROM na moim laptopie Fedora 19 (serwer) i udostępniam go w systemie Ubuntu 12.10 (klient).

instalacja
$ 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
udostępnianie płyty CD

Teraz z powrotem na serwerze (Fedodra 19) Robię podobne rzeczy, używając menedżera pakietów YUM. Po zakończeniu włożę płytę CD i uruchom to polecenie, aby udostępnić ją jako urządzenie blokujące:

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

Szybkie sprawdzenie, czy działa:

$ 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
Montaż płyty CD

Teraz z powrotem na kliencie Ubuntu musimy połączyć się z nbd-serverużyciem w ten nbd-clientsposób. UWAGA: w tym przykładzie nazwa serwera nbd to greeneggs.

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

(W niektórych systemach - np. Fedora - trzeba modprobe nbdnajpierw.)

Możemy potwierdzić, że w systemie Ubuntu jest teraz urządzenie blokowe, używając 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 

A teraz montujemy:

$ sudo mount /dev/nbd0p1 /mnt/
mount: block device /dev/nbd0p1 is write-protected, mounting read-only
$
zadziałało?

Napięcie mnie zabija i mamy start:

$ sudo ls /mnt/
EFI  GPL  isolinux  LiveOS

Jest zawartość LiveCD CentOS, którą zamontowałem w laptopie Fedory 19 i byłem w stanie zamontować jako urządzenie blokujące sieć na Ubuntu.


Rozumiem: „OSTRZEŻENIE Określanie eksportu w wierszu poleceń jest nieaktualne. Zamiast tego użyj pliku konfiguracyjnego”. Wersja: 3.3
guettli

@guettli - dzięki za opinie. Co to za dystrybucja?
slm

@sim openSUSE 13.1
guettli

Uwaga: greeneggsto nazwa hosta serwera.
devius

1
Zauważ, że protokół w starym stylu (tj. Używając jednego portu dla każdego urządzenia) został oznaczony jako przestarzały dla kilku wersji i został usunięty w wersji 3.10 .
maxschlepzig

20

Jedną z alternatyw dla nbd(jeśli jesteś zainteresowany) jest użycie iSCSI. tgtdmożna skonfigurować tak, aby /devurządzenie pełniło rolę pamięci zapasowej dla określonego ISCN ISCSI.

Jeśli korzystasz z systemu RHEL, wystarczy zainstalować, scsi-target-utilsa następnie skonfigurować / uruchomić tgtdsystem źródłowy. Konfiguracja tgtdmoże się zaangażować, ale Red Hat zapewnia wiele różnych przykładów dla różnych scenariuszy.

Na przykład:

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

Aby uruchomić go na Fedorze / RHEL:

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

Zainstalowałbyś iscsi-initiator-utilssię w systemie klienta i używałeś iscsiadmdo wysyłania celów, a następnie do „logowania się” do wyliczonych celów. Na przykład:

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

Jednostki iSCSI LUN będą następnie prezentowane w systemie jako zwykłe urządzenia blokowe. Na RHEL możesz sprawdzić transport nadchodzącego konkretnego urządzenia, możesz po prostu ls -l /dev/disk/by-path | grep iscsisprawdzić, jakie miejsce na dysku przesyła iSCSI. Ścieżka wyświetli także IQN celu, do którego zalogowałeś się powyżej.

Gdy urządzenie iscsi nie jest już potrzebne, można je usunąć poprzez:

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

2
Jeśli chcesz, możesz również dodać swoje A do tego AU Q, to skłoniło mnie do napisania tego: askubuntu.com/questions/433231/…
slm

Zrobiłbym to, ale tak naprawdę nie mam pod ręką systemu Ubuntu, aby upewnić się, że nazwy pakietów są takie same lub jeśli przykłady konfiguracji, o których wspomniałem, są nadrzędne lub po prostu coś, co robi Red Hat. Sama konfiguracja powinna być taka sama.
Bratchley,

1
Joel, jesteś najlepszy ... bez systemu Ubuntu 8-)
slm

1
W rzeczywistości było łatwiejsze do skonfigurowania niż NBD. Problem z obecnym NBD polega na tym, że większość przykładów / dokumentacji, które można znaleźć za pośrednictwem google, korzysta ze starej konfiguracji, w której obecne wersje usunęły tę obsługę. Ponadto wersja <3.10 może zawierać błąd tylko do odczytu .
maxschlepzig

9

Oczywiście wolisz rozwiązanie SAN. Oprócz wspomnianych już iSCSI i NBD, masz także podejście AoE (ATA over ethernet).

Jest to bardzo łatwe do zrobienia:

Po stronie serwującej musisz

modprobe aoe
vbladed 0 0 eth0 /dev/sdc

Po stronie klienta

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

Twoje urządzenia są włączone

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

Gdzie e0.0jest twój /dev/sdci gdzie e0.0.p1jest/dev/sdc1

dmesg na serwerze:

[221384.454447] aoe: AoE v85 initialised.

dmesg dane wyjściowe na kliencie:

[ 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

Całkiem łatwe.

Dodatkowe uwagi

  • vbladedjest częścią pakietu vbladeFedora i Ubuntu, prawdopodobnie podobnie w innych dystrybucjach.
  • aoe-discoveri aoe-statsą również częścią pakietu aoetoolsFedora i Ubuntu.
  • Urządzenie pojawia się fdiskjako urządzenie blokowe, na przykład /dev/etherd/e0.0.
  • Wersja vbladedostępna w repozytoriach F19 i F20 jest dość datowana, to jest wersja 14. Na stronie projektu ATAoE dostępna jest wersja 21. Tutaj dostępna jest zaktualizowana RPM dla Fedory 19 x86_64 .

Próbowałem zrobić to czarno-białe Fedora i Ubuntu, to nie działa.
slm

Zazwyczaj sprawdzam wszystko przed opublikowaniem. P: Czy aoe jest załadowane? Podałeś właściwe argumenty? Odbiorca: czy Aoe znalazła przeciwnika? Co mówi dmesg?

Wiem, że tak, nie sugerowałem, że to źle, tylko że mogą być jakieś dodatkowe kroki 8-)
slm

ale nie ma żadnych dodatkowych kroków, jest to naprawdę łatwe zadanie.

1
ROTFL, a ty też policzyłeś smartfona?

1

Chociaż to rozwiązanie działa, jest przedstawione jedynie jako metoda pokazania, że ​​TMWTDI.

Do tej konfiguracji potrzebujemy systemu zainspirowanego Uniksem do obsługi urządzenia blokowego oraz systemu z urządzeniem blokowym z pętlą zwrotną, aby system mógł go wyświetlić. Linux będzie działał dla obu.

Następnie potrzebujemy głupiego sieciowego systemu plików (nie może on optymalizować przechowywania danych), takiego jak samba lub webdav. W szczególności NFS i AFS nie będą działać.

Umieść urządzenie blokujące w eksportowanym folderze. ( man mknodpomoże.) wyłącz sprawdzanie urządzeń blokowych, jeśli dotyczy. zamontuj wyeksportowany system plików na komputerze klienckim, utwórz urządzenie pętlowe za pomocą importowanego pliku jako magazynu kopii zapasowych i podłącz jak zwykle. ( losetuplub mount -o loop)

Jak i dlaczego to działa oraz dlaczego wydajność jest do kitu: jedną z podstawowych idei unixa jest to, że wszystko jest plikiem, więc urządzenia są plikami, tylko że są trochę wyjątkowe (dlatego nazywane są plikami specjalnymi). Istnieje kilka rodzajów plików specjalnych, które może produkować mknod, ale przyjrzymy się tylko urządzeniom blokowym. urządzenia blokowe istnieją w systemie plików, jak każdy inny plik i jak każdy inny plik, który mają właścicieli, uprawnienia, i-węzły i nazwy; ale mają dwie różnice: nie przechowują swoich danych w systemie plików i mają dodatkowe możliwości, aby można je było zamontować. Jeśli serwer plików jest na tyle głupi, aby nie zwracać uwagi na te różnice, możesz je zignorować i wyeksportować jako zwykłe pliki. Następnie urządzenie pętli pobiera zwykły plik (lokalny lub zdalny) i dodaje specjalne właściwości i możliwości, dzięki czemu można montować zwykłe pliki tak, jakby były urządzeniami blokowymi. Dużą wadą jest wydajność.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.