文件系统映像
文件系统映像是一个装着整个文件系统的文件——路由器固件更新里的 rootfs、逐字节复制的 SD 卡、你正在检查的设备镜像。Linux Filesystem Images 插件打开它的方式和 Peach Commander 打开压缩包一样:把光标放上去,按回车,面板就进入了这个文件系统。之后查看器、搜索和复制都和在普通文件夹里完全一样。
映像永远不会被写入。这个插件只能读。
先把它打开¶
插件出厂时是关闭的。打开设置 ▸ 插件,找到 Linux Filesystem Images 并启用它。
默认关闭是因为它寻找映像的方式。固件很少有整齐的文件名——你要找的文件叫 firmware.bin、rootfs.img 或干脆就是 dump 的次数,至少和叫 .squashfs 一样多——所以当扩展名说明不了什么时,插件会看文件开头的几个字节来判断。如果你检查设备映像,这正是需要的;如果你从不这么做,那就是白费功夫。启用它,就是在说明你属于哪一种。
事实证明不是映像的文件,在这一眼之后原封不动,照旧打开。
它能打开什么¶
| 格式 | 你会在哪里遇到 |
|---|---|
| SquashFS | 几乎所有路由器、摄像头和机顶盒固件里的 rootfs |
| ext2, ext3, ext4 | 大多数嵌入式 Linux 设备的主分区 |
| Btrfs | NAS 卷和较新的 Linux 系统,包括快照 |
| JFFS2, UBIFS | 新旧嵌入式硬件上的裸闪存 |
| cramfs, initramfs | 引导文件系统和长期在役的老设备 |
| FAT12, FAT16, FAT32 | SD 卡、U 盘,以及任何现代 PC 的 EFI 分区 |
| exFAT | SD 卡和 32 GB 以上的驱动器 |
| NTFS | Windows 卷,包括压缩过的文件 |
含多个分区的磁盘映像¶
从整台设备复制来的映像通常带有分区表,而不是单一文件系统。这样的映像会按每个分区打开成一个文件夹——1-rootfs、2-esp——你想进哪个就进哪个。MBR 和 GPT 分区表都能读取,表里若记录了分区名称,就使用这些名称。
插件读不了的分区仍然会显示,作为一个以其类型命名的空文件夹。如果一台设备有三个分区,你应该能看出它有三个。
没有分区表的固件¶
从路由器或摄像机中取出的固件文件通常根本没有分区表。它由厂商头部、引导程序、内核和根文件系统依次写成,所在偏移无处记载。这样的文件按每个部分各列一项打开,每一项都以其起始偏移命名:0x00230044-squashfs 是可以进入的文件系统,0x00030040-kernel.uimage 是可以复制出来的文件。

各部分是通过在文件中搜索文件系统本身、再逐个打开查看那里是否真有一个而找到的。偶然吻合的字节模式只花费片刻便被丢弃,而不会变成凭空捏造的条目;至于最终没有找到任何文件系统的文件,仍然会被拒绝,并像以往一样打开。
分区映像中位于所有分区之外的部分同样如此。树莓派把引导程序放在分区 1 之前的那几兆字节里,多数 ARM 主板上的 U-Boot 则位于同一片未分配空间的固定偏移处。这些区段会与分区并列显示,以便查看并复制出来。
把结构记录下来¶
命令 ▸ 扫描映像结构 会把扫描结果作为文本文件保存在映像旁边,并把光标置于其上:每个区域连同它的偏移、大小以及最终判明的内容,若映像带有分区表则一并列出。拆解记录或工单需要的往往正是这张表,而靠在面板中逐项查看、手工抄录数字来重建它是件繁琐的事。
报告还会显示面板略去的内容,例如分区之间细小的对齐间隙;若映像中有记载,它还会指出 U-Boot 内核是为哪块主板构建的。
在映像内部操作¶
你已经熟悉的一切照常适用。F3 查看文件,F5 把文件复制到真实文件夹,查找文件可以搜索映像里的内容。离开它的方式和离开压缩包一样。
符号链接会连同名称一起显示,把它复制出来得到的是一个装着链接目标的小文本文件,而不是真正的链接——不能让一个映像在你自己的磁盘上随意放置指向任何地方的链接。
映像打不开时¶
插件会告诉你原因,而不是报告文件损坏,因为这两者把你引向不同的方向:
- 使用 RAID0、RAID10、RAID5 或 RAID6 的 Btrfs 卷,或跨多个设备的卷。数据分散在多块磁盘上,大部分并不在你手上的这个文件里。
- 仍带着备用区的裸 NAND 转储。映像本身没问题;它是连同纠错字节一起被复制下来的。请用
nanddump --omitoob重新复制一次。 - 加密的 ext4 或 NTFS 卷,没有密钥就无法读取。
- 未干净卸载的 ext 文件系统仍会打开,但根目录顶部会有一个带标记的条目,提示内容可能过时。该文件系统是在使用中被复制的,最新的更改在一份本插件不会重放的日志里。如果细节要紧,请对副本运行
e2fsck。
说明¶
- 映像只读取一次并被记住,因此再次进入是即时的。
- 非常大的映像按需读取而不是整体载入;列表上限为两百万个条目。
- 只有当映像既没有分区表、开头也没有文件系统时,才会去搜索其中嵌入的文件系统,因此普通映像的打开速度与从前完全一样。
- 该插件添加一条菜单命令,除了启用它的开关之外没有自己的设置。