AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 51567
Accepted
Evgeny
Evgeny
Asked: 2009-08-08 09:32:46 +0800 CST2009-08-08 09:32:46 +0800 CST 2009-08-08 09:32:46 +0800 CST

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

  • 772

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

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

ssh-tunnel
  • 9 9 个回答
  • 30535 Views

9 个回答

  • Voted
  1. Best Answer
    Rik Schneider
    2009-08-08T11:14:32+08:002009-08-08T11:14:32+08:00

    从源复制到目标运行 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)和恢复可能是更好的选择。它不会处理引导扇区,但是当目标和源大小不同时它可以工作。
    • 29
  2. pQd
    2009-08-08T09:47:11+08:002009-08-08T09:47:11+08:00

    不需要netcat。

    在 src 机器上运行:

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

    我假设没有安装 sdX 和 sdY 上的分区。您可以使用knoppix或其他类似的 live 发行版启动这两个盒子。

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

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

    • 3
  3. Bill Weiss
    2009-08-08T09:48:30+08:002009-08-08T09:48:30+08:00

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

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

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

    • 3
  4. Ali Mezgani
    2009-08-08T10:11:20+08:002009-08-08T10:11:20+08:00

    如果你想在没有 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
  5. nik
    2009-08-08T09:46:22+08:002009-08-08T09:46:22+08:00

    此处描述了 netcat 的基本副本。

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

    -R [bind_address:]port:host:hostport
    

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

    • 1
  6. Dominic D
    2009-08-08T09:47:34+08:002009-08-08T09:47:34+08:00

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

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

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

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

    • 1
  7. David Mackintosh
    2009-08-08T18:00:14+08:002009-08-08T18:00:14+08:00

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

    • 1
  8. Edward Groenendaal
    2013-07-30T21:13:46+08:002013-07-30T21:13:46+08:00

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

    如您所见,gzip 仅在将快速算法与 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 连接。

    • 1
  9. Tom Newton
    2011-08-09T02:48:14+08:002011-08-09T02:48:14+08:00

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

    我强烈建议您查看一些用于完成此类工作的工具,除非您有充分的理由在内部进行。

    Trinity Rescue Kit是一个免费的 liveCD,它支持多播上的成像驱动器,并且可以做你想做的事情(或者实际上任何其他人在同一条线上思考),而无需使用全口径成像系统。

    • 0

相关问题

  • webdav 的安全性如何?smb 通过 ssh 隧道(使用 putty)是更好的解决方案吗?

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • 在 Amazon ec2 和本地 Intranet Web 服务之间连接

  • 将端口转发到另一个 Ip/端口

  • 配置 mutt 以通过 SSH 隧道发送电子邮件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve