我怎样才能以一种让客户端误以为它是本地驱动器的方式共享光驱?

我怎样才能以一种让客户端误以为它是本地驱动器的方式共享光驱?

说实话,我现在的处境很荒唐,我的台式机有两个光驱,而我的媒体中心却没有(也没有空间放一个)。在考虑购买外置光驱这种极端做法之前,我想看看是否有办法通过网络绑定我的驱动器。

两台机器都是 Ubuntu,并且已经设置了 NFS 共享来从桌面访问媒体。

我之所以问这个问题(而不是仅仅导出 /media/cdrom),是因为挂载的 NFS 共享不会看起来像CDROM 样式的设备到远程机器。这对我来说很重要,因为我需要 XBMC 识别驱动器,以便它能够自动且适当地处理光盘。

现在不知道什么是光驱就像 Ubuntu 的光驱一样。如果我知道这一点,我可能就会知道我需要做什么。我猜udev在某个时候会有一些热门动作。

是否有某种方式可以共享块级设备(例如/dev/sr0),从而允许两台计算机分别安装它...我感觉自己正在掉进兔子洞,我可以看到所有这些大规模过度设计的解决方案,如iSCSI和直通虚拟化出现在我面前...肯定有一种简单的方法可以在两台 Ubuntu 计算机之间共享一些驱动模式!

答案1

我认为您可以使用网络块设备 (NBD) 来实现您想要的功能。查看关于该主题的维基百科页面其中提到了一个名为的工具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-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

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

自动播放和自动安装?

在上面的设置中我必须手动安装 DVD。

在调查此方法是否适用于自动播放和自动安装的可行性时,Ubuntu 的自动播放功能在出厂时不起作用,但当我弹出磁盘时,nbd-clientnbd-server仍然保持运行。当我将 DVD 放回去时,我能够在 Ubuntu 上运行命令mount,它可以很好地重新安装 DVD。

因此,我假设您可以在 Ubuntu 上设置 UDEV 规则来检测此更改并自动执行自动挂载/自动播放。我不会尝试所有操作,但我没有看到任何让我认为它不起作用的东西。

答案2

此方法也使用 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/

相关内容