我有一台 KVM 主机,上面有多个 VM。每个 VM 在主机上使用一个逻辑卷。我需要将 LV 复制到另一台主机。
通常,我会使用类似的东西:
dd if=/the/logical-volume of=/some/path/machine.dd
Run Code Online (Sandbox Code Playgroud)
将 LV 转换为图像文件并使用 SCP 移动它。然后使用 DD 将文件复制回新主机上的新 LV。
这种方法的问题是您需要的磁盘空间是虚拟机在两台机器上占用的磁盘空间的两倍。IE。一个 5GB 的 LV 为 LV 使用了 5GB 的空间,而 dd 副本也为图像使用了额外的 5GB 空间。这对于小型 LV 来说很好,但是如果(就像我的情况一样)您有一个 500GB 的 LV 用于大型 VM,该怎么办?新主机具有1TB硬盘,所以它不能保持一个500GB的DD镜像文件,并有一个500GB的逻辑卷复制到和有房的主机操作系统和房间其他较小的客人。
我想做的是:
dd if=/dev/mygroup-mylv of=192.168.1.103/dev/newvgroup-newlv
Run Code Online (Sandbox Code Playgroud)
换句话说,通过网络将数据直接从一个逻辑卷复制到另一个逻辑卷,并跳过中间映像文件。
这可能吗?
lar*_*sks 30
当然,当然有可能。
dd if=/dev/mygroup-mylv | ssh 192.168.1.103 dd of=/dev/newvgroup-newlv
Run Code Online (Sandbox Code Playgroud)
繁荣。
不过,帮自己一个忙,使用比默认块大小更大的东西。也许添加 bs=4M (以 4 MB 的块读取/写入)。你可以看到评论中有一些关于块大小的吹毛求疵;如果这是你经常做的事情,花点时间用不同的块大小尝试几次不同的时间,看看什么能让你获得最好的传输速率。
回答评论中的问题之一:
您可以通过pv管道传输以获取有关传输的统计信息。它比将信号发送到dd.
我还要说,虽然当然使用 netcat —— 或任何其他不强加加密开销的东西 —— 会更有效率,但我通常发现额外的速度会带来一些便利性的损失。除非我要处理非常大的数据集,否则尽管开销很大,我通常还是坚持使用 ssh,因为在大多数情况下,一切都已经设置为 Just Work。
小智 20
这是一个优化版本,它显示了使用pv和使用 BS 处理更大块的进度,还用于gzip减少网络流量。
在互联网服务器等慢速连接之间移动数据时,这是完美的。我建议在屏幕或 tmux 会话中运行该命令。这样就可以毫不费力地断开与您执行命令的主机的 ssh 连接。
$ dd if=/dev/volumegroupname/logicalvolume bs=4096 | pv | gzip | \
ssh root@78.46.36.22 'gzip -d | dd of=/dev/volumegroupname/logicalvolume bs=4096'
Run Code Online (Sandbox Code Playgroud)
小智 5
用一个老朋友来做这件事怎么样。网猫。
在丢失逻辑卷类型的系统上
$ dd if=/dev/[directory]/[volume-name] | nc -l [any high number port]然后在接收系统上。类型
$ nc -w 10 [ip or name] [port] | dd of=/dev/[directory/[volume name]翻译,源框 dd 这个文件并将其通过管道传输到将侦听此端口的 nc (netcat)。在接收系统上,netcat 将等待 10 秒,如果它在关闭到 [端口] 上的 [ip 或名称] 之前没有收到任何数据,然后将该数据通过管道传输到 dd 以将其写出。
| 归档时间: |
|
| 查看次数: |
39607 次 |
| 最近记录: |