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

我想通过Linux上的sshencryption通道批量复制东西(使用dd格式的reimage磁盘)和netcat从主机A到B。

我应该在两端input什么命令?

    从源代码复制到目标已经运行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)) 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=/dev/sda | nc -w 3 localhost 62222

      ddif =是源, =是目标, bs =是块的大小。 不同的块大小可能会提高性能。 16通常是一个比较合理的出发点。 您也可以使用count =来指示要复制的块数。

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

      ssh -L在远程主机上build立隧道。 参数的格式是local_port:target_host:target_port 。 你的本地程序(nc)连接到local_port,这个连接隧道连接到target_host上的target_port。

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

    一些注意事项:

    1. 如果你是通过局域网来做这件事的话,我build议用gzip或compress来压缩数据stream。 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可能是更好的select。 它不会处理启动扇区,但它的目标和来源是不同的大小。

    如果你想使用没有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选项结合使用是错误的

    netcat是不需要的。

    在src机器上运行:

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

    我想在sdX和sdY上没有分区挂载。 您可以用knoppix或其他类似的现场发行版启动这两个盒子。

    dd – 从if [如果未提供 – 从标准input中]获取数据,将数据发送到[如果未提供 – 数据发送到标准输出]。 BS – 块大小…将加速事情。

    ssh – 执行在远程框中引用提供的命令,所有input到ssh的数据将被隧道传输到远程计算机,并作为stdin命令执行在那里执行。

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

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

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

    这里描述了netcat的基本副本。

    如果你需要涉及到SSH ,你可以使用端口转发

     -R [bind_address:]port:host:hostport 

    但是,总体而言,您可以首先进行SSH传输(不使用netcat)。

    只要文件系统都是卸载的,dd工作的很好。

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

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

    在安装量上做这个会产生不好的结果。

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

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

    正如你可以看到gzip只使用快速algorithm和1M块大小的改进。

     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连接。

    看起来你正在用大锤在这里破解一个坚果 – 或者更好的比喻是用剪刀砍掉你的草坪:)

    我强烈build议你看看这样的工作,除非你有很好的理由去做这个工作。

    Trinity Rescue Kit是一款免费的liveCD,它支持通过多路广播进行成像驱动,并且可以做你想做的事情(或者其他任何人在同一线路上思考),而不需要全面的成像系统。