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


我想批量复制东西(重新映像磁盘使用 dd)使用netcat从主机A到B通过Linux上的ssh加密通道。

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


24
2017-08-07 17:32






答案:


从源复制到目标运行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  - 如果= 是来源, 的= 是目的地, BS = 块大小。不同的块大小可以提高性能。 16通常是一个相当合理的起点。你也可以使用 数= 指示要复制的块数。

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

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

定义的选项只是用于此的选项。查看手册页以获取更多详细信息。

几点说明:

  1. 如果你在LAN以外的任何地方这样做,我建议用gzip或compress压缩数据流。 Bzip2也可以工作,但需要更多的CPU时间。第一个有一个使用示例。
  2. 如果源分区未安装或以只读方式安装,则更好。如果不是,您将需要fsck目标图像。
  3. 除非其中一台机器有netcat而不是ssh,否则这里不需要netcat。那种情况看起来像:

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

  1. 如果源和目标的大小相同,则dd效果最佳。如果不是,目标必须是2中的较大者。
  2. 如果您使用的是ext2 / 3或xfs,则dump(或xfsdump)和restore可能是更好的选择。它不会处理引导扇区,但是当目标和源的大小不同时它可以工作。

26
2017-08-07 19:14





如果你想使用没有ssh的netcat。我认为这是最快的方式而不是安全方式,你可以像这样复制和恢复整个磁盘:
在计算机A上,IP为192.168.0.1

cat /dev/hdb | nc -p 9000


4
2017-08-07 18:11





不需要netcat。

在src机器上运行:

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

我假设没有安装sdX和sdY上的分区。你可以启动两个盒子 Knoppix的 或其他类似的现场发行。

dd - 从中​​获取数据 如果 [如果没有提供 - 从stdin获取],将数据发送到  [如果没有提供 - 数据被发送到stdout]。 BS  - 块大小......会加快速度。

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


3
2017-08-07 17:47



所以在安装的磁盘上是不可能的? - Evgeny
@Evgeny如果磁盘以只读方式挂载就没问题。否则 - 不要这样做......你的副本会不一致。 - pQd


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

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

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


2
2017-08-07 17:48





netcat的基本副本 在这里描述

如果你需要得到 SSH 参与其中,你可以使用 转发端口 在那之上,

-R [bind_address:]port:host:hostport

但是,总的来说,你可以首先进行SSH传输(没有netcat)。


1
2017-08-07 17:46





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

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

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

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


1
2017-08-07 17:47



谢谢。是必要的报价? - Evgeny


或者,您可以使用clonezilla并通过sshfs“挂载”您的远程存储。


1
2017-08-08 02:00



如果要复制分区,是否要将目标分区卸载?有关此选项的更多详细信息将很有帮助。 - Mark Stosberg


我尝试了上面提供的选项组合,并与您分享结果。使用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

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


1
2017-07-30 05:13





看起来你正在使用大锤在这里破解坚果 - 或者更好的类比是试图用剪刀剪草坪:)

我强烈建议你看看那些做这样的工作的工具,除非你有很好的理由在内部完成。

Trinity救援套件 是一个免费的liveCD,它支持多播上的成像驱动,可能会做你想要的(或者其他任何人在同一条线上思考),而无需使用全孔成像系统。


0
2017-08-08 10:48