Linux挂载Raw格式的img文件
在折腾树莓派/香蕉派的时候,想直接复制img镜像中的文件。烧录到SD又太麻烦,就想找找有没有能直接挂载img的方式。这一找,果然还真有。
大体上分手动分配loop设备和自动分配loop设备两种方法。
手动创建loop设备
- 先查看第一个空闲loop设备
sudo losetup -f /dev/loop0
- 使用上一步得到的设备名,第一次创建loop设备
sudo losetup /dev/loop0 bananian-1501.img
- 查看信息
输出内容sudo fdisk -lu /dev/loop0
可以看到,这个镜像有两个分区(loop0p1和loop0p2)。从第2048扇区开始(Start列),每扇区512字节(Units = sectors of 1 * 512 = 512 bytes),我们算出offset,下面mout命令会用到。Disk /dev/loop0: 1.9 GiB, 2032664576 bytes, 3970048 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x6c70c806 Device Boot Start End Sectors Size Id Type /dev/loop0p1 2048 43007 40960 20M 83 Linux /dev/loop0p2 43008 3970047 3927040 1.9G 83 Linux
2048*512=1048576 43008*512=22020096
- 挂载
输出结果mkdir boot root sudo losetup -o 1048576 /dev/loop1 bananian-1501.img sudo mount -o loop /dev/loop1 boot sudo losetup -o 22020096 /dev/loop3 bananian-1501.img sudo mount -o loop /dev/loop3 root ls boot root
boot: fex script.bin uEnv.txt uEnv.txt.video-acc-off uEnv.txt.video-acc-on uImage root: bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv swapfile1 sys tmp usr var
自动创建loop设备
fdisk可以直接查看img文件,mount可以自动创建loop设备,所以上面步骤可以简化
- 查看信息
输出结果sudo fdisk -lu bananian-1501.img
同样的方法计算出offsetDisk bananian-1501.img: 2032 MB, 2032664576 bytes 255 heads, 63 sectors/track, 247 cylinders, total 3970048 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x6c70c806 Device Boot Start End Blocks Id System bananian-1501.img1 2048 43007 20480 83 Linux bananian-1501.img2 43008 3970047 1963520 83 Linux
2048*512=1048576 43008*512=22020096
- 直接mount
输出结果mkdir boot root sudo mount -o offset=1048576 bananian-1501.img boot sudo mount -o offset=22020096 bananian-1501.img root ls boot root
手动计算offset略微有点麻烦,可以利用boot: fex script.bin uEnv.txt uEnv.txt.video-acc-off uEnv.txt.video-acc-on uImage root: bin boot dev etc home lib lost+found media mnt opt proc root run sbin selinux srv swapfile1 sys tmp usr var
expr
命令。将挂载命令中offset后面的数值替换成expr命令的运算值即可,注意用反引号`
。例如上面两条挂载命令可以改成以下命令。sudo mount -o offset=`expr 512 \* 2048` bananian-1501.img boot sudo mount -o offset=`expr 512 \* 43008` bananian-1501.img root
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战