Як я можу встановити блоковий пристрій з одного комп'ютера на інший через мережу як блоковий пристрій?


40

Чи можна експортувати блоковий пристрій, такий як DVD або CDROM, і зробити так, щоб його можна було встановити на інший комп'ютер як блок пристрою?

ПРИМІТКА: Мені не цікаво робити це за допомогою NFS або Samba, я фактично хочу, щоб оптичний привід відображався як оптичний привід на віддаленому комп'ютері.

Відповіді:


33

Я думаю, ви, можливо, зможете виконати те, що хочете, використовуючи пристрої мережевого блоку (NBD). Переглядаючи сторінку вікіпедії з цього приводу , згадується інструмент під назвою nbd. Він складається з клієнтського та серверного компонентів.

Приклад

У цьому випадку я налаштовую CDROM на свій ноутбук Fedora 19 (сервер) і ділюсь ним із системою Ubuntu 12.10 (клієнт).

встановлення
$ 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
обмін компакт-диском

Тепер повернувся на сервер (Fedodra 19), я роблю подібну річ, використовуючи його менеджер пакунків YUM. Після завершення я вставляю компакт-диск і виконую цю команду, щоб поділитися ним як блоковий пристрій:

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

Швидка перевірка, щоб перевірити, чи працює вона:

$ 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
Монтаж компакт-диска

Тепер повернемося на клієнті Ubuntu нам потрібно підключитися до nbd-serverвикористовуючи nbd-clientяк так. ПРИМІТКА: ім'я nbd-сервера є greeneggs у цьому прикладі.

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

(У деяких системах - наприклад, Fedora - потрібно modprobe nbdспочатку.)

Ми можемо підтвердити, що зараз в системі Ubuntu блоковий пристрій використовується 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 

А тепер ми монтуємо його:

$ sudo mount /dev/nbd0p1 /mnt/
mount: block device /dev/nbd0p1 is write-protected, mounting read-only
$
це спрацювало?

Суспензія вбиває мене, і ми маємо відношення:

$ sudo ls /mnt/
EFI  GPL  isolinux  LiveOS

Там є вміст LiveCD з CentOS, який я встановив на ноутбуці Fedora 19 і міг змонтувати його як блоковий пристрій мережі на Ubuntu.


Я отримую це: "ПОПЕРЕДЖЕННЯ Вказівка ​​експорту в командному рядку застаріла. Натомість використовуйте файл конфігурації". Версія: 3.3
guettli

@guettli - дякую за відгук. На чому це було дистрибутивом?
slm

@sim openSUSE 13.1
guettli

Примітка: greeneggsім'я хоста сервера.
Девіус

1
Зауважте, що протокол старого стилю (тобто, використовуючи один порт для кожного пристрою) був позначений як застарілий для декількох версій і був вилучений у nbd 3.10 .
maxschlepzig

20

Однією з альтернатив nbd(якщо вам цікаво) є використання iSCSI. tgtdможе бути налаштований на /devпристрій як резервне сховище для певного iSCSI IQN.

Якщо ви користуєтесь системою RHEL, то вам просто потрібно встановити scsi-target-utilsта налаштувати / запустити tgtdв вихідній системі. Конфігурація tgtdможе залучатися, але Red Hat надає безліч різних прикладів для різних сценаріїв.

Наприклад:

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

Щоб запустити його на Fedora / RHEL:

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

Ви встановите iscsi-initiator-utilsна клієнтській системі та використовуєте iscsiadmдля надсилання цілей, щоб потім "увійти" в перелічені цілі. Наприклад:

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

Далі iSCSI LUN буде представлено системі як звичайні блокові пристрої. На RHEL ви можете перевірити транспортування певного пристрою, ви можете просто зробити, ls -l /dev/disk/by-path | grep iscsiщоб побачити, яке сховище надходить над iSCSI. Шлях також містить список IQN цілі, в яку ви ввійшли вище.

Коли пристрій iscsi більше не потрібен, його можна видалити за допомогою:

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

2
Якщо ви хочете, щоб ви також могли додати свій A до цього AU Q, саме це підштовхнуло мене написати це: askubuntu.com/questions/433231/…
slm

