如何通过网络将块设备从一台计算机安装到另一台计算机作为块设备?

slm*_*slm 43 linux dvd mount block-device data-cd

是否可以导出块设备(例如 DVD 或 CDROM)并使其可以作为块设备安装在另一台计算机上?

注意:我对使用 NFS 或 Samba 不感兴趣,我实际上希望光驱在远程计算机上显示为光驱。

slm*_*slm 35

我认为您可以使用网络块设备 (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-serverusing nbd-client注意:本例中 nbd-server 的名称是 greeneggs。

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

(在某些系统上 - 例如 Fedora - 必须modprobe nbd首先。)

我们可以使用以下命令确认 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 上的网络块设备。


Bra*_*ley 20

一种替代方法nbd(如果您感兴趣的话)是使用 iSCSI。tgtd可以配置为将/dev设备作为特定 iSCSI IQN 的后备存储。

如果您使用的是 RHEL 系统,那么您只需要在源系统上安装scsi-target-utils然后配置/启动tgtdtgtd可能会涉及到配置,但 Red Hat 为各种场景提供了大量不同的示例。

例如:

<target iqn.2008-09.com.example:server.target4>
    direct-store /dev/sdb      # Becomes LUN 1
    direct-store /dev/sdc      # Becomes LUN 2
    direct-store /dev/sdd      # Becomes LUN 3
    write-cache off
    vendor_id MyCompany Inc.
</target>
Run Code Online (Sandbox Code Playgroud)

在 Fedora/RHEL 上启动它:

# systemctl start tgtd.service
# firewall-cmd --add-service iscsi-target
Run Code Online (Sandbox Code Playgroud)

您将安装iscsi-initiator-utils在客户端系统上并用于iscsiadm发送目标,然后“登录”枚举的目标。例如:

# iscsiadm -m discovery -t sendtargets -p <remoteHost>
# iscsiadm -m node -T <Complete Target IQN> -l -p <remoteHost>
Run Code Online (Sandbox Code Playgroud)

然后,iSCSI LUN 将作为常规块设备呈现给系统。在 RHEL 上,您可以检查特定设备通过的传输,您只需执行ls -l /dev/disk/by-path | grep iscsi一下即可查看通过 iSCSI 传输的存储。该路径还将列出您在上面登录的目标的 IQN。

当不再需要 iSCSI 设备时,可以通过以下方式将其删除:

# iscsiadm -m node -T <Complete Target IQN> -u -p <remoteHost>
Run Code Online (Sandbox Code Playgroud)

  • 如果你想你也可以把你的 A 添加到这个 AU Q,这就是促使我写这个的原因:http://askubuntu.com/questions/433231/how-can-i-share-an-optical-drive-以一种方式愚弄客户进入思考它/ (2认同)

小智 9

您显然更喜欢 SAN 解决方案。除了已经提到的 iSCSI 和 NBD,您还有 AoE(以太网上的 ATA)方法。

这很容易做到:

在服务方面,您需要

modprobe aoe
vbladed 0 0 eth0 /dev/sdc
Run Code Online (Sandbox Code Playgroud)

在客户端

modprobe aoe
aoe-discover
aoe-stat
e0.0      1000.204GB       eth0 1024  up
Run Code Online (Sandbox Code Playgroud)

您的设备在

ls -l /dev/etherd/
c-w--w----  1 root disk 152, 3 Mar 12 22:47 discover
brw-rw----  1 root disk 152, 0 Mar 12 22:47 e0.0
brw-rw----  1 root disk 152, 1 Mar 12 22:47 e0.0p1
cr--r-----  1 root disk 152, 2 Mar 12 22:47 err
c-w--w----  1 root disk 152, 6 Mar 12 22:47 flush
c-w--w----  1 root disk 152, 4 Mar 12 22:47 interfaces
c-w--w----  1 root disk 152, 5 Mar 12 22:47 revalidate
Run Code Online (Sandbox Code Playgroud)

哪里e0.0是你/dev/sdce0.0.p1IS/dev/sdc1

dmesg 在服务器上:

[221384.454447] aoe: AoE v85 initialised.
Run Code Online (Sandbox Code Playgroud)

dmesg 客户端输出:

[ 1923.225832] aoe: AoE v85 initialised.
[ 1923.226379] aoe: e0.0: setting 1024 byte data frames
[ 1923.226910] aoe: 38607725d8b1 e0.0 v4014 has 1953525168 sectors
[ 1923.653820]  etherd/e0.0: p1
Run Code Online (Sandbox Code Playgroud)

挺容易。

补充说明

  • vbladedvbladeFedora 和 Ubuntu 上软件包的一部分,在其他发行版中也可能相同。
  • aoe-discover&aoe-stat也是aoetoolsFedora 和 Ubuntu软件包的一部分。
  • 设备显示fdisk为块设备,例如,/dev/etherd/e0.0
  • 的版本vblade这是在F19和F20软件仓库是相当过时,它的版本14. ATAoE项目页面有21个版本。此处适用于 Fedora 19 x86_64更新 RPM