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

10

Я нахожусь в откровенно нелепой ситуации, когда на моем рабочем столе два оптических привода, а в моем медиацентре их нет (и места для одного) нет. Прежде чем рассматривать что-то столь же экстремальное, как приобретение внешнего оптического дисковода, я хотел бы посмотреть, есть ли способ подключения моих накопителей по сети.

Обе машины являются Ubuntu, и у них уже есть общий доступ к NFS для доступа к медиа с рабочего стола.

Причина, по которой я спрашиваю (а не просто экспортирую / media / cdrom), заключается в том, что смонтированный общий ресурс NFS не похож на устройство в стиле CDROM для удаленной машины. Это важно для меня, потому что мне нужно, чтобы XBMC распознал диск как таковой, чтобы он мог обрабатывать диски автоматически и соответствующим образом.

Теперь я не знаю, что делает оптический привод похожим на оптический привод для Ubuntu. Если бы я знал это, я бы, наверное, знал, что мне нужно было сделать. Я предполагаю, что в какой- udevто момент там есть какое-то горячее действие.

Есть ли какой-нибудь способ совместного использования устройства на уровне блоков (например /dev/sr0), позволяющий обоим компьютерам монтировать его по отдельности ... Мне кажется, что я падаю в кроличью нору и вижу все эти чрезмерно сложные решения, такие как iSCSI и сквозная виртуализация появляется передо мной ... Конечно, есть простой способ разделить несколько режимов дисков между двумя компьютерами Ubuntu!

Оли
источник
Я не знаю, достаточно ли этого: thegeekstuff.com/2009/02/… --- Я не знаю, экспортирует ли он специальную информацию, ioctlнеобходимую для DVD. Я использовал это несколько лет назад для дурной мысли об обмене через сеть, а потом забыл до сих пор ... (лучшая ссылка: linux-mag.com/id/7118 )
Rmano
Два метода, которые я успешно использовал для подобных вещей, - это использование NFS и Samba, но, учитывая ваше мнение, я предполагаю, что вы наверняка знаете о NFS и, возможно, делаете это через Samba. ЛМК, если вам нужна дополнительная помощь с этим.
Slm
@slm Да, между двумя компьютерами уже есть NFS. Я добавил компакт-диск /media/cdromв nfs и смонтировал его на другом конце как /media/cdrom(и я вижу файлы), но XBMC не обнаруживает смену носителя (он не думает, что точка монтирования - это DVD). Я делаю что-то глупое?
Оли
@Oli - Хорошо, посмотри на мой А и дай мне знать, если это то, что ты ищешь. Кстати, другой метод, который я использовал, - это создать ISO-образ DVD-диска, поделиться им по NFS, а затем mount -o loopлокально на других компьютерах.
Slm

Ответы:

9

Я думаю, что вы могли бы достичь того, что вы хотите, используя сетевые блочные устройства (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следующим образом:

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

Мы можем подтвердить, что в системе 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.

Автозапуск и автонастройка?

В приведенной выше настройке мне пришлось вручную смонтировать DVD.

При исследовании правдоподобия того, будет ли этот подход работать с автопроигрыванием и автоматическим монтированием, автопроигрывание в Ubuntu не работает, а работает nbd-clientи nbd-serverостается, когда я извлекал диск. Когда я вставил DVD обратно, я смог запустить mountкоманду в Ubuntu, которая прекрасно перемонтировала DVD.

Поэтому я хотел бы предположить, что вы можете вставить правило UDEV в Ubuntu, чтобы обнаружить это изменение и автоматически выполнить автоподключение / автозапуск. Я не собираюсь пробовать все это, но я не вижу ничего, что заставило бы меня думать, что это не сработает.

ОДС
источник
1
Отличная инструкция! Это не идеально: мое программное обеспечение все еще может сказать, что это не настоящий дисковод. Я предполагаю, ioctlчто не обрабатывается идеально. Но я смог сделать эту работу на двух машинах archlinux с нулевой икотой! (Archlinux установил клиент и сервер вместе как 'nbd'.)
Ограниченное искупление
3

Этот метод также использует NBD, но вместо этого использует новую конфигурацию стиля. Единственными преимуществами являются то, что вам не нужно запускать сервер вручную, и вы не получите уродливое предупреждение об устаревании.

После установки nbd-serverи nbd-clientпакеты приступить к редактированию файла конфигурации на сервере ( /etc/nbd-server/config) и убедитесь , что он выглядит примерно так:

[generic]
# If you want to run everything as root rather than the nbd user, you
# may either say "root" in the two following lines, or remove them
# altogether. Do not remove the [generic] section, however.
    user = nbd
    group = cdrom
    includedir = /etc/nbd-server/conf.d
    allowlist = true

# What follows are export definitions. You may create as much of them as
# you want, but the section header has to be unique.

[dvd]
    exportname = /dev/sr0
    readonly = true

Примечание . [dvd]Надпись выше - это заголовок раздела, и это может быть любое слово, которое вы хотите заключить в квадратные скобки. Он используется для идентификации этого конкретного ресурса, поэтому убедитесь, что вы используете имя, которое легко и очевидно.

После сохранения изменений в файле конфигурации, либо запустите, либо перезапустите nbd-сервер (пример перезапуска):

sudo service nbd-server restart

Затем снова на клиентском компьютере подключитесь к серверу с помощью команды:

sudo nbd-client -N dvd hostname /dev/nbd0

Примечание. Замените dvdна имя, которое вы использовали в конфигурации сервера выше, и hostnameна имя хоста сервера.

Наконец, нужно просто смонтировать новое устройство с общим доступом:

sudo mount /dev/nbd0 /mnt/
devius
источник
Если вы продолжаете получать, Negotiation: ..Error: Server closed connection Exiting.закомментируйте оба userи groupстроки в /etc/nbd-server/config. Это заставляет запускаться nbd-serverпод root, у кого есть доступ к вашему/dev/sr0
Petr Újezdský