在Linux下直接修改磁盘镜像文件的内容

背景

嵌入式Linux系统通常在调试稳定后,会对磁盘(SSD、NVME、SD卡、TF卡)做个镜像,通常是.img后缀的文件,以后组装新设备时,就将镜像文件烧录到新磁盘即可,非常简单。

这种方法有个不便之处,就是当某些关键文件(LCD、触屏、按键等人机交互设备的驱动)有改动时,就需要重新对磁盘做镜像,如果手头没有相同容量的磁盘,就很麻烦。

思路

一种简单的办法是用Linux Reader打开img文件,更新其中内容后保存即可,但是该软件只能读,不能写,而且还收费,放弃。
想起Linux有loop设备的概念,类似于虚拟光驱,如果能将img文件像下图一样加载就好了。
虚拟光驱

查了一圈资料,自己将资料综合起来并做实验,找到实现方法。

实现方法

关键工具是losetup命令(桌面Linux自带),具体步骤如下示例:

  1. 将镜像文件Foo.img上传到一台桌面Linux环境(物理机/虚拟机均可)
  2. 进入桌面Linux的终端,执行ls /dev/loop* | sort命令,看loop设备编号用到几了,待会我们将img文件attach到几+1
  3. 如果你清楚分区信息,下面3个小步骤可以跳过,不清楚就不要跳过
    3.a 执行sudo losetup /dev/loop14 Foo.img,attach镜像文件Foo.img到/dev/loop14
    3.b 执行sudo fdisk /dev/loop14命令,获取磁盘的分区信息(具体步骤请参阅fdisk命令手册)
    3.c 执行sudo losetup -d /dev/loop14命令,detach镜像文件Foo.img
  4. 执行sudo losetup -o 1M --sizelimit 100M /dev/loop14 Foo.img命令,attch到img的第一个分区,其他分区同理
    4.a 选项-o表示分区的起始偏移,选项--sizelimit表示分区的大小
  5. 执行sudo mount /dev/loop14 /mnt/p1/命令,将新创建的loop设备挂载到/mnt/p1/目录
    5.a 如果分区的文件系统比较小众,给mount添加适当的选项
  6. 根据自己的需求对/mnt/p1/目录做增删改查
  7. 执行sudo umount /mnt/p1/命令,卸载loop设备
  8. 执行sudo losetup -d /dev/loop14命令,从img的第一个分区detach

总结

只要思想不滑坡,办法总比困难多。

相关推荐

  1. linux修改文件夹所有文件权限(常用)

    2024-07-10 13:48:03       5 阅读
  2. Linux修改host文件

    2024-07-10 13:48:03       44 阅读
  3. Linux修改文件三种方法

    2024-07-10 13:48:03       46 阅读
  4. linux文件夹中查找文件内容

    2024-07-10 13:48:03       9 阅读
  5. docker 修改镜像文件

    2024-07-10 13:48:03       19 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 13:48:03       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 13:48:03       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 13:48:03       4 阅读
  4. Python语言-面向对象

    2024-07-10 13:48:03       5 阅读

热门阅读

  1. Vue 路由传参 query方法 bug 记录

    2024-07-10 13:48:03       9 阅读
  2. 翻页 上一页/下一页

    2024-07-10 13:48:03       11 阅读
  3. 前端导出pdf

    2024-07-10 13:48:03       11 阅读
  4. Knife4j的原理及应用详解(五)

    2024-07-10 13:48:03       10 阅读
  5. Day2--每日一练

    2024-07-10 13:48:03       10 阅读
  6. 东方博宜1626 - 暑假的旅游计划

    2024-07-10 13:48:03       10 阅读
  7. react小白面试不得不会的20个问题——第二篇

    2024-07-10 13:48:03       11 阅读
  8. 简单滤波算法伪码

    2024-07-10 13:48:03       13 阅读
  9. Mongodb索引简介

    2024-07-10 13:48:03       7 阅读
  10. Linux 6种日志查看方法

    2024-07-10 13:48:03       11 阅读
  11. 案例研究(Case Study)是什么?怎么写?

    2024-07-10 13:48:03       8 阅读