☰
游戏 ROM 压缩成 CHD 省下六成空间:chdman 与 ROMm 实操教程
2026/9/28 6:46:51 网站建设 项目流程

游戏 ROM 压缩成 CHD 省下六成空间:chdman 与 ROMm 实操教程

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

上个月盘点 NAS 时我发现,PS2 和 PS1 的 ISO 光镜像就占了 310 GB,2.3TB 的整块盘只剩 400 GB 余量,删哪款都肉疼。后来我用 chdman 把游戏 ROM 压缩成 CHD,再交给 ROMm 统一管理,整个收藏缩水六成,读取速度反而略快。整个过程就是几条命令的事,今天把这套 CHD 压缩教程完整讲一遍。

先看收益:CHD 压缩到底能省多少空间

游戏碟片压缩前(ISO)压缩后(CHD)空间省掉
PS2 单碟4.4 GB约 1.5 GB(高压缩档)约 65%
PS2 单碟4.4 GB约 2.2 GB(快速档)约 50%
PS1 单碟700 MB约 300 MB约 60%

原因不复杂:光盘镜像里真正装游戏数据的区域不到一半,剩下是间隙填充和空轨道,CHD 把这些直接跳过不存,而通用压缩会把它们一字不落地压进去。

5 分钟准备:安装并验证 chdman

chdman 是 MAME 官方出品的转换工具,主流平台都有现成包:

目标系统安装命令验证命令
Ubuntu/Debiansudo apt install mame-toolschdman --version
Fedora/RHELsudo dnf install mame-toolschdman --version
Arch Linuxsudo pacman -S mame-toolschdman --version
macOSbrew install mamechdman --version
WindowsMAME 官网下载二进制包chdman.exe --version

装完敲一条验证命令:

chdman --version

能回显版本号就说明环境就绪,可以开始干活了。

压出你的第一张 CHD:以 700 MB 的 PS1 ISO 为例

先拿一张约 700 MB 的 PS1 ISO 试手,转换只需一条命令:

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

四个参数各管一件事:

  • -i:输入文件,这里指原始 ISO;
  • -o:输出文件,即要生成的 CHD;
  • -1:高压缩档,优先把体积压到最小;
  • -0:快速档,优先保证速度,体积大约省一半。

压完用下面这条命令回读文件头,确认版本和哈希正常输出即成功:

chdman info -i game.chd

然后把.chd文件直接丢进 ROMm 对应平台的库目录(在 ROMm 配置里指定库目录,可参考 examples/config.example.yml),扫描后就会出现在游戏列表里。ROMm 靠读取 CHD v5 文件头里内嵌的 SHA1 哈希来识别游戏——这个哈希来自压缩前的原始数据,所以即使两次压缩产出的字节不同,库里的记录照样对得上,去重和完整性校验全靠它。

背后的原理:CHD 凭什么比 ZIP/7Z 更省更快

ZIP、7Z 这类通用压缩眼里只有"一个文件":整包打包,光盘里的空区域一个字节都省不掉,而且必须整包解压才能读。CHD 是照着"光盘长什么样"来压缩的,套路完全不同:

  • 按光盘真实布局把数据切成可独立寻址的块;
  • 空区域直接不存;
  • 音频轨单独走 FLAC 编码;
  • 每个块都能单独解压,模拟器读某个扇区时只解对应的那一块,不动整个文件。
能力对比传统 ZIP传统 7ZCHD 格式
平均省空间20%–30%30%–40%40%–60%
读取模式整包解压随机访问慢分块即读
完整性校验基础 CRC基础 CRC头部内嵌原始 SHA1
多盘处理手动手动按盘分块/多盘组

一句话总结:CHD 懂光盘,通用压缩只懂文件。

按你的库规模选压法

单碟大作:用 -1 高压缩档

PS1/PS2 的单碟大作建议直接上-1。以一张 4.4 GB 的 PS2 单碟为例,压完通常落在 1.5 GB 上下,省六成空间。代价是转换期间 CPU 会满载一段时间,睡前挂着跑就行 😌 日常反复折腾、想快速出片的,用-0,几分钟搞定,体积大约省一半。

多碟游戏集:逐碟转换,文件名保留盘号

双碟、四碟作品按盘分别转换,然后把所有 CHD 放进同一个游戏文件夹:

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

注意文件名要保留盘号规律(game-disc1.chd、game-disc2.chd)。ROMm 会把同一文件夹下的多张盘归到一款游戏下,Web 端播放时按盘号自动选盘,切换体验和 ISO 时代没有区别。

千款级大库:一行 find 批量搞定

上千款游戏的手动转换不现实,用下面这段脚本一把梭:

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

它会扫出目录下所有.iso,逐个压成同名的.chd。跑完先别删原文件,用du -sh前后对比一下目录体积,确认省下的空间符合预期再清理:

du -sh /roms/ps2

出错了怎么办:排障速查

现象可能原因解决办法
压缩进度卡在 99% 不动源镜像里有坏扇区先试chdman fix -i game.chd修复输出文件;修复不了就换一张质量更好的镜像源,硬压出来的文件加载时也会出鬼
压完 CHD 反而比 ISO 大源文件本身已压缩过(如 7z 再套一层)解回原始 ISO 再压;确实要硬来就给createcd加--force强制转换,但体积收益别期待
模拟器加载闪退或卡死压缩档位过高,或模拟器版本太老档位从-1降到-0重压一次,同时把模拟器更新到最新版——老版 CHD 驱动对新参数支持不全
多盘游戏换盘失败各盘 CHD 不在同一文件夹,或文件名没有盘号规律归到同一游戏文件夹,文件名恢复game-disc1.chd这类带盘号的写法

最后留个验证习惯:跑chdman info -i game.chd,拿输出里对应原始数据的 SHA1 去和镜像源发布的 SHA1 比对,一致就说明压得干干净净。这个哈希同样存在 ROMm 库里,重复导入同一款游戏时能自动识别,不用手动查重。

第一步就这么简单:找一张单碟 ISO,把createcd和info两条命令跑通,再把生成的 CHD 丢进 ROMm 库看效果。第一张验证没问题,剩下的就是批量复制粘贴的事 🚀

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

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

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

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

立即咨询