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

Oli*_*Oli 11 nfs file-sharing optical

坦率地说,我处于一种荒谬的境地,我的台式机有两个光驱,而我的媒体中心没有(也没有一个空间)。在我考虑购买外置光驱这样极端的事情之前,我想看看是否有办法将我的驱动器连接到网络上。

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

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

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

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

slm*_*slm 10

我认为您可以使用网络块设备 (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
Run Code Online (Sandbox Code Playgroud) 共享 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.
$
Run Code Online (Sandbox Code Playgroud)

快速检查它是否正在运行:

$ 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
Run Code Online (Sandbox Code Playgroud) 安装光盘

现在回到 Ubuntu 客户端,我们需要像这样连接到nbd-server使用nbd-client

$ sudo nbd-client greeneggs 2000 /dev/nbd0
Negotiation: ..size = 643MB
bs=1024, sz=674983936 bytes
Run Code Online (Sandbox Code Playgroud)

我们可以使用以下命令确认 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 
Run Code Online (Sandbox Code Playgroud)

现在我们安装它:

$ sudo mount /dev/nbd0p1 /mnt/
mount: block device /dev/nbd0p1 is write-protected, mounting read-only
$
Run Code Online (Sandbox Code Playgroud) 它起作用了吗?

悬念正在扼杀我,我们有起飞:

$ sudo ls /mnt/
EFI  GPL  isolinux  LiveOS
Run Code Online (Sandbox Code Playgroud)

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

自动播放和自动挂载?

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

在调查这种方法是否适用于自动播放和自动挂载的合理性时,开箱即用,Ubuntu 的自动播放不起作用,但是当我弹出磁盘时nbd-client,它nbd-server一直在工作。当我放回 DVD 时,我能够mount在 Ubuntu 上运行命令,重新安装 DVD 就好了。

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