在Windows上读写Linux磁盘镜像的一种方法

背景

嵌入式开发中,经常会把系统的Linux磁盘镜像保存到Windows上,以便上传到网盘备份或发送给工厂,但是如果想读取/修改镜像中的某个文件,一般有2种方案:

直接访问

就是用虚拟磁盘软件将镜像文件挂载成磁盘,再用ext4分区驱动读写分区内的文件,这个方案目前看来困难重重,基本不可行(好吧看来我有一点标题党了)

一些失败的尝试

  • 试了Linux Reader这种直接读取的,发现无法打开ext4分区,放弃
  • 试了msys2,它的util-linux包里没有losetup命令,放弃
  • 试了安装Ext4Fsd这个Windows的ext4文件系统驱动,结果它不能跟Linux Reader配合,放弃
  • 试了安装Paragon ExtFS,根本用不了,放弃
  • 试了FileDevice,根据这篇文章操作也没用起来,估计要改BIOS关闭secure boot,还是不冒险了

间接访问(拷贝镜像文件)

就是将镜像拷贝到Linux系统里,再用losetup设置成一个loop设备,最后将loop设备内的感兴趣分区挂载后访问。

因为磁盘镜像一般都比较大,拷贝比较耗时,有没有不拷贝的方法?

间接访问(不拷贝镜像文件)

考虑从Linux虚拟机来访问window上的磁盘镜像,虽然比直接访问方案麻烦点,但至少能跑通,因为losetup等命令能很方便地用上,但是该怎么把Windows上的镜像文件挂载到Linux虚拟机呢?

一些对我的需求而言无效的机制

  • 试了VMware虚拟磁盘/虚拟光盘/虚拟软盘等功能,结果发现
    • 虚拟磁盘只支持VMware特有格式的,放弃
    • 虚拟光盘检测到的体积是实际值的4倍,放弃
    • 虚拟软盘检测到的体积只有4KB,放弃

后来发现VMware的这个机制有效

VMware的共享文件夹机制,有效

首先在VMware界面创建共享文件夹

将img文件所在目录定义成共享文件夹

然后在Linux虚拟机里挂载该虚拟文件夹

sudo mkdir -p /mnt/hgfs
sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
ls /mnt/hgfs
  • 文件系统类型是fuse.vmhgfs-fuse
  • 挂载媒介是.host:/,表示宿主机当前配置的共享文件夹,即D:\work_dir\F264
  • 挂载目录是/mnt/hgfs,这个最好提前创建,mount命令是不会自动创建的
  • ls命令会列出共享文件夹下的所有文件,不仅仅是img文件

这条命令里并未出现共享文件夹的名称,猜测是因为VMware同一时刻仅允许存在一个共享文件夹

挂载并访问共享文件夹里的img文件

用losetup命令将img文件设置成磁盘

sudo losetup -P /dev/loop8 /path/to/F264_SD_20240905.img
lsblk
  • losetup命令用于将指定的img文件设置成一个loop磁盘,即/dev/loop8
  • losetup命令的-P选项用于扫描磁盘分区并为分区自动创建设备文件,这样我们就不用记分区在文件内的偏移了
  • lsblk命令用于显示系统当前所有的块设备

下面是lsblk命令的输出:

NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop8       7:8    0  7.4G  0 loop 
├─loop8p3 259:2    0    4G  0 loop 
├─loop8p1 259:0    0  100M  0 loop 
└─loop8p2 259:1    0    3G  0 loop 
sr0        11:0    1 1024M  0 rom  
fd0         2:0    1    4K  0 disk 
sda         8:0    0   20G  0 disk 
├─sda2      8:2    0    1K  0 part 
├─sda5      8:5    0  975M  0 part [SWAP]
└─sda1      8:1    0   19G  0 part /

可以看到,img文件内的3个分区都被losetup正确识别出来了分别是loop8p1 loop8p2 loop8p3

