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 性能匹配。
  • 使用专用网络(千兆网)提高传输速度。
相关推荐
寻丶幽风2 小时前
论文阅读笔记——双流网络
论文阅读·笔记·深度学习·视频理解·双流网络
不知几秋2 小时前
数字取证-内存取证(volatility)
java·linux·前端
欧先生^_^5 小时前
Linux内核可配置的参数
linux·服务器·数据库
海尔辛5 小时前
学习黑客5 分钟读懂Linux Permissions 101
linux·学习·安全
王RuaRua6 小时前
[数据结构]5. 栈-Stack
linux·数据结构·数据库·链表
曼岛_7 小时前
[架构之美]linux常见故障问题解决方案(十九)
linux·运维·架构
tan180°7 小时前
Linux进程信号处理(26)
linux·c++·vscode·后端·信号处理
大神的风范7 小时前
从0开始学linux韦东山教程第三章问题小结(4)
linux·服务器
YOYO--小天8 小时前
RS485和RS232 通信配置
linux·嵌入式硬件