Как я могу смонтировать блочное устройство с одного компьютера на другой через сеть как блочное устройство?


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
делиться CD

Теперь вернувшись на сервер (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
Монтирование CD

Теперь вернемся к клиенту 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устройства в качестве резервного хранилища для конкретного ISCN iSCSI.

Если вы работаете в системе 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
Если вы хотите , вы можете добавить А к этому AU Q тоже, это то , что побудило меня написать этот вверх: askubuntu.com/questions/433231/...
ОДС

Я бы сказал, но у меня нет действительно системы Ubuntu, которая бы обеспечивала одинаковые имена пакетов, или если примеры конфигурации, на которые я ссылался, являются upstream или просто чем-то, что делает 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входит в пакет vbladeFedora & 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 загружен? Вы дали правильные аргументы? На приемнике: нашел ли противник? Что говорит dmesg?

Я знаю, что вы делаете, я не имел в виду, что это было неправильно, только что некоторые дополнительные шаги могут быть 8-)
SLM

но никаких дополнительных шагов нет, это действительно легкая задача.

1
ROTFL, а смартфон ты тоже считал?

1

Хотя это решение работает, оно представлено только как способ показать, что TMWTDI.

Для этой настройки нам нужна система под управлением Unix для размещения блочного устройства и система с устройством обратной петли, чтобы система могла просматривать его. Linux будет работать для обоих.

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

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

Как и почему это работает, и почему производительность отстой: одна из основных идей Unix состоит в том, что все является файлом, поэтому устройства - это файлы, только они немного особенные (именно поэтому они называются специальными файлами). Существует несколько типов специальных файлов, которые может создавать mknod, но мы рассмотрим только блочные устройства. блочные устройства существуют в файловой системе, как и любой другой файл, и, как и любой другой файл, имеют владельцев, разрешения, inode-ы и имена; но у них есть два отличия: они не хранят свои данные в файловой системе, и у них есть дополнительные возможности, позволяющие их монтировать. Если файловый сервер достаточно туп, чтобы не обращать внимания на эти различия, вы можете игнорировать их и экспортировать как обычные файлы. Затем устройство петли берет обычный файл (локальный или удаленный) и добавляет специальные свойства и возможности, так что вы можете монтировать обычные файлы, как если бы они были блочными устройствами. Большой недостаток - производительность.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.