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


40

是否可以导出诸如DVD或CDROM之类的阻止设备并使其能够作为阻止设备安装在另一台计算机上?

注意:我对使用NFS或Samba进行此操作不感兴趣,我实际上希望将光驱显示为远程计算机上的光驱。

Answers:


33

我认为您可以使用网络块设备(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-serverusing nbd-client注意:在此示例中,nbd服务器的名称为greeneggs。

$ sudo nbd-client greeneggs 2000 /dev/nbd0
Negotiation: ..size = 643MB
bs=1024, sz=674983936 bytes

(在某些系统上,例如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 

现在我们挂载它:

$ 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上。


我得到这样的信息:“警告在命令行中指定导出已被弃用。请改为使用配置文件”。版本:3.3
guettli 2014年

@guettli-感谢您的反馈。这是什么发行版?
slm

@sim openSUSE 13.1
guettli 2014年

注意:greeneggs是服务器的主机名。
devius

1
请注意,旧式协议(即,每个设备使用一个端口)已标记为多个版本已弃用,并 已在nbd 3.10中删除
maxschlepzig

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>

要在Fedora / RHEL上启动它:

# systemctl start tgtd.service
# firewall-cmd --add-service iscsi-target

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

# iscsiadm -m discovery -t sendtargets -p <remoteHost>
# iscsiadm -m node -T <Complete Target IQN> -l -p <remoteHost>

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

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

# iscsiadm -m node -T <Complete Target IQN> -u -p <remoteHost>

2
如果您也想将A添加到此AU Q中,这就是促使我写下这一点的原因:askubuntu.com/questions/433231/…–
slm

可以,但是我真的没有方便的Ubuntu系统来确保软件包名称相同,或者如果我引用的配置示例在上游还是Red Hat所做的事情。但是,配置本身应该相同。
布拉奇利2014年

1
乔尔(Joel)是最好的……没有Ubuntu系统8
slm

1
实际上比NBD更容易设置。当前NBD的问题在于,您在Google上找到的大多数示例/文档都使用旧式配置,而当前版本删除了对该版本的支持。另外,版本<3.10可能具有只读错误
maxschlepzig 2015年

9

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

这很容易做到:

在服务方面,您需要

modprobe aoe
vbladed 0 0 eth0 /dev/sdc

在客户端

modprobe aoe
aoe-discover
aoe-stat
e0.0      1000.204GB       eth0 1024  up

您的设备在

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

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

dmesg 在服务器上:

[221384.454447] aoe: AoE v85 initialised.

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

相当容易。

补充笔记

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

尝试这样做的Fedora和Ubuntu,它无法正常工作。
slm

我通常会在发布之前检查所有内容。问:装满了祸根吗?您提出适当的论点了吗?接收者:aoe找到了对手吗?怎么dmesg说呢?

我知道你知道,我并不是在暗示这只是错误的,只是可能还有一些额外的步骤8
slm

但是没有多余的步骤,这确实是一件容易的事。

1
ROTFL,您也数过智能手机吗?

1

尽管此解决方案有效,但仅作为显示TMWTDI的方法来提供。

对于此设置,我们需要一个受Unix启发的系统来托管块设备,并且需要一个具有环回块设备的系统以供系统查看。Linux将对两者都起作用。

接下来,我们需要一个笨拙的网络文件系统(它不能优化数据存储),例如samba或webdav。特别是NFS,而AFS将不起作用。

将块设备放置在导出的文件夹中。(man mknod将有所帮助。)禁用块设备检查(如果适用)。在客户端计算机上安装导出的文件系统,使用导入的文件作为后备存储创建循环设备,然后按正常方式安装。(losetupmount -o loop

它是如何工作的以及为什么起作用以及性能为何如此糟糕:unix背后的核心思想之一是,一切都是文件,因此设备是文件,只是它们有些特殊(这就是为什么它们被称为特殊文件)的原因。mknod可以生成几种特殊文件,但是我们只看块设备。文件系统中存在块设备,就像任何其他文件一样,它们与拥有所有者,权限,索引节点和名称的任何其他文件一样;但是它们有两个区别:它们不将数据存储在文件系统中,并且具有额外的功能以便可以挂载。如果文件服务器很笨,无法注意这些差异,则可以忽略它们并将它们导出为常规文件。接下来,循环设备将获取一个普通文件(本地文件或远程文件),并添加特殊的属性和功能,以便您可以将常规文件挂载为块设备。最大的缺点是性能。

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.