![我怎样才能以一种让客户端误以为它是本地驱动器的方式共享光驱?](https://linux22.com/image/1119682/%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E4%BB%A5%E4%B8%80%E7%A7%8D%E8%AE%A9%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AF%AF%E4%BB%A5%E4%B8%BA%E5%AE%83%E6%98%AF%E6%9C%AC%E5%9C%B0%E9%A9%B1%E5%8A%A8%E5%99%A8%E7%9A%84%E6%96%B9%E5%BC%8F%E5%85%B1%E4%BA%AB%E5%85%89%E9%A9%B1%EF%BC%9F.png)
说实话,我现在的处境很荒唐,我的台式机有两个光驱,而我的媒体中心却没有(也没有空间放一个)。在考虑购买外置光驱这种极端做法之前,我想看看是否有办法通过网络绑定我的驱动器。
两台机器都是 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-client
和nbd-server
仍然保持运行。当我将 DVD 放回去时,我能够在 Ubuntu 上运行命令mount
,它可以很好地重新安装 DVD。
因此,我假设您可以在 Ubuntu 上设置 UDEV 规则来检测此更改并自动执行自动挂载/自动播放。我不会尝试所有操作,但我没有看到任何让我认为它不起作用的东西。
答案2
此方法也使用 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-server(重新启动的示例):
sudo service nbd-server restart
然后,返回客户端计算机使用以下命令连接到服务器:
sudo nbd-client -N dvd hostname /dev/nbd0
笔记:将其替换dvd
为您在上面的服务器配置中使用的名称以及hostname
服务器的主机名。
最后只需安装新的共享块设备:
sudo mount /dev/nbd0 /mnt/