浏览 .img 文件而无需挂载

有没有办法在不挂载的情况下浏览.img文件?我有一个从clonezilla分区快照生成的.img文件。但是,我用命令mount -o loop sda5.img /mnt/挂载文件时遇到了问题。 dmesg | tail显示以下错误: [ 1325.395286] EXT4-fs (loop0): bad geometry: block count 11221248 exceeds size of device (11218432 blocks) 有人知道如何在不挂载的情况下浏览文件,或者这个错误可能是由什么引起的吗?

看起来很糟糕。 - Uri Herrera
相关链接:https://unix.stackexchange.com/questions/32008/mount-an-image-file-without-root-permission - Ciro Santilli OurBigBook.com
2个回答

如果这是一个整个硬盘的镜像,或者像你的情况一样,这可能是一个扩展分区的镜像,你需要知道分区布局和文件中每个分区的偏移量才能挂载它们。
要做到这一点,你需要使用parted工具,你可以使用以下命令安装它:
apt-get install parted

安装完parted后,使用图像文件的路径启动它。将显示一个parted提示符:
$ parted /path/to/image/file/sda5.img
GNU Parted 2.3
.....
(parted)

在这个提示符(前缀为(parted))中,输入以下命令:
(parted) unit B
(parted) print
.....
Number  Start          End            Size           Type     File system  Flags
 1      1048576B       1573912575B    1572864000B    primary  ntfs         boot
 2      1573912576B    156774694911B  155200782336B  primary  ntfs
 3      156774694912B  171454758911B  14680064000B   primary  ntfs
 4      171454758912B  180044693503B  8589934592B    primary

(parted) q

输出中的表格将告诉您文件中每个分区的偏移量以及每个分区中的文件系统类型。例如,要挂载上述示例输出中的第一个分区,您需要输入以下命令:
sudo mount -o loop,ro,offset=1048576 /path/to/image/file/sda5.img /mnt/partition

确保首先存在/mnt/partition

1好的,我觉得问题可能是当我运行打印命令时出现错误,因为它显示未知的分区表。猜测镜像可能损坏了? - Ahatius
看起来很像是坏了。但是先试着在谷歌上搜索一下你的错误。 - bender
1无法在磁盘外创建分区!使用parted或gparted时出现的错误... - Philippe Gachoud

我遇到了从Clonezilla快照生成的ext4镜像的同样问题。
对我有效的方法是使用truncate将文件扩展到分区表报告的大小。在我的情况下,dmesg报告的错误是:
[15687.653868] EXT4-fs (loop0): bad geometry: block count 18482176 exceeds size
  of device (18352672 blocks)

所以我通过以下方式调整文件的长度:

truncate -o -s 18482176 /path/to/partition.img

(^ 注意这是日志中的第一个和较大的数字)
之后,挂载成功了,我可以访问我的数据了。

这对我来说起作用了,尽管尺寸不对,我猜块的大小可能不同,所以我必须指定字节大小。要小心,因为如果将图像文件截断为比原始尺寸更短的大小,可能会丢失数据。 - golimar
1你如何知道正确的尺寸?请在这里添加指令。 - Hunsu
@Hunsu 错误信息(dmesg)中报告了尺寸大小。 - Melebius