当前位置: 首页 > 工具软件 > img2txt > 使用案例 >

挂载并修改img镜像的分区文件

桑睿识
2023-12-01

windows下有很多可视化的工具可以对镜像文件修改,这里不做介绍。windows很多文件不支持读取linux文件系统,这里安利一个小工具 Linux_Reader,可以支持非常多种的镜像格式,包含虚拟机。

本文介绍losetup、mount两个命令对img镜像文件的挂载和修改进行介绍。

1、Linux命令losetup

losetup命令用于设置循环设备。

循环设备可把文件虚拟成区块设备,籍以模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。

$ losetup -help

Usage:
 losetup [options] [<loopdev>]
 losetup [options] -f | <loopdev> <file>

Set up and control loop devices.

Options:
 -a, --all                     list all used devices
 -d, --detach <loopdev>...     detach one or more devices
 -f, --find                    find first unused device
 -P, --partscan                create a partitioned loop device
...

关注的参数有

  • -d: 移除已经挂载的loop设备
  • -f: 查找下一个可用的loop设备
  • -p:加载带分区loop设备

当挂载含分区img文件时,需要添加-p参数。

下面演示如何losetup、mount来挂载img文件。

2、挂载img系统镜像

2.1、树莓派备份系统镜像

以树莓派为例备份一个系统镜像img文件,使用 fdisk -l filename.img 查看信息如下:

$ fdisk -l raspios_copy_cm4.img
Disk raspios_copy_cm4.img: 7.3 GiB, 7818182656 bytes, 15269888 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: 0xadf6c25e

Device                Boot  Start      End  Sectors  Size Id Type
raspios_copy_cm4.img1        8192   532479   524288  256M  c W95 FAT32 (LBA)
raspios_copy_cm4.img2      532480 15269887 14737408    7G 83 Linux

整个镜像占用7.3G,未进行系统压缩(系统压缩参 树莓派系统最小img镜像的制作-备份与还原),含有两个分区,一个是固定的 256M 的boot启动分区,另一个是约7G的rootfs文件系统。

2.2、挂载分区

(1)查看下一个可用的loop设备

使用命令losetup -f 查询到的下一个可用loop设备文件为 /dev/loop19。

$ losetup -f
/dev/loop19

(2)使用 losetup -p 参数挂载img文件

$ sudo losetup -P /dev/loop19 raspios_copy_cm4.img

$ sudo lsblk
NAME       MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0        7:0    0  32.3M  1 loop /snap/snapd/12883
... // 省略
loop18       7:18   0   2.5M  1 loop /snap/gnome-system-monitor/174
loop19       7:19   0   7.3G  0 loop
├─loop19p1 259:0    0   256M  0 loop
└─loop19p2 259:1    0     7G  0 loop
sda          8:0    0 931.5G  0 disk
├─sda1       8:1    0   512M  0 part /boot/efi
├─sda2       8:2    0 930.1G  0 part /
└─sda3       8:3    0   977M  0 part

可以看到设备 loop19下有两个分区加载,大小和树莓派系统镜像一致,loop19p1是启动分区boot,loop19p2是文件系统分区rootfs。

当需要卸载img镜像文件时,使用命令 losetup -d ,例如 losetup -d /dev/loop19。

(3)挂载文件系统

创建两个文件夹 rootfs 和 boot,并分别使用mount命令挂载loop19p1和loop19p2

$ mkdir boot
$ mkdir rootfs

$ sudo mount /dev/loop19p1 ./boot/
$ sudo mount /dev/loop19p2 ./rootfs/

(4)查看和修改分区文件

分别进入 rootfs 和 boot,就是在树莓派启动后看到的文件内容。

$ ls ./boot/
 COPYING.linux                bcm2709-rpi-2-b.dtb        cmdline.txt    fixup_db.dat   start4.elf
 LICENCE.broadcom             bcm2710-rpi-2-b.dtb        config.txt     fixup_x.dat    start4cd.elf
'System Volume Information'   bcm2710-rpi-3-b-plus.dtb   dt-blob.bin    issue.txt      start4db.elf
 bcm2708-rpi-b-plus.dtb       bcm2710-rpi-3-b.dtb        fixup.dat      kernel.img     start4x.elf
 bcm2708-rpi-b-rev1.dtb       bcm2710-rpi-cm3.dtb        fixup4.dat     kernel7.img    start_cd.elf
 bcm2708-rpi-b.dtb            bcm2711-rpi-4-b.dtb        fixup4cd.dat   kernel7l.img   start_db.elf
 bcm2708-rpi-cm.dtb           bcm2711-rpi-400.dtb        fixup4db.dat   kernel8.img    start_x.elf
 bcm2708-rpi-zero-w.dtb       bcm2711-rpi-cm4.dtb        fixup4x.dat    overlays
 bcm2708-rpi-zero.dtb         bootcode.bin               fixup_cd.dat   start.elf

$ ls ./rootfs/
bin   dev  home  lost+found  mnt  proc  run   srv  tmp      usr
boot  etc  lib   media       opt  root  sbin  sys  upgrade  var

之后,我们可以像进入了一个启动的树莓派系统一样进行文件的增删改了,但是要注意路径的操作。

2.3、卸载退出

$ sudo umount /dev/loop19p
$ sudo umount /dev/loop19p2
$ sudo losetup -d /dev/loop19
 类似资料: