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 性能匹配。
  • 使用专用网络(千兆网)提高传输速度。
相关推荐
Trouvaille ~14 分钟前
【MySQL篇】数据库操作:从创建到管理
linux·数据库·mysql·oracle·xshell·ddl
酸钠鈀17 分钟前
AI WB2 SDK Ubuntu 环境搭建
linux·运维·ubuntu
Robot_Nav21 分钟前
双系统Linux死机解决方法
linux·运维·服务器
bobasyu30 分钟前
Claude Code 源码笔记 -- queryLoop
java·笔记·spring
加勒比之杰克1 小时前
从阻塞 IO 到 epoll:把 Linux 网络 IO 一次讲透
linux·网络·windows·select·多路转接·epoll·poll
水云桐程序员1 小时前
Quartus II集成开发环境 |FPGA
笔记·fpga开发·硬件工程·创业创新
书到用时方恨少!1 小时前
Linux 常用指令使用指南:从入门到“救命”
linux·运维·服务器
默|笙1 小时前
【Linux】线程同步与互斥_同步(1)
linux
Deitymoon1 小时前
linux——条件变量
linux
wwj888wwj1 小时前
Ansible基础(复习2)
linux·运维·服务器·ansible