可用dd与nc组合实现/dev/sda到目标主机的实时流式备份:目标机执行nc -l -p 1234 | dd of=/dev/sdb bs=4m conv=notrunc,noerror,源机执行dd if=/dev/sda bs=4m status=progress | nc 192.168.1.100 1234,需root权限、内网互通、端口放行及足够存储空间。

可以用 dd 和 nc(netcat)组合,把源主机的块设备(如 /dev/sda)通过网络实时传输到目标主机,不落地、不生成中间文件,实现高效流式备份。关键在于管道衔接、块大小对齐、端口控制和基础校验。
准备前提与基础要求
确保以下条件满足,否则传输会失败或数据损坏:
- 源主机和目标主机均安装
netcat(常见包名是nc或netcat),执行nc -h可验证 - 两台机器处于同一内网,或防火墙已放行指定端口(如
1234) - 目标主机需有足够磁盘空间容纳整块设备数据(例如
/dev/sda是 500GB,目标写入设备或文件也需 ≥500GB) - 操作需 root 权限(读取裸设备和写入块设备均需)
基本流式备份流程(无压缩)
这是最直接、低开销的方式,适合千兆局域网且带宽充裕场景:
- 在目标主机上监听端口并接收数据写入块设备:
nc -l -p 1234 | dd of=/dev/sdb bs=4M conv=notrunc,noerror - 在源主机上读取块设备并通过 netcat 发送:
dd if=/dev/sda bs=4M status=progress | nc 192.168.1.100 1234(其中192.168.1.100是目标主机 IP)
注意:bs=4M 是推荐值,兼顾吞吐与内存占用;conv=notrunc,noerror 防止意外截断或因坏扇区中断;status=progress 实时显示速率与进度。
带压缩的备份(节省带宽与存储)
若网络带宽有限或目标存储紧张,可在传输链路中加入压缩。此时目标端不再写入块设备,而是保存为压缩镜像文件:
- 目标主机接收并用
gzip解压写入文件:nc -l -p 1234 | gzip > sda-backup-$(date +%F).img.gz - 源主机发送前压缩:
dd if=/dev/sda bs=4M status=progress | gzip | nc 192.168.1.100 1234
恢复时需反向操作:zcat sda-backup-2026-05-01.img.gz | dd of=/dev/sdb bs=4M
安全与可靠性增强建议
生产环境不建议裸传,可叠加简单校验和后台管理:
- 传输完成后,在两端分别运行
dd if=/dev/sda bs=1M count=100 | sha256sum和dd if=/dev/sdb bs=1M count=100 | sha256sum对比开头哈希(抽样校验) - 用
timeout包裹命令防卡死,例如:timeout 2h dd if=/dev/sda bs=4M | nc 192.168.1.100 1234 - 将 netcat 替换为
ncat(来自 nmap)可启用 TLS 加密,但需提前配置证书,适合敏感内网 - 避免使用
nc -u(UDP 模式),UDP 不保证顺序与完整性,块设备备份必须用 TCP











