主机:Ubuntu 15.04
使用Disk Image Mounter
,我可以挂载 test.img 并且弹出三个目录。
- 系統-a
- 系统-b
- 可写
当我搜索过后,我无法编辑这些目录,因为它们是只读的。
到目前为止我发现的可能的解决方案是将这些目录复制到另一个新地方并生成一个新的图像文件。
但是由于镜像文件包含这三个目录,我该怎么办呢?
==============发布更新==============
mount: wrong fs type, bad option, bad superblock on /dev/loop1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
=====================================
Device Start End Sectors Size Type
test_custom2.img1 8192 16383 8192 4M BIOS boot
test_custom2.img2 16384 147455 131072 64M EFI System
test_custom2.img3 147456 2244607 2097152 1G Linux filesystem
test_custom2.img4 2244608 4341759 2097152 1G Linux filesystem
test_custom2.img5 4341760 7614463 3272704 1.6G Linux filesystem
答案1
问题是您的映像中有多个分区。普通的旧式挂载会在偏移量 0 处查找文件系统信息,在您的情况下,这显然指向一些 bios 启动信息,但不是所需的 ext4 fs。您应该通过创建具有所需分区偏移量的环回设备来成功。
这关联可能会对你有帮助。
答案2
以下是根据答案得出的完整过程这里:
您的 .img 文件不是分区的映像,而是整个磁盘的映像。这意味着它从引导加载程序和分区表开始。您必须检测分区的偏移量并专门挂载它。遗憾的是,我从未找到可以自动执行此操作的 Linux 工具。所以你必须做数学运算,但这很容易。以下是流程:
fdisk -l raspberry_pi.img
输出结果如下。注意扇区大小(以字节为单位)(本例中为 512;见下面第 2 行)和分区的起始扇区(Linux 分区为 94208;见下面最后一行)。
Disk raspberry_pi.img: 7.3 GiB, 7826571264 bytes, 15286272 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: 0xbeb1a7ff
Device Boot Start End Sectors Size Id Type
raspberry_pi.img1 8192 93813 85622 41.8M c W95 FAT32 (LBA)
raspberry_pi.img2 94208 15069183 14974976 7.1G 83 Linux
现在,手动将起始扇区 * 扇区大小相乘,以获得命令所需的偏移字节mount
。在本例中,94208 * 512 = 48234496
sudo mkdir /media/sdcard
sudo mount -o loop,rw,sync,offset=48234496 printer_v5.img /media/sdcard
现在,映像的 Linux 分区已安装在 /media/sdcard 上,并且 root 用户可以编辑其文件。
最后,当你完成后:
sudo umount /media/sdcard
答案3
您需要确保您当前的用户目录对您的操作具有读写权限
sudo mkdir -p /tmp/test && sudo mount -o loop,rw,sync image.img /tmp/test
答案4
在这种情况下,binwalk 可能是完成任务的首选工具。有很多选择,但最简单的形式是:
#install binwalk
git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
sudo python setup.py install
#cd to image folder
cd <path to image file>
#show info
binwalk yourimage.img
#auto extract all
binwalk -e yourimage.img