☰
chdman 把 PS2 ISO 压成 CHD,给 ROM 库省下六成空间
2026/10/13 9:19:19 网站建设 项目流程

chdman 把 PS2 ISO 压成 CHD,给 ROM 库省下六成空间

【免费下载链接】rommA beautiful, powerful, self-hosted ROM manager and player.项目地址: https://gitcode.com/GitHub_Trending/rom/romm

2TB 硬盘装下 70 款 PS2 游戏,单张 4GB 的 ISO 就吃掉大半空间。我用 MAME 官方工具 chdman 把整个库换成 CHD 压缩,4.4GB 的 PS2 光盘压到 1.5~2.2GB,游戏管理交给自托管 ROMm——一次转换,硬盘容量近乎翻倍。

📀 CHD 压缩原理:为什么比 ZIP、7Z 更省空间

光盘的数据并没有铺满整张盘面,真实游戏数据之外还有大量间隙填充和没用上的轨道,4GB 的 ISO 里有用内容往往不到一半。ZIP、7Z 把整个 ISO 当"一个文件"来压,空区域的每一个字节都省不掉。CHD 则照着光盘的真实布局把数据切成可独立寻址的块,空轨道直接不落盘,每块还能单独解压——模拟器读某个扇区时只解对应的那一块,不用碰整个文件。

打个比方:通用压缩是把整张光盘裹进气泡膜收起来,间隙里的空气也得占地方;CHD 是先把游戏数据挑出来、一块一块打包,空轨道则留在盘盒里不带走。

格式能省多少怎么读怎么验
ZIP20%~30%整包解压基础 CRC
7Z30%~40%随机访问慢基础 CRC
CHD40%~60%分块即读头部内嵌原始数据 SHA1

三家对比下来,只有 CHD 同时占住"读得快"和"自带校验"两样:4.4GB 的 PS2 碟落在 1.5GB~2.2GB 区间,读盘体验也不拖后腿。

⏱️ chdman 安装验证十分钟跑通

先装工具。chdman 是 MAME 官方出品的转换工具,各平台都有现成包:

# Ubuntu/Debian sudo apt install mame-tools # Fedora/RHEL sudo dnf install mame-tools # Arch Linux sudo pacman -S mame-tools # macOS brew install mame

Windows 从 MAME 官方渠道下载二进制即可。装完执行chdman --version(Windows 为chdman.exe --version),版本号能打出来就说明就位了。

转换只需要一条命令:

chdman createcd -i game.iso -o game.chd -1

-i指向输入 ISO,-o是输出 CHD 的路径,-1选高压缩档。跑完先别急着删源文件,回读一次文件头:

chdman info -i game.chd

能看到版本和完整性信息,说明这个文件没问题;输出里还带着一个 SHA1,先抄下来,后面对账要用。

压好的.chd直接放进 ROMm 对应平台的库目录(比如 PS2 文件夹),跑一次扫描,它就会像普通光盘一样出现在游戏库里。

📦 规模化压缩:CHD 压缩档位怎么选与 PS2 多盘游戏 CHD

档位取舍就看两个方向:

  • 如果你要把空间抠到极限、长期保留大作,选-1:4.4GB 源能压到约 1.5GB,代价是 CPU 满载、单盘耗时明显,适合睡前挂着跑。
  • 如果你日常频繁增删、想马上出片,选-0:约 2.2GB,省一半空间,单盘几分钟。

我的习惯是先-0把流程跑熟,再回头把确定留的碟用-1重压一遍。

双碟、四碟的多盘作品,每盘单独转,所有 CHD 放进同一个游戏文件夹:

chdman createcd -i game-disc1.iso -o game-disc1.chd -0 chdman createcd -i game-disc2.iso -o game-disc2.chd -0

ROMm 会自动把同一文件夹的多盘 CHD 归到一款游戏下,Web 端播放时按盘号自动选盘,换盘体验和 ISO 时代没差别。前提是文件名保留盘号规律——名字乱起,盘序识别就会失败。

库里有成百张 ISO 时,用批量脚本一轮跑完:

find /roms/ps2 -name "*.iso" -print0 | while read -d '' f; do chdman createcd -i "$f" -o "${f%.iso}.chd" -0 done

-print0配合read -d ''是为了兼容带空格的文件名,${f%.iso}把扩展名截掉生成 CHD 文件名。跑完一轮,硬盘空出来的位置肉眼可见。

🔍 CHD SHA1 校验:删源文件之前先做完三步

别急着删源文件,按顺序过三道检查:

  1. chdman info -i game.chd回读文件头,输出里的 SHA1 对应的是压缩前的原始数据;
  2. 拿这个值和镜像源发布的 SHA1 比对,一致才说明数据完整;
  3. 用du -sh /roms/ps2对比转换前后的目录体积,省下的空间符合预期,再清理原始 ISO。

顺带一提,这也是 ROMm 去重的依据:它读取 CHD v5 文件头内嵌的 SHA1 来识别游戏,所以哪怕两次压出的文件字节不同,库里的记录照样对得上,同一款游戏重复导入不会产生两条。这个字段就是后端扫描时落库的chd_sha1_hash列,定义可查 backend/alembic/versions/0080_add_chd_sha1_hash.py。

🚑 CHD 压缩翻车自救:卡进度、体积膨胀与加载闪退

症状原因处理
转换停在 99% 不动源镜像里存在读不了的坏扇区先跑chdman fix -i game.chd尝试修复;不行就换更干净的镜像源
压出的 CHD 比原 ISO 还大源文件本身已是压缩过的,再套一层没有收益解回原始 ISO 重来;--force能强制转换,但别指望体积收益
模拟器加载时闪退或卡死压缩档位过高,或模拟器版本太老不支持降回-0重压一次,同时把模拟器更新到最新版
多盘游戏到换盘环节走不下去多张 CHD 没放同一文件夹,或文件名丢了盘号归入同一游戏文件夹,按game-disc1.chd规律命名

这几类翻车大多出在"源文件不干净"和"命名没规矩"上,先查镜像源质量和盘号规范,能排除掉一大半问题。

最小起步动作就一步:找一张单碟 ISO,把chdman createcd跑通,把产出的.chd放进库里的 PS2 文件夹。第二张 CHD 出来之后,后面就只是复制粘贴的事。

【免费下载链接】rommA beautiful, powerful, self-hosted ROM manager and player.项目地址: https://gitcode.com/GitHub_Trending/rom/romm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询