在对设备进行固件分区备份之前,我们需要通过设备的 debug 接口进行连接。设备的 debug 接口位于左下角,连接时需设置波特率为 115200。

输入图片说明

ssh连接

  设备默认的 SSH 服务配置较为严格,端口号为 33998,且不允许通过密码直接登录。我们可以通过查看 /etc/ssh/sshd_config 文件来确认默认配置:

# cat /etc/ssh/sshd_config | grep Port
Port 33998
# cat /etc/ssh/sshd_config | grep Password
#PasswordAuthentication yes
PermitEmptyPasswords yes

  为了方便后续的操作,我们需要修改 SSH 配置,允许通过密码登录,并关闭允许空密码的设置。修改后的配置如下:

PasswordAuthentication yes
PermitEmptyPasswords no

  使用 sed 命令可以快速完成这些修改,命令如下:

sed -i -e "s/^#PasswordAuthentication.*$/PasswordAuthentication yes/" -e "s/^P
ermitEmptyPasswords.*$/PermitEmptyPasswords no/" /etc/ssh/sshd_config

  修改完成后,重启设备以使配置生效。之后,我们可以通过 SSH 客户端尝试登录设备,设备默认的用户名和密码均为 root。登录成功后,我们可以查看系统的版本信息,确认设备运行的系统为 Buildroot 2019.11.1 版本:

PS C:\Users\zac.chen> ssh root@192.168.101.27 -p 33998
(root@192.168.101.27) Password: 
# cat /etc/os-release
NAME=Buildroot
VERSION=2019.11.1
ID=buildroot
VERSION_ID=2019.11.1
PRETTY_NAME="Buildroot 2019.11.1"

查看分区

  在进行备份操作之前,我们需要先了解设备的分区情况。通过查看内核启动日志中的分区信息,我们可以获取到设备的分区布局:

# dmesg | grep -i mmcblk
[    3.454019] mmcblk0: emmc:0001 M8G1GC 7.28 GiB 
[    3.458938] mmcblk0boot0: emmc:0001 M8G1GC partition 1 4.00 MiB
[    3.459620] mmcblk0boot1: emmc:0001 M8G1GC partition 2 4.00 MiB
[    3.460225] mmcblk0rpmb: emmc:0001 M8G1GC partition 3 512 KiB
[    3.464148] meson-mmc: [mmcblk0p01]           bootloader  offset 0x000000000000, size 0x000000400000 
[    3.464567] meson-mmc: [mmcblk0p02]             reserved  offset 0x000002400000, size 0x000004000000 
[    3.464872] meson-mmc: [mmcblk0p03]                cache  offset 0x000006c00000, size 0x000020000000 
[    3.465200] meson-mmc: [mmcblk0p04]                  env  offset 0x000027400000, size 0x000000800000 
[    3.465525] meson-mmc: [mmcblk0p05]                 logo  offset 0x000028400000, size 0x000002000000 
[    3.465858] meson-mmc: [mmcblk0p06]             recovery  offset 0x00002ac00000, size 0x000002000000 
[    3.466327] meson-mmc: [mmcblk0p07]                  rsv  offset 0x00002d400000, size 0x000000800000 
[    3.466850] meson-mmc: [mmcblk0p08]                  tee  offset 0x00002e400000, size 0x000000800000 
[    3.467279] meson-mmc: [mmcblk0p09]                crypt  offset 0x00002f400000, size 0x000002000000 
[    3.467756] meson-mmc: [mmcblk0p10]                 misc  offset 0x000031c00000, size 0x000002000000 
[    3.468199] meson-mmc: [mmcblk0p11]                 boot  offset 0x000034400000, size 0x000002000000 
[    3.468630] meson-mmc: [mmcblk0p12]               system  offset 0x000036c00000, size 0x000080000000 
[    3.469108] meson-mmc: [mmcblk0p13]               vendor  offset 0x0000b7400000, size 0x000010000000 
[    3.469479] meson-mmc: [mmcblk0p14]                  odm  offset 0x0000c7c00000, size 0x000010000000 
[    3.469853] meson-mmc: [mmcblk0p15]                 data  offset 0x0000d8400000, size 0x0000f9c00000 
[    5.124487] EXT4-fs (mmcblk0p12): mounted filesystem with ordered data mode. Opts: (null)
[    5.333461] EXT4-fs (mmcblk0p12): re-mounted. Opts: data=ordered
[    5.801438] EXT4-fs (mmcblk0p15): 1 orphan inode deleted
[    5.801484] EXT4-fs (mmcblk0p15): recovery complete
[    5.812330] EXT4-fs (mmcblk0p15): mounted filesystem with ordered data mode. Opts: (null)
[    5.836262] EXT4-fs (mmcblk0p13): recovery complete
[    5.837294] EXT4-fs (mmcblk0p13): mounted filesystem with ordered data mode. Opts: (null)

  从上述信息可以看出,设备的存储介质为 eMMC,总容量为 7.28 GiB,包含多个分区,每个分区都有特定的用途。其中,mmcblk0p15 分区被挂载到 /data 目录,用于存储设备运行中的数据。通过查看文件系统的使用情况,我们可以了解到 /data 目录的可用空间约为 1.3 GiB:

# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/system               1.9G    825.0M   1008.4M  45% /rom
devtmpfs                485.3M         0    485.3M   0% /dev
tmpfs                   490.0M      8.0K    489.9M   0% /dev/shm
tmpfs                   490.0M    196.0K    489.8M   0% /tmp
tmpfs                   490.0M    184.0K    489.8M   0% /run
/dev/data                 3.8G      2.3G      1.3G  63% /data
/dev/vendor             239.9M      2.0M    221.1M   1% /vendor
overlayfs:/data/overlay/upper3.8G      2.3G      1.3G  63% /
cgroup                  490.0M         0    490.0M   0% /sys/fs/cgroup
overlayfs:/data/overlay/upper3.8G      2.3G      1.3G  63% /writable/ipfsbit-518518/docker

  为了释放更多空间以便进行后续的备份操作,我们可以清空 /data 目录中的数据,并重启设备。重启后,/data 目录的可用空间将增加至约 3.5 GiB:

rm -rf /data/*
reboot
# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/system               1.9G    825.0M   1008.4M  45% /rom
devtmpfs                485.3M         0    485.3M   0% /dev
tmpfs                   490.0M      8.0K    489.9M   0% /dev/shm
tmpfs                   490.0M    180.0K    489.8M   0% /tmp
tmpfs                   490.0M    176.0K    489.8M   0% /run
/dev/data                 3.8G     54.9M      3.5G   2% /data
/dev/vendor             239.9M      2.0M    221.1M   1% /vendor
overlayfs:/data/overlay/upper3.8G     54.9M      3.5G   2% /
cgroup                  490.0M         0    490.0M   0% /sys/fs/cgroup
overlayfs:/data/overlay/upper3.8G     54.9M      3.5G   2% /writable/ipfsbit-518518/docker

备份分区

本地备份

  在进行分区备份时,我们需要注意以下几点:

  • 备份范围:只需要备份 GPT 分区表以及 mmcblk0boot0mmcblk0boot1mmcblk0rpmbmmcblk0p01mmcblk0p14mmcblk0p15(即 /data 分区)是运行中的 overlayfs 缓存数据,不需要备份。
  • 备份工具:使用 dd 命令进行备份,该命令可以精确地复制设备或文件的内容。
  • 备份路径:将备份文件存储在 /data/backup 目录中。

  以下是备份的具体步骤:

  1. 创建备份目录

    mkdir /data/backup
    
  2. 备份 GPT 分区表

    dd if=/dev/mmcblk0 bs=512 count=34 of=/data/backup/mmcblk0_GPT.bin conv=fsync
    
  3. 备份引导分区

    dd if=/dev/mmcblk0boot0 of=/data/backup/mmcblk0boot0.bin conv=fsync
    dd if=/dev/mmcblk0boot1 of=/data/backup/mmcblk0boot1.bin conv=fsync
    
  4. 备份其他分区

    dd if=/dev/mmcblk0rpmb of=/data/backup/mmcblk0rpmb.bin conv=fsync
    dd if=/dev/bootloader of=/data/backup/mmcblk0p1_bootloader.bin conv=fsync
    dd if=/dev/reserved of=/data/backup/mmcblk0p2_reserved.bin conv=fsync
    dd if=/dev/cache of=/data/backup/mmcblk0p3_cache.bin conv=fsync
    dd if=/dev/env of=/data/backup/mmcblk0p4_env.bin conv=fsync
    dd if=/dev/logo of=/data/backup/mmcblk0p5_logo.bin conv=fsync
    dd if=/dev/recovery of=/data/backup/mmcblk0p6_recovery.bin conv=fsync
    dd if=/dev/rsv of=/data/backup/mmcblk0p7_rsv.bin conv=fsync
    dd if=/dev/tee of=/data/backup/mmcblk0p8_tee.bin conv=fsync
    dd if=/dev/crypt of=/data/backup/mmcblk0p9_crypt.bin conv=fsync
    dd if=/dev/misc of=/data/backup/mmcblk0p10_misc.bin conv=fsync
    dd if=/dev/boot of=/data/backup/mmcblk0p11_boot.bin conv=fsync
    

  由于 /data 分区的可用空间有限,一次可能无法完成全部分区的备份。因此,我们需要分两次完成备份操作:

  1. 第一次备份:完成上述分区的备份后,通过 SFTP 将 /data/backup 目录中的备份文件导出到外部存储设备(如电脑或其他存储介质)。

  2. 清空备份目录:导出备份文件后,清空 /data/backup 目录,以释放空间:

    rm -rf /data/backup/*
    
  3. 第二次备份:继续备份剩余的分区:

dd if=/dev/system of=/data/backup/mmcblk0p12_system.bin conv=fsync
dd if=/dev/vendor of=/data/backup/mmcblk0p13_vendor.bin conv=fsync
dd if=/dev/odm of=/data/backup/mmcblk0p14_odm.bin conv=fsync
  1. 最终导出:将第二次备份生成的文件再次通过 SFTP 导出到外部存储设备。

网络备份

  对于熟悉网络配置和系统操作的玩家来说,还可以通过挂载网络文件系统(Network File System,简称 NFS)来实现分区数据的备份。这种方法不仅可以简化备份流程,还能提高备份效率,避免因本地存储空间不足而导致的分步备份操作。

挂载网络文件系统

  首先,需要确保目标设备(即备份服务器)已经配置好 NFS 服务,并且共享了一个可供备份的目录。在设备上,可以通过以下命令挂载网络文件系统:

# mount -t nfs [备份服务器的IP地址]:/共享目录路径 /挂载点

  例如,假设备份服务器的 IP 地址为 192.168.101.100,共享目录为 /backup,挂载点为 /mnt/backup,则命令如下:

# mount -t nfs 192.168.101.100:/backup /mnt/backup

  挂载成功后,/mnt/backup 目录将直接映射到备份服务器的共享目录,设备上的任何写入操作都会实时同步到备份服务器。

远程备份分区数据

  在挂载了网络文件系统后,备份分区数据的操作与本地备份类似,只是备份文件的存储路径从本地的 /data/backup 改为了挂载的远程目录 /mnt/backup。以下是备份命令的修改示例:

# 创建远程备份目录
mkdir /mnt/backup/remote_backup# 备份 GPT 分区表
dd if=/dev/mmcblk0 bs=512 count=34 of=/mnt/backup/remote_backup/mmcblk0_GPT.bin conv=fsync# 备份引导分区
dd if=/dev/mmcblk0boot0 of=/mnt/backup/remote_backup/mmcblk0boot0.bin conv=fsync
dd if=/dev/mmcblk0boot1 of=/mnt/backup/remote_backup/mmcblk0boot1.bin conv=fsync# 备份其他分区
dd if=/dev/mmcblk0rpmb of=/mnt/backup/remote_backup/mmcblk0rpmb.bin conv=fsync
dd if=/dev/bootloader of=/mnt/backup/remote_backup/mmcblk0p1_bootloader.bin conv=fsync
dd if=/dev/reserved of=/mnt/backup/remote_backup/mmcblk0p2_reserved.bin conv=fsync
dd if=/dev/cache of=/mnt/backup/remote_backup/mmcblk0p3_cache.bin conv=fsync
dd if=/dev/env of=/mnt/backup/remote_backup/mmcblk0p4_env.bin conv=fsync
dd if=/dev/logo of=/mnt/backup/remote_backup/mmcblk0p5_logo.bin conv=fsync
dd if=/dev/recovery of=/mnt/backup/remote_backup/mmcblk0p6_recovery.bin conv=fsync
dd if=/dev/rsv of=/mnt/backup/remote_backup/mmcblk0p7_rsv.bin conv=fsync
dd if=/dev/tee of=/mnt/backup/remote_backup/mmcblk0p8_tee.bin conv=fsync
dd if=/dev/crypt of=/mnt/backup/remote_backup/mmcblk0p9_crypt.bin conv=fsync
dd if=/dev/misc of=/mnt/backup/remote_backup/mmcblk0p10_misc.bin conv=fsync
dd if=/dev/boot of=/mnt/backup/remote_backup/mmcblk0p11_boot.bin conv=fsync
dd if=/dev/system of=/mnt/backup/remote_backup/mmcblk0p12_system.bin conv=fsync
dd if=/dev/vendor of=/mnt/backup/remote_backup/mmcblk0p13_vendor.bin conv=fsync
dd if=/dev/odm of=/mnt/backup/remote_backup/mmcblk0p14_odm.bin conv=fsync

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86077.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86077.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86077.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Network Manager客户端制作小结

关联资料 Unity 入门到精通(沈军) c语言中的局部变量和全局变量_c语言全局变量-CSDN博客 关键词 本地玩家信息:LocalClientId 网络状态及网络序列化 网络游戏服务器和客户端 ClientRpc与ServerRpc 变量作用域与作用周期 Network Manager —…

Python 开发环境全栈隔离架构:从 Anaconda 到 PyCharm 的四级防护体系

【深度探索】Windows 下 Python 多版本虚拟环境管理与隔离实战:支持 Anaconda、Poetry、Pipenv、venv、uv、Hatch、PyCharm、VS Code 全工具链方案-CSDN博客 【零基础】Python 多版本虚拟环境管理与隔离实战——支持 Anaconda、Poetry、Pipenv、venv、uv、Hatch、Py…

Redis集群性能优化实战指南

Redis集群性能优化实战指南 一、技术背景与应用场景 随着互联网服务规模不断扩大,缓存层承载了海量的读写请求。Redis因其高性能和丰富的数据结构被广泛用于缓存、排行榜、会话存储等场景。单节点Redis在并发、内存和持久化方面会遇到瓶颈,Redis集群&a…

使用 Telegraf 向 TDengine 写入数据

Telegraf 是一款十分流行的指标采集开源软件。在数据采集和平台监控系统中,Telegraf 可以采集多种组件的运行信息,而不需要自己手写脚本定时采集,降低数据获取的难度。 只需要将 Telegraf 的输出配置增加指向 taosAdapter 对应的 url 并修改…

华为云 Flexus+DeepSeek 征文|华为云Dify 平台 CCE 高可用集群部署与大模型高质量知识库构建指南

华为云 FlexusDeepSeek 征文|华为云Dify 平台 CCE 高可用集群部署与大模型高质量知识库构建指南 文章目录 华为云 FlexusDeepSeek 征文|华为云Dify 平台 CCE 高可用集群部署与大模型高质量知识库构建指南前言1、ModelArts Studio大模型开通2、Dify平台CC…

测试校招/应届刷题知识路线

需要重点关注计算机基础知识和测试相关技能 对于即将参加校招或应届的同学,测试岗位需要重点关注计算机基础知识和测试相关技能。 掌握操作系统、计算机网络、数据库等计算机基础,同时熟悉测试基础理论、测试方法、自动化测试工具 (如 Selenium、JMeter)和编程语言(如 Py…

华为云Flexus+DeepSeek征文 | 基于华为云的 Dify-LLM 企业级 AI 开发平台部署指南

前言 在人工智能技术迅猛发展的今天,大语言模型(LLM)已成为推动企业智能化转型的核心引擎。然而,如何高效、安全地将 LLM 能力整合到实际业务场景中,仍然是许多开发者面临的挑战。Dify 作为一款开源的 LLM 应用开发平…

Dify×奇墨科技:开源+本土化,破解企业AI落地难题

在人工智能技术迅猛发展的今天,企业亟需高效、安全的AI应用开发工具。开源LLMOps平台Dify.AI凭借其灵活性与开放性,已成为开发者构建AI应用的首选之一。而它在中国市场的规模化落地,离不开本土合作伙伴的强力支撑——奇墨科技作为Dify中国大陆…

Vue3+Spring boot 前后端防抖增强方案

我将基于您提供的防抖切面代码进行改进,主要优化点包括使用Redis实现分布式防抖、增强键生成策略、改进异常处理等。以下是完整的改进方案: 1. 改进的防抖注解 (Debounce.java) java 复制 下载 package com.weiyu.anno;import java.lang.annotation…

Cppcheck 使用教程:本地 + CMake + GitHub Actions 自动分析实战

Cppcheck 是一款强大的 C/C 静态分析工具,专注于发现内存泄漏、未初始化变量、死代码、未使用函数等问题。它不依赖编译器,适合在持续集成和本地开发中快速定位潜在 Bug。 本文将手把手教你如何: 安装 Cppcheck 在命令行中使用 集成到 CMak…

Mac Parallels Desktop Kali 2025 代理设置

Mac Parallels Desktop Kali 2025 代理设置 核心步骤: kali设置桥接wifi 查看kali和主机ip 运行命令ifconfig查看kali ip: mac主机ip: kali设置proxy ip填写主机ip,port为主机proxy端口 enjoy

通义灵码编程智能体深度评测(Qwen3模型+终端操作+MCP工具调用实战)

1 引言 随着AI编程助手进入工具链集成时代,通义灵码作为阿里云推出的智能编程解决方案,其Qwen3模型与MCP(Multi-tool Calling Platform)的协同能力引发开发者关注。本文将基于真实开发场景,从代码理解、终端操作和工具链调用三个维度展开深度…

SpringBoot电脑商城项目--商品详情+加入购物车

商品详情 1. 持久层 1.1. 规划sql语句 根据id查询商品详情 1.2 mapper层编写抽象方法 /*** 根据商品id查询商品详情* param id 商品id* return 匹配的id商品详情,如果没有匹配的数据,则返回null*/Product findById(Integer id); 1.3 xml文件中编写sq…

