Linux基础 -- SSH 流式烧录与压缩传输笔记

Linux SSH 流式烧录与压缩传输指南

一、背景介绍

在嵌入式开发和维护中,常常需要通过 SSH 从 PC 向设备端传输大文件(如系统镜像、固件)并将其直接烧录到指定磁盘(如 /dev/mmcblk2)。然而,设备端存储空间有限,无法直接存储整个大文件。这种情况下,采用流式传输和解压的方式成为最佳选择。


二、基本原理

  • 流式传输:PC 端数据通过 SSH 管道直接传输到设备端,不在设备端保存临时文件。
  • 压缩与解压:PC 端压缩数据流,设备端解压并直接写入磁盘。
  • 并行传输:启用多线程压缩/解压提升速度。

三、流式传输与烧录方法

3.1 基本流式烧录(无压缩)

bash 复制代码
ssh remote_user@device_ip "dd of=/dev/mmcblk2 bs=4M" < cm100s_mmcblk2p2
  • 直接将本地文件流式传输并写入设备磁盘。

3.2 启用压缩传输(gzip)

bash 复制代码
gzip -c cm100s_mmcblk2p2 | ssh remote_user@device_ip "gzip -d | dd of=/dev/mmcblk2 bs=4M status=progress"
  • 本地压缩数据,设备端解压并写入。

3.3 多线程压缩传输(pigz)

bash 复制代码
pigz -p $(nproc) < cm100s_mmcblk2p2 | ssh remote_user@device_ip "pigz -d | dd of=/dev/mmcblk2 bs=4M status=progress"
  • 使用 pigz 多线程压缩,提升传输速率。

3.4 直接传输压缩文件(.gz、.xz、.lz4)

  • 如果文件已压缩,无需解压:
bash 复制代码
cat cm100s_mmcblk2p2.gz | ssh remote_user@device_ip "gzip -d | dd of=/dev/mmcblk2 bs=4M status=progress"

3.5 使用 rsync 支持断点续传

bash 复制代码
rsync --partial --progress -e ssh cm100s_mmcblk2p2 remote_user@device_ip:/dev/stdout | ssh remote_user@device_ip "dd of=/dev/mmcblk2 bs=4M"
  • --partial:中断后可继续。

四、提高写入可靠性

4.1 启用写入校验

bash 复制代码
ssh remote_user@device_ip "sync && hexdump -C /dev/mmcblk2 | head"

4.2 自动化脚本

  • 自动选择压缩格式(gzip/xz/lz4)。
  • 自动检测写入完整性。
  • 断点续传自动重试。

五、故障排查

  • SSH 连接中断 :确保网络稳定,使用 rsync --partial
  • 设备空间不足:采用流式传输(如 gzip -d | dd)。
  • 数据校验失败 :确保块大小与传输方式一致(bs=4M)。

六、附录:优化建议

  • 启用多线程压缩(pigz)。
  • 确保 PC 端和设备端 CPU 性能匹配。
  • 使用专用网络(千兆网)提高传输速度。
相关推荐
jiunian_cn1 分钟前
【Linux】centos软件安装
linux·运维·centos
程序员JerrySUN13 分钟前
[特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制
java·linux·架构
孤寂大仙v15 分钟前
【计算机网络】非阻塞IO——select实现多路转接
linux·计算机网络
派阿喵搞电子39 分钟前
Ubuntu下有关UDP网络通信的指令
linux·服务器·网络
jackson凌1 小时前
【Java学习笔记】SringBuffer类(重点)
java·笔记·学习
Evan_ZGYF丶1 小时前
【PCIe总线】 -- PCI、PCIe相关实现
linux·嵌入式·pcie·pci
舰长1151 小时前
Ubuntu挂载本地镜像源(像CentOS 一样挂载本地镜像源)
linux·ubuntu·centos
程序员JerrySUN1 小时前
全面理解 Linux 内核性能问题:分类、实战与调优策略
java·linux·运维·服务器·单片机
huangyuchi.2 小时前
【Linux】LInux下第一个程序:进度条
linux·运维·服务器·笔记·进度条·c/c++
帽儿山的枪手2 小时前
程序员必掌握的iptables五表五链
linux·网络协议