Я б хотів, але в мене не дуже зручна система Ubuntu, щоб переконатися, що імена пакетів однакові, або якщо приклади конфігурації, на які я посилався, - це вище або лише те, що робить Red Hat. Сама конфігурація повинна бути однаковою.
Братчлі

1
Джоель, ти найкращий ... немає системи Ubuntu 8-)
slm

1
Насправді було простіше налаштувати, ніж NBD. Проблема з поточним NBD полягає в тому, що більшість прикладів / документації, які ви знайдете через google, використовують конфігурацію старого стилю, де поточні версії видалили підтримку. Також версія <3.10 може мати помилку, доступну лише для читання .
maxschlepzig

9

Ви, очевидно, віддаєте перевагу рішенню SAN. Окрім уже згаданих iSCSI та NBD, у вас є також підхід AoE (ATA over ethernet).

Це зробити дуже просто:

На стороні подачі вам потрібно

modprobe aoe
vbladed 0 0 eth0 /dev/sdc

На стороні клієнта

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

Ваші пристрої ввімкнено

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

Де e0.0твій /dev/sdcі e0.0.p1є/dev/sdc1

dmesg на сервері:

[221384.454447] aoe: AoE v85 initialised.

dmesg вихід на клієнта:

[ 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

Досить легко.

додаткові нотатки

  • vbladedє частиною пакету vbladeна Fedora & Ubuntu, імовірно, такий же і в інших дистрибутивах.
  • aoe-discover& також aoe-statє частиною пакету aoetoolsна Fedora & Ubuntu.
  • Прилад показує в fdiskякості блочного пристрою, наприклад, /dev/etherd/e0.0.
  • Версія vblade, доступна у сховищах F19 та F20, є досить датною, це версія 14. На сторінці проекту ATAoE є версія 21. Тут доступний оновлений RPM для Fedora 19 x86_64 .

Спробувавши це в / ч Fedora та Ubuntu, це не працює.
slm

Я зазвичай перевіряю все, перш ніж публікувати. Q: завантажується Aoe? Ви наводили належні аргументи? На приймачі: aoe знайшов опонента? Що говорить dmesg?

Я знаю, що ви знаєте, я не мав на увазі, що помилявся лише тим, що можуть бути якісь додаткові кроки 8-)
slm

але зайвих кроків немає, це дійсно легке завдання.

1
ROTFL, а ти порахував смартфон теж?

1

Хоча це рішення працює, воно подається лише як метод показати, що TMWTDI.

Для цього налаштування нам потрібна система натхнення Unix для розміщення блокового пристрою, а також система із блоком блоку зворотного циклу для її перегляду. Linux буде працювати для обох.

Далі нам потрібна німа мережева файлова система (вона не повинна оптимізувати зберігання даних), як samba або webdav. Зокрема, NFS та AFS не працюватимуть.

Помістіть блоковий пристрій у папку, яка експортується. ( man mknodдопоможе.) відключити перевірку блокових пристроїв, якщо це можливо. змонтуйте експортовану файлову систему на клієнтському комп'ютері, створіть циклічний пристрій, використовуючи імпортований файл у міру зберігання і зберігайте як звичайне. ( losetupабо mount -o loop)

Як і навіщо це працює, і чому продуктивність відстійна: Однією з основних ідей Unix є те, що все є файлом, тому пристрої - це лише файли, вони трохи особливі (саме тому їх називають спеціальними файлами). Існує декілька типів спеціальних файлів, які може створювати mknod, але ми лише будемо розглядати блокові пристрої. блокові пристрої існують у файловій системі, як і будь-який інший файл, і як і будь-який інший файл, у якого є власники, дозволи, вставки та імена; але вони мають дві відмінності: вони не зберігають свої дані у файловій системі, і вони мають додаткові можливості, щоб їх можна було встановити. Якщо файловий сервер досить німий, щоб не звертати уваги на ці відмінності, ви можете їх ігнорувати та експортувати як звичайні файли. Далі циклічний пристрій бере звичайний файл (локальний або віддалений) і додає особливі властивості та можливості, щоб ви могли монтувати звичайні файли так, ніби вони блокові пристрої. Великий недолік - продуктивність.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.