上交卡尔动力联合提出FastDrive!结构化标签实现自动驾驶端到端大模型更快更强

最近将类人的推理能力融入到端到端自动驾驶系统中已经成为了一个前沿的研究领域。其中,基于视觉语言模型的方法已经吸引了来自工业界和学术界的广泛关注。 现有的VLM训练范式严重依赖带有自由格式的文本标注数据集,如图1(a)所示。虽然这些描述能够捕捉丰…

C# 委托(什么是委托)

什么是委托 可以认为委托是持有一个或多个方法的对象。当然,一般情况下你不会想要“执行”一个对 象,但委托与典型的对象不同。可以执行委托,这时委托会执行它所“持有"的方法。 本章将揭示创建和使用委托的语法和语义。在本章后面&am…

iTwin briefcase, checkpoint ,standalone

在 iTwin.js 中,briefcase 和 checkpoint 都是 IModel 的不同连接类型,但它们的用途和特性不同: Briefcase 用途:用于本地编辑和同步。通常是用户从 iModelHub 检出(Check-out)后在本地生成的可写副本。特…

媒体AI关键技术研究

一、引言 随着人工智能技术的迅猛发展,媒体行业正经历前所未有的变革。AI技术不仅重塑了内容生产和传播模式,更为媒体创意发展提供了全新可能。在数字化、移动化和信息爆炸的大背景下,传统媒体面临巨大挑战,而AI技术为行业带来了…

Cargo 与 Rust 项目

一、Rust 项目:现代化的系统编程单元 Rust 项目 是用 Rust 语言编写的软件工程单元,具有以下核心特征: 核心组件: src/ 目录:存放 Rust 源代码(.rs 文件) Cargo.toml:项目清单文件…

uni-app总结6-配合iOS App项目开发apple watch app

假设你已经用uni-app开发好了一个iOS端的app,现在想要开发一个配套的apple watch app。改怎么去开发呢?是不是一头雾水,这篇文章就会介绍一些apple watch app开发的知识以及如何在uni-app开发的iOS app基础上去开发配套的watch app。 一、apple watch 开发知识 apple watc…

神经网络的本质 逻辑回归 python的动态展示

神经网络的本质 逻辑回归 python的动态展示 逻辑回归运行图相关代码什么是逻辑回归和ai的关系逻辑回归公式流程与实际案例解析**一、逻辑回归的数学公式流程**1. **线性组合阶段**2. **激活函数(Sigmoid)**3. **概率预测与决策**4. **交叉熵损失函数**5.…