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 是先把游戏数据挑出来、一块一块打包,空轨道则留在盘盒里不带走。
| 格式 | 能省多少 | 怎么读 | 怎么验 |
|---|---|---|---|
| ZIP | 20%~30% | 整包解压 | 基础 CRC |
| 7Z | 30%~40% | 随机访问慢 | 基础 CRC |
| CHD | 40%~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 mameWindows 从 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 -0ROMm 会自动把同一文件夹的多盘 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 校验:删源文件之前先做完三步
别急着删源文件,按顺序过三道检查:
chdman info -i game.chd回读文件头,输出里的 SHA1 对应的是压缩前的原始数据;- 拿这个值和镜像源发布的 SHA1 比对,一致才说明数据完整;
- 用
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),仅供参考