硬核解析PS2记忆卡存储格式

硬核解析PS2记忆卡存储格式

💡 原文中文,约4500字,阅读约需11分钟。
📝

内容提要

本文解析PS2存储卡的文件系统。存储卡采用NAND闪存,以页、簇、块为单位,擦除按块进行,因此存档速度较慢。超级块位于存储卡开头,记录页大小512字节、每簇2页等几何参数及FAT位置。FAT通过簇链记录文件占用的簇,并可经间接FAT簇定位。可分配簇分为条目簇与数据簇,条目大小为512字节,包含文件名、大小、时间及首簇,目录首簇固定为“.”和“..”。

🔎

延伸解读

NAND闪存特性如何拖慢存档速度

PS2存储卡采用NAND闪存,其写入只能将bit从1变为0,而擦除则必须按块进行,即使只修改一位数据,也要先擦除整个块再重写。这种机制导致存档时频繁的擦除-写入循环,速度自然较慢。理解这一点,就能明白为何PS2时代存档往往需要数秒,而并非接口或主机性能瓶颈。

超级块:文件系统的唯一固定锚点

超级块位于存储卡第一个簇的前340字节,是文件系统中唯一位置固定的结构。它记录了页大小、每簇页数、每块页数、总簇数等几何参数,以及FAT位置和根目录首簇。这些信息在格式化时写入且不可更改,因此解析任何PS2存储卡镜像都必须从超级块开始,否则无法定位其他数据结构。

FAT与间接FAT:簇链如何串联文件

FAT以簇链方式记录文件占用的簇,每个FAT项为4字节,指向下一个簇,直到0xFFFFFFFF表示结束。由于FAT本身也存储在簇中,超级块中的ifc_list指向间接FAT簇,从中可解析出FAT占用的簇列表。这种两级结构使得文件系统能管理大量簇,同时保持灵活性。

条目与目录:元数据如何组织

可分配簇分为条目簇和数据簇。每个条目长512字节,包含文件名、大小、时间及首簇等元数据。目录的首个条目簇固定包含“.”和“..”两个条目,分别代表当前目录和父目录。文件的首簇指向数据簇,而目录的首簇指向下一个条目簇。这种设计使得目录和文件在存储上具有统一的管理方式。

❓

Q&A

PS2记忆卡的文件系统采用什么存储介质?为什么存档速度比较慢?

PS2记忆卡采用NAND闪存作为存储介质。由于NAND闪存的擦除操作必须以块为单位进行,即使只修改一位数据,也需要先擦除整个块,然后再重新写入,因此导致存档速度普遍较慢。

PS2记忆卡的超级块中记录了哪些关键信息?

超级块位于存储卡开头的前340个字节,记录了存储卡的基本几何参数,包括页大小(512字节)、每簇页数(2页)、每块页数(16页)、总簇数(8192)、可分配簇的起始和结束位置、根目录的第一个簇、间接FAT簇列表等。此外还包含魔数、版本号、卡类型等标识信息。

PS2记忆卡中的FAT是如何组织和管理簇链的?

FAT(文件分配表)采用簇链方式记录文件占用的簇。每个FAT表项为4字节,存储下一个簇的编号。通过起始簇,可以不断查找FAT获得下一个簇,直到遇到0xFFFFFFFF表示簇链结束。FAT本身存储在簇中,通过间接FAT簇(ifc)定位。在标准8M卡中,FAT占用32个簇,可管理8192个簇。

PS2记忆卡中的条目(entry)是什么?它包含哪些信息?

条目是存储卡上保存文件或目录的基本信息单元,长度为512字节。每个条目包含文件名、大小、创建和修改时间、第一个簇编号(相对于alloc_offset)、文件属性等。目录的第一个条目簇固定包含“.”和“..”两个条目,分别代表当前目录和父目录。

如何通过间接FAT簇(ifc)找到FAT表的位置?

超级块中的ifc_list数组存储了间接FAT簇的簇号。在标准8M卡中,ifc_list只有一个有效值(例如8),该簇中保存了FAT簇的列表。解析该簇的内容,可以得到FAT占用的所有簇号(例如9到40),从而定位FAT表。

PS2记忆卡的可分配簇分为哪两种?它们分别存储什么?

可分配簇分为条目簇和数据簇。条目簇用于存储文件或目录的条目(元数据),每个条目簇可容纳两个条目(每个512字节)。数据簇用于存储文件的实际数据内容。

🏷️

标签

➡️

继续阅读