You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Squashfs中如何定位文件所在块及raw镜像内的字节偏移

获取Raw镜像中Squashfs文件系统内文件的字节偏移

前提

你已经知道Squashfs分区在Raw镜像中的起始偏移(记为PART_OFFSET)。


步骤1:提取Squashfs分区镜像

先把Raw镜像中的Squashfs分区单独导出,方便后续操作:

# 替换PART_SIZE为实际分区大小(可通过fdisk -l raw.img获取)
dd if=raw.img of=squashfs.part skip=$PART_OFFSET bs=1 count=$PART_SIZE

步骤2:获取Squashfs关键参数

用unsquashfs -s查看文件系统的核心元数据:

unsquashfs -s squashfs.part

从输出中记录两个关键值:

  • Block size: 单个数据块的字节数(常见值为131072,即128KB)
  • Data block start: 数据块区域在分区内的起始偏移(将十六进制值转为十进制,比如0x1000对应4096)

步骤3:定位目标文件的起始块号

用unsquashfs -ll列出所有文件的详细存储信息,过滤目标文件:

unsquashfs -ll squashfs.part | grep "/bin/ls"

输出示例:

-rwxr-xr-x root/root     18920 2021-09-01 12:00 bin/ls [block 0x45]

记录这里的块号(将十六进制0x45转为十进制69)。


步骤4:计算文件在分区内的偏移

结合前面的参数计算:

分区内偏移 = Data block start + (块号 × Block size)

示例计算:

分区内偏移 = 4096 + (69 × 131072) = 8948064

步骤5:计算文件在Raw镜像中的总偏移

总偏移为分区起始偏移加上分区内偏移:

总偏移 = PART_OFFSET + 分区内偏移

处理小文件(无独立数据块)

如果目标文件是小文件,unsquashfs -ll输出不会显示[block N],说明文件数据直接存储在inode中。这种情况需要用sqfsdump解析inode:

sqfsdump -i squashfs.part /bin/ls

从输出中找到inode内的数据偏移,再结合inode在分区内的位置计算最终偏移。


内容的提问来源于stack exchange,提问作者J.F.K. W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 22:13:12