通过networking将逻辑卷从一台服务器直接移到另一台服务器上?

我有一台KVM主机,上面有几个虚拟机。 每台虚拟机在主机上使用一个逻辑卷。 我需要将LV复制到另一台主机。

通常情况下,我会使用像这样的东西:

dd if=/the/logical-volume of=/some/path/machine.dd 

将LV变成图像文件并使用SCP移动它。 然后使用DD将文件复制回新主机上的新LV。

这种方法的问题是您需要两倍的虚拟机在两台机器上的磁盘空间。 即。 一个5GB的LV为LV使用了5GB的空间,dd副本也为图像增加了5GB的空间。 对于小LV来说,这是很好的,但是如果(就像我的情况那样)你有一个大型VM的500GB LV? 新的主机有一个1TB的硬盘,所以它不能容纳一个500GB的dd镜像文件, 有500GB的逻辑卷复制到主机操作系统, 为其他小客户提供空间。

我想要做的是这样的:

 dd if=/dev/mygroup-mylv of=192.168.1.103/dev/newvgroup-newlv 

换句话说,通过networking将数据从一个逻辑卷直接复制到另一个逻辑卷,并跳过中间映像文件。

这可能吗?

当然,这是可能的。

 dd if=/dev/mygroup-mylv | ssh 192.168.1.103 dd of=/dev/newvgroup-newlv 

繁荣。

尽pipe如此,请帮助自己,并使用大于默认块大小的内容。 也许增加bs = 4M(读/写块大小为4 MB)。 你可以看到在评论里面有一些挑剔的东西。 如果这是你经常做的事情,花点时间用不同的块来尝试几个不同的时间,然后看看你能获得最好的传输速率。

回答评论中的一个问题:

您可以通过pv传输传输统计信息。 它比发送信号到dd的输出要好得多。

我也会说,虽然使用netcat或其他任何不会增加encryption开销的东西会更有效率,但我通常会发现增加的速度会带来一些方便的损失。 除非我正在移动真正的大数据集,否则我通常坚持使用ssh,因为在大多数情况下,所有的东西都已经设置为Just Work。

这里有一个优化的版本,它显示了使用pv的进展,并使用BS更大的块,也使用gzip来减lessnetworkingstream量。

在互联网服务器等慢速连接之间移动数据时,这是完美的。 我build议在屏幕或tmux会话中运行该命令。 这样,从执行命令的主机到主机的ssh连接就可以毫无问题地断开连接。

 $ dd if=/dev/volumegroupname/logicalvolume bs=4096 | pv | gzip | \ ssh [email protected] 'gzip -d | dd of=/dev/volumegroupname/logicalvolume bs=4096' 

如何使用旧的朋友来做到这一点。 NetCat的。

在正在丢失逻辑卷types的系统上

  • $ dd if = / dev / [directory] ​​/ [volume-name] | nc -l [任何高数字端口]

然后在接收系统上。 types

  • $ nc -w 10 [ip或name] [port] | dd of = / dev / [目录/ [卷名]

瞧。 是的,有些人会抱怨netcat是UDP。 所以,如果你的局域网有丢包,你真的需要修复局域网恕我直言。

翻译,orgin box dd这个文件,并将其pipe道到将侦听此端口的nc(netcat)。 在接收系统上,如果netcat在closures[port]上的[ip或name]之前没有收到数据,将等待10秒钟,然后将数据写入dd中写出。

首先我要拍一下lv的快照:

 lvcreate --snapshot --name my_shot --size <thesize> /dev/<name of vg>/<name of lv> 

之后,你必须在新主机上创build一个新的lv(例如使用lvcreate),大小相同。 然后您可以直接将数据复制到新主机。 这是我的复制命令的例子:

 dd if=/dev/vg0/my_shot bs=4096 | pv | ssh root@some_host -C 'dd of=/dev/vg1/<created lv> bs=4096' 

我用这个过程把一个proxmox pve维护的VM复制到另一个主机。 逻辑卷包含由VM自己维护的几个额外的LV。