如何使用dd,netcat和ssh隧道设置磁盘克隆?


26

我想dd通过Linux上的ssh加密通道将具有netcat的内容(使用netcat 进行批量复制)从主机A 复制到主机B。

我应该在两端键入什么命令?

Answers:


28

从源复制到目标已运行sshd的目标:

  • dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'

当目标未运行sshd时,通过sshd_host从源复制到目标。

  • 目标: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • 资源: ssh -L 62222:target:62222 sshd_host &
  • 资源: dd if=/dev/sda | nc -w 3 localhost 62222

    dd - if =是源,of =是目的地,bs =是块大小。不同的块大小可以提高性能。通常,16是一个相当合理的起点。您也可以使用count =指示要复制多少块。

    nc -- p表示用于服务的端口。 -l用于启动服务。 -w设置退出前等待管道中数据的时间。

    ssh -- L在远程主机上设置隧道。参数的格式为local_port:target_host:target_port。您的本地程序(nc)连接到local_port,此连接通过隧道连接并连接到target_host上的target_port。

定义的选项仅用于此目的。有关更多详细信息,请参见手册页。

一些注意事项:

  1. 如果您要通过LAN以外的任何设备执行此操作,建议您使用gzip或compress压缩数据流。Bzip2也可以工作,但是需要更多的CPU时间。第一个例子有这种用法。
  2. 如果未安装源分区或以只读方式安装,则更好。如果没有,您将需要锁定目标图像。
  3. 除非其中一台机器具有netcat但没有ssh,否则在这里实际上并不需要netcat。这种情况看起来像:

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. 如果源和目标大小相同,则dd效果最佳。如果不是,则目标必须大于2。
  2. 如果您使用ext2 / 3或xfs,则转储(或xfsdump)和还原可能是更好的选择。它不会处理引导扇区,但是当目标和源大小不同时,它将起作用。

4

如果要使用不带ssh的netcat。我认为这是最快的方法,而不是安全的方法,您可以像这样复制和还原整个磁盘:
在IP为192.168.0.1的计算机A上

cat /dev/hdb | nc -p 9000
在计算机B上
nc -l 192.168.0.1 9000 > /dev/hdb

请记住,根据man nc,-l选项为:

  -l用于指定nc应该侦听传入的连接,而不是发起与远程主机的连接。将此选项与-p,-s或-z选项一起使用是错误的

3

不需要netcat。

在src机器上运行:

dd if=/dev/sdX bs=1M | ssh root@dstMachine " dd of=/dev/sdY bs=1M"

我假设没有安装sdX和sdY上的任何分区。您可以使用knoppix或其他类似的现场发行版来启动两个设备。

dd-从if [如果未提供-从stdin 接收数据,则从stdin]获取数据,将数据发送到of [如果未提供-数据发送至stdout]。bs-块大小...将加快速度。

ssh-执行远程框上引号中提供的命令,所有泵送到ssh stdin的数据都将通过隧道传送到远程计算机,并作为stdin批准到那里执行的命令。


这样就不可能在挂载的磁盘上?
Evgeny

@Evgeny如果将磁盘安装为只读就可以了。否则-不要这样做...您的副本将不一致。
pQd

3

主机A是要映像的主机,主机B是要存储映像的主机:

root@A# dd if=/dev/sda | ssh root@B "dd of=/some/file"

恢复到磁盘只会交换这两个。


1

此处介绍了使用netcat的基本副本。

如果您需要让SSH参与其中,则可以在该端口上使用端口转发

-R [bind_address:]port:host:hostport

但是,总的来说,您可以首先进行SSH传输(不使用netcat)。


1

只要两个文件系统都卸载,dd就可以正常工作。

(from server1) dd if=/dev/sda bs=32k | ssh <server2> dd of=/dev/sda bs=32k

您需要提前设置主机密钥身份验证,否则密码提示将导致复制失败。

在已安装的卷上执行此操作将产生较差的结果。


谢谢。引号是否必要?
Evgeny


1

我尝试了上面提供的选项的组合,并与您分享结果。结合使用dd块大小,gzip和gzip压缩算法最快或最慢。

如您所见,当结合使用快速算法和1M块大小时,gzip仅给了我一个改进。

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 326.045 s, 39.5 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 370.158 s, 34.8 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 370.274 s, 34.8 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd bs=1M of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 372.906 s, 34.6 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 520.116 s, 24.8 MB/s

使用了两个快速服务器,这些服务器通过LVM通过本地磁盘通过企业GigE交换机与GigE连接。


0

看起来您在这里用大锤打碎了坚果-也许更好的比喻是试图用剪刀剪草坪:)

我强烈建议您看看其中有一些工具可以完成这样的工作,除非您有充分的理由自己进行这项工作。

Trinity Rescue Kit是一个免费的liveCD,它支持通过多播进行映像驱动,并且可以做您想做的事情(或者实际上其他任何人都在同一行思考),而无需使用全孔成像系统。

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.