用mount命令挂载img文件内感兴趣的分区,访问分区内任意文件

直接挂载img文件的第二个分区,也就是root分区:

sudo mkdir -p /mnt/root
sudo mount /dev/loop8p2 /mnt/root
ls /mnt/root

输出

bin  boot  dev  etc  home  lib  lost+found  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var

总结

  • 我本以为实现这个不算冷门的需求花不了多长时间,没想到windows和linux的生态差异仍然巨大,弥合二者的工作仍然很艰巨。
  • 后面这个工作或许可以通过dokanx等类似Fuse的库来更简便地实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/944262.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg之显示一个yuv照片

显示YUV图片的步骤 1.初始化SDL库 目的:确保SDL库正确初始化,以便可以使用其窗口、渲染和事件处理功能。操作:调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 2.创建窗口用于显示YUV图像: 目的:创建一个…

Windows下播放文件作为麦克风声源的一种方式

近期测试一种外语的ASR识别成功率,样本素材是懂这门语言的同事录制的mp3文件。测试client端原本是从麦克风拾音生成媒体流的。 这样,就需要想办法把mp3文件转换为测试client的输入声音。物理方式上,可以用一根音频线,把电…

如何在网页端使用 IDE 高效地阅读 GitHub 源码?

如何在网页端使用 IDE 高效地阅读 GitHub 源码? 前言什么是 GitHub1s?使用 GitHub1s 阅读 browser-use 项目源码步骤 1: 打开 GitHub 项目页面步骤 2: 修改 URL 使用 GitHub1s步骤 3: 浏览文件结构步骤 4: 使用代码高亮和智能补全功能步骤 5: 快速跳转和…

Microsoft word@【标题样式】应用不生效(主要表现为在导航窗格不显示)

背景 随笔。Microsoft word 2013基础使用,仅做参考和积累。 问题 Microsoft word 2013,对段落标题文字应用【标题样式】不生效(主要表现为在导航窗格不显示)。 图1 图2 观察图1和图2,发现图1的文字在应用【标题一】样…

2021.12.28基于UDP同信的相关流程

作业 1、将TCP的CS模型再敲一遍 服务器 #include <myhead.h> #define PORT 8888 #define IP "192.168.124.123" int main(int argc, const char *argv[]) {//创建套接字//绑定本机IP和端口号//监听客户端请求//接收客户端连接请求//收发消息//创建套接字int…

OpenCV和PyQt的应用

1.创建一个 PyQt 应用程序&#xff0c;该应用程序能够&#xff1a; 使用 OpenCV 加载一张图像。在 PyQt 的窗口中显示这张图像。提供四个按钮&#xff08;QPushButton&#xff09;&#xff1a; 一个用于将图像转换为灰度图一个用于将图像恢复为原始彩色图一个用于将图像进行翻…

kibana启动报错:Invalid character in header content [“kbn-name“]

启动时候kibana报错&#xff1a; 打开 kibana配置文件&#xff0c;config/kibana.yml&#xff0c;配置上server.name即可&#xff0c;如下&#xff1a;

Pandas08

Pandas01 Pandas02 Pandas03 Pandas04 Pandas05 Pandas06 Pandas07 文章目录 内容回顾同期群分析1.1 同期群分析概念1.2 案例代码 数据分析报告数据分析工作内容数据分析简历说明用户生命周期标签1 什么是生命周期标签2 如何计算生命周期标签 内容回顾 TGI 偏好分析 TGI 目标…

网页数据的解析提取之Beautiful Soup

前面博客介绍了正则表达式的相关用法&#xff0c;只是一旦正则表达式写得有问题&#xff0c;得到的结果就可能不是我们想要的了。而且每一个网页都有一定的特殊结构和层级关系&#xff0c;很多节点都用id或 class 作区分所以借助它们的结构和属性来提取不也可以吗? 本篇博客我…

电脑缺失sxs.dll文件要怎么解决?

一、文件丢失问题&#xff1a;以sxs.dll文件缺失为例 当你在运行某个程序时&#xff0c;如果系统提示“找不到sxs.dll文件”&#xff0c;这意味着你的系统中缺少了一个名为sxs.dll的动态链接库文件。sxs.dll文件通常与Microsoft的.NET Framework相关&#xff0c;是许多应用程序…

进军AI大模型-环境配置

语言环境配置 合法上网工具&#xff1a; 这个T子试试&#xff0c;一直稳定。走我链接免费用5天: https://wibnm.com/s/ywtc01/pvijpzy python版本&#xff1a; python3.12 Langchain: Introduction | &#x1f99c;️&#x1f517; LangChain v0.3 9月16日升级的版本 pip3…

WebStorm的下载安装指南

下载 打开网站https://www.jetbrains.com/webstorm/download/#sectionwindows 或者直接网盘下载 通过网盘分享的文件&#xff1a;WebStorm-2024.3.1.1.exe 链接: https://pan.baidu.com/s/16JRZjleFYshLbVvZB49-FA?pwdn5hc 提取码: n5hc –来自百度网盘超级会员v6的分享 安…

Vue使用pages构建多页应用

经过上一篇文章&#xff0c;大家对单页应用配置的都有了一定的了解。相信大家应该对如何构建一个 Vue 单页应用项目已经有所收获和体会&#xff0c;在大部分实际场景中&#xff0c;我们都可以构建单页应用来进行项目的开发和迭代&#xff0c;然而对于项目复杂度过高或者页面模块…

springboot506基于Springboot的小区疫情购物系统录(论文+源码)_kaic

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

复习打卡大数据篇——Hadoop MapReduce

目录 1. MapReduce基本介绍 2. MapReduce原理 1. MapReduce基本介绍 什么是MapReduce MapReduce是一个分布式运算程序的编程框架&#xff0c;核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并发运行在Hadoop集群上。 MapRed…

RK3506开发板:智能硬件领域的新选择,带来卓越性能与低功耗

在现代智能硬件开发中&#xff0c;选择一款性能稳定、功耗低的开发板是确保产品成功的关键。Rockchip最新推出的RK3506芯片&#xff0c;凭借其卓越的能效比、多功能扩展性和优秀的实时性能&#xff0c;已经成为智能家电、工业控制、手持终端等领域的热门选择。而基于RK3506的Ar…

Python学习(2):注释、数字、文本、列表

1 关于注释 Python 使用井号#作为单行注释的符号&#xff0c; 使用三个连续的单引号’’或者三个连续的双引号"""注释多行内容。 2 数字 2.1 基本运算 解释器像一个简单的计算器&#xff1a;你可以输入一个表达式&#xff0c;它将给出结果值。 表达式语法很直观…

加载Tokenizer和基础模型的解析及文件介绍:from_pretrained到底加载了什么?

加载Tokenizer和基础模型的解析及文件介绍 在使用Hugging Face的transformers库加载Tokenizer和基础模型时&#xff0c;涉及到许多文件的调用和解析。这篇博客将详细介绍这些文件的功能和它们在加载过程中的作用&#xff0c;同时结合代码片段进行解析。 下图是我本地下载好模…

Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!

文章目录 说个问题&#xff08;很严重&#xff01;&#xff01;&#xff01;&#xff09;写个方案会Python看这里Python环境搭建不存在多行合并存在多行合并 不会Python看这里 说个问题&#xff08;很严重&#xff01;&#xff01;&#xff01;&#xff09; 平时处理Excel表格…

goview——vue3+vite——数据大屏配置系统

低代码数据大屏配置系统&#xff1a; 数据来源是可以动态api配置的&#xff1a; 配置上面的api接口后&#xff0c;在数据过滤中进行数据格式的转化。 以上内容&#xff0c;来源于https://gitee.com/dromara/go-view/tree/master-fetch/ 后端代码如下&#xff0c;需要更改…