如何以一种使客户误以为它是本地驱动器的方式共享光驱?


10

坦率地说,我的桌面有两个光驱,而媒体中心却没有(无法容纳一个)。在考虑购买外接光盘驱动器之前,我想看看是否存在一种在网络上捆绑驱动器的方法。

两台机器都是Ubuntu,它们已经具有共享的NFS,可以从桌面访问媒体。

我问的原因(而不仅仅是导出/ media / cdrom)是,已装载的NFS共享看起来像 CDROM风格的设备到远程计算机。这对我来说意义重大,因为我需要XBMC来识别驱动器,以便它能够自动适当地处理光盘。

现在,不知道是什么使光驱看起来像Ubuntu的光驱。如果我知道,那我可能会知道我需要做什么。我猜测某个时候会有一些热门udev动作。

是否存在某种共享块级设备(例如/dev/sr0)的方法,以便允许两台计算机分别安装它...我感觉就像翻滚一样,我可以看到所有这些大规模过度设计的解决方案,例如iSCSI直通虚拟化出现在我的面前……当然,有一种简单的方法可以在两台Ubuntu计算机之间共享一些驱动器模式!


我不知道这是否足够:thegeekstuff.com/2009/02/… ---我不知道它是否导出ioctlDVD所需的特殊文件。几年前,我曾将其用于交换网络的错误想法,然后直到现在忘记了……(更好的链接:linux-mag.com/id/7118
Rmano 2014年

我成功用于完成类似操作的2种方法是使用NFS和Samba,但是根据您的代表,我假设您肯定了解NFS,并且可能通过Samba进行了此操作。LMK如果您需要更多帮助。
slm 2014年

@slm是的,两台计算机之间已经存在NFS。我将CD添加/media/cdrom到nfs并在另一端安装了CD /media/cdrom(我可以看到文件),但是XBMC并未检测到介质更改(它认为安装点不是 DVD)。我在做蠢事吗?
奥利(Oli)

@Oli-好,请看我的A,让我知道您是否在找那个。顺便说一句,我使用的另一种方法是制作DVD的ISO,通过NFS共享,然后mount -o loop在其他计算机上本地共享。
slm 2014年

Answers:


9

我认为您可以使用网络块设备(NBD)来完成所需的工作。在有关该主题Wikipedia页面上,提到了一个名为的工具nbd。它由客户端和服务器组件组成。

在这种情况下,我将在Fedora 19笔记本电脑(服务器)上设置CDROM,并将其共享给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做类似的事情。完成后,我弹出CD并运行此命令以将其作为块设备共享出去:

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

我在Fedora 19笔记本电脑中安装了CentOS LiveCD的内容,并能够将其作为网络的块设备安装在Ubuntu上。

自动播放和自动挂载?

在上述设置中,我必须手动安装DVD。

在调查这种方法是否适用于自动播放和自动挂载的合理性时,Ubuntu的自动播放功能不可用,但是当我弹出磁盘时nbd-client,它nbd-server仍然存在。当我把DVD放回去时,我能够mount在Ubuntu上运行命令,这样就可以很好地重新安装DVD。

因此,我假设您可以在Ubuntu上使用UDEV规则来检测此更改并自动执行automount / autoplay。我不会尝试全部尝试,但是我看不到任何东西会让我认为它不起作用。


1
极好的指示!这不是完美的:我的软件仍然可以判断出它不是实际的磁盘驱动器。我猜ioctl不能很好地处理。但是,我能够在打ic的两台archlinux机器上完成这项工作!(Archlinux将客户端和服务器一起安装为“ nbd”。)
有限赎罪

3

此方法也使用NBD,但改用新样式配置。唯一的优点是您不必手动启动服务器,也不会收到难看的弃用警告。

安装nbd-servernbd-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-server(重新启动的示例):

sudo service nbd-server restart

然后,使用以下命令回到客户机上,以连接到服务器:

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

注意:替换dvd为您在上面的服务器配置中hostname使用的名称和服务器计算机的主机名。

最后,只需安装新的共享块设备即可:

sudo mount /dev/nbd0 /mnt/

如果您继续Negotiation: ..Error: Server closed connection Exiting.这样做,请同时注释掉user和中的group/etc/nbd-server/config。这使得nbd-server根访问您的/dev/sr0
Petr –jezdský 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.