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

Evg*_*eny 27 dd ssh-tunnel disk-image netcat

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

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

Rik*_*der 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. 如果源分区未挂载或以只读方式挂载,则更好。如果不是,您将需要 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,转储(或 xfsdump)和还原可能是更好的选择。它不会处理引导扇区,但是当目标和源的大小不同时它可以工作。