很多人第一次碰上“光盘里的文件复制不出来”都会在搜索框里敲下“CDFS 光盘怎么复制文件”然后被一堆“什么是 CDFS光盘文件系统”的解释绕得更晕。我这些年经手过不少旧课件盘、随机驱动盘、老软件安装盘和一批十年前刻的教学资料盘最常见的场景就是盘放进光驱资源管理器里能看到目录双击文件却卡住、报错、复制到 99% 中断甚至整台机器假死。这篇就按我实际的排查和操作顺序来讲先把 CDFS 这个东西讲透弄明白它为什么“只读、挑剔、名字怪”再讲清楚三类工具的适用边界最后给 Windows、Linux、macOS 三个平台上可以直接抄的复制步骤和一份故障速查表。不管你是完全没接触过光盘文件系统的新手还是手里正压着一批要抢救的老盘看完都能上手干活。1. CDFS 到底是什么从一次读盘失败的排查说起1.1 名字的误会CDFS 是驱动名不是盘上格式名这是必须先纠正的第一个认知偏差否则后面所有操作都会走偏。CDFS 在绝大多数语境下指的是操作系统里那个负责“读懂光盘”的驱动程序而不是刻在盘片上的数据格式。在 Windows 体系里它对应的就是那个加载后把光驱识别成“一个只读卷”的内核组件你在设备管理器或者某些诊断信息里看到的 CDFS 字样本质是“我现在用这套逻辑来解释这张盘”。真正的盘上格式是什么是我们更熟悉的那几个名字ISO 9660、它的扩展Joliet、Rock Ridge以及后来的UDF。一张标准数据光盘底层是 ISO 9660 的卷结构如果刻录时勾选了“允许长文件名/支持 Unicode”就在同一个盘上追加一份 Joliet 目录树如果是给类 Unix 系统用的盘可能还追加了 Rock Ridge 扩展来保留权限位和符号链接。为什么这个区分重要因为它直接决定了你遇到问题该往哪个方向查。如果盘上格式是 ISO 9660 Level 1那里面的文件名只能是 8.3 格式8 个字符主名 3 个字符扩展名你在资源管理器里看到SETUP~1.EXE这种名字不是系统坏了是驱动忠实地按盘上真实名字显示给你看。很多人到这一步以为是“光盘中毒了”或者“文件损坏了”其实盘好得很只是刻录的时候没开 Joliet 扩展。我一般排查的第一步就是确认三件事这张盘是哪一年刻的、用什么工具刻的、刻的时候有没有勾选扩展选项。这三个信息基本能解释 80% 的“文件名看不懂”和“文件复制失败”。1.2 ISO 9660 的分层结构为什么它天生只读要理解 CDFS 为什么只读得看 ISO 9660 的物理布局。一张数据光盘从最 inner 的位置开始大致是系统区前 16 个扇区通常全零或留给引导用→ 卷描述符区Volume Descriptors至少 16 个扇区→ 路径表Path Table→ 目录记录Directory Records→ 文件数据区。这个结构的第一个扇区里放着主卷描述符Primary Volume DescriptorPVD里面记录了卷标、卷空间大小、逻辑块大小通常是 2048 字节、根目录记录的扇区位置等关键元数据。关键在于这个结构在刻录完成的那一刻就被“烧死”了。目录记录的扇区位置、文件大小、时间戳全部写死在盘上没有任何预留的可写元数据区域也没有日志、没有空闲块位图、没有 inode 分配表。这就好比你把一本书印刷装订好了想改一个字只能重印一本不可能在书上原地涂改。所以 CDFS 驱动在实现上就只做两件事解析卷描述符把目录树映射成你能看的文件列表按请求去读对应扇区。写入根本没有可写的地方。这也解释了一个非常常见的困惑为什么在光驱盘符里“新建文件夹”或者“粘贴”会失败甚至菜单项是灰的。不是权限问题是文件系统层面就不存在“分配新块”这个动作。想往盘里加东西唯一路径是重新刻一张或者用支持多区段Multi-Session的刻录方式追加一个新会话——但那本质上是又烧了一层不是修改原来的层。顺带说一个实操细节正因为结构是写死的镜像级别的复制比文件级别的复制可靠得多。文件级复制是“让驱动解析目录树 → 逐个文件读扇区 → 写到硬盘”中间任何一步遇到坏扇区都可能中断镜像级复制是“从第 0 扇区一路读到最后一个扇区”不依赖目录解析遇到坏区也能用工具记录下来跳过。这个差异在后面第 3 章会展开讲。1.3 CDFS 的几个硬性特征先记成一张表把 CDFS/ISO 9660 的关键限制列成表比看十页文档都快。这些限制不是我总结的“经验值”是格式规范里写死的东西理解了它们很多“诡异现象”自然就有解释。特征项具体限制实际表现只读属性规范内无可写元数据区无法新建、改名、删除、粘贴文件名Level 18.3 格式仅大写字母、数字、下划线显示为README.TXT、SETUP~1.EXE文件名Level 2/3主名最长 31 字符仍不支持小写和多数特殊符号Joliet 扩展文件名最长 64 个 UTF-16 字符路径总长约 110 字符中文名可显示但超长名会被截断Rock Ridge 扩展支持长名、POSIX 权限、符号链接类 Unix 系统下能保留权限位单文件大小主卷描述符中大小为 32 位字段上限 4GB 减 1 字节超大文件需 UDF 或多卷逻辑块大小数据轨标准为 2048 字节镜像读取按 2048 对齐最稳时间戳17 字节特定编码未设置时常见 1995 年之类的默认值大小写不区分A.txt与a.txt视为同名表里最后两行值得单独说。时间戳显示成 1995 年或者 1980 年是很多老盘的经典现象原因是刻录工具没有写入正确的创建/修改时间驱动就回落到规范里的默认值。这会让“按修改时间排序找最新文件”完全失效我一般改用按目录结构或者按文件大小来找。大小写不敏感这一点则会在你把文件复制到区分大小写的目标盘比如某些 Linux 文件系统时出问题如果盘上真有两个只差大小写的文件复制过程会互相覆盖最后只剩一个。这种情况极少但确实存在处理办法是先做大镜像再用工具按目录逐层导出。2. 为什么你的 CDFS 光盘复制会失败常见症结拆解2.1 四类典型失败场景对应四种完全不同的原因我把踩过的坑归成四类每一类的处理思路完全不同混在一起排查只会浪费时间。第一类是“能看到文件但复制中断”。进度条走到某个百分比不动或者报“无法读取源文件或磁盘”。这类九成是物理层面的读取错误盘面有划痕、有指纹油污、反射层老化或者光驱激光头功率衰减。特征是每次都卡在同一个进度位置非常稳定地复现。这种情况不要反复重试反复读同一片坏区只会让驱动不断加大重试次数轻则卡死几分钟重则把光驱彻底读挂。第二类是“文件名显示成 8.3 短名”。前面说过这是刻录时没开 Joliet 扩展。这类盘的数据其实是完整的只是目录树里只有短名版本。能不能恢复长名要看盘上是否残留了 Joliet 卷描述符——有些工具即使在“关闭长文件名”模式下也会写一份补充卷描述符用isoinfo -d之类的工具能看到多个卷描述符。如果确实没有那就只能按短名复制出来然后人工对照内容重命名。第三类是“挂载失败或者提示文件系统不支持”。在类 Unix 系统上mount 时报wrong fs type或者bad option多半是这张盘不是纯数据盘可能是混合模式盘Mixed Mode第一条轨是数据、后面若干条是音轨也可能是CD-Extra / CD-Plus这种双会话盘第一个会话是音轨、第二个会话才是数据。这类盘按“文件系统”去挂载当然会失败得先确认轨道的类型和布局。第四类是“复制出来的文件内容不对”。文件大小对得上但打开是乱码或者校验不通过。这类最隐蔽常见原因是读取时用了不正确的块大小导致扇区错位或者这张盘用了非标准的扇区模式Mode 2 Form 2 的用户数据只有 2324 字节如果按 2048 硬读会错位。还有一个可能是加密盘某些老软件盘故意在特定扇区写入错误数据作为防拷贝标记正常读取时驱动会跳过但粗暴的镜像工具会把这些“错误”也读进来。2.2 CDFS 和 UDF 的差异决定了你该用什么工具很多人分不清这两者其实界限很清楚CDFS/ISO 9660 是 CD 时代的产物UDF 是 DVD 及以后时代为解决前者限制而生的格式。它们的核心差异直接决定了复制策略。对比维度ISO 9660 / CDFSUDF诞生背景CD-ROM 时代容量小、追求兼容DVD/蓝光时代需要大文件和可重写单文件上限约 4GB理论上极大取决于分区大小文件名受 Level 与扩展限制原生支持长名与 Unicode可写性只读支持 Packet Writing 等准可写方案跨平台兼容极好几乎所有系统都认较好老系统可能需额外驱动常见载体音乐 CD、老软件盘、教学课件盘DVD 数据盘、蓝光、大容量归档盘实际工作中遇到最多的是**“桥接盘”Bridge Disc**同一张盘上同时写了 ISO 9660 结构和 UDF 结构。这种设计的初衷是“老系统读 ISO 部分新系统读 UDF 部分”兼容性最好。但麻烦也在这里两个文件系统视图可能不一致。我有一次遇到的现象是在某台机器上看到的文件列表比另一台机器上少了好几个——因为一个系统优先挂载了 ISO 9660 视图另一个优先用了 UDF 视图而这两个视图在刻录时并没有完全同步。处理办法很直接两种视图各导出一次做差集对比。用isoinfo -f -i disc.img拿 ISO 视图的文件列表再用 UDF 工具拿另一份对比之后就知道差在哪。如果你手上的盘是 DVD 以上容量我建议优先按 UDF 方式解析如果是 CD 容量700MB 左右的老盘基本可以断定是 ISO 9660 家族按 CDFS 思路处理。2.3 容量与文件大小的边界先算清楚再动手动手前先做个容量核算能省掉很多“复制到一半空间不够”的尴尬。CD 的容量算法是固定的扇区数 分钟数 × 60 × 75。一张标称 80 分钟的数据盘就是 80 × 60 × 75 360,000 个扇区每个用户扇区 2048 字节总容量 360,000 × 2048 737,280,000 字节换算成我们熟悉的单位是 703.1 MiB。这就是“700MB 盘”的由来——标称按十进制 700MB 左右说实际按二进制算是 703 MiB 上下。标称 74 分钟的盘则是 74 × 60 × 75 333,000 扇区约 650 MiB。这个计算有两个实际用途。一是估算镜像文件应该多大如果你做出来的镜像明显小于这个值说明读取提前终止了镜像不完整如果明显大于可能是把整条轨的原始数据含纠错码每扇区 2352 字节都读进来了。二是判断目标盘的空间够不够镜像本身占一份空间解出来的散文件还要占一份两份加起来才是真实需求。我一般按“镜像大小 × 2.2”来预留。单文件上限的问题也要提前想好。ISO 9660 的文件大小字段是 32 位上限 4GB 减 1 字节。这意味着如果你要往一张 ISO 9660 盘里刻一个 4GB 以上的文件是写不进去的刻录工具要么报错要么悄悄截断。反过来如果你从盘上复制出来的某个文件恰好接近 4GB要警惕它是不是被截断过的。真正要装大文件必须用 UDF 格式或者用多卷Multi-Volume方案把文件拆开。还有一个容易忽略的点目标分区的文件系统。把光盘文件往 FAT32 分区上复制单个文件超过 4GB 就会失败往 exFAT 或 NTFS 上复制就没这个问题。另外某些老盘的路径层级很深加上 Joliet 的 110 字符路径限制和 Windows 的 260 字符路径限制复制到深层目录时也可能报“路径过长”。我的习惯是把目标目录设在根目录下路径尽量短比如E:\cd_backup\。3. 复制前的准备读盘环境与工具选型3.1 硬件侧光驱和盘片其实互相挑剔这一步最容易被跳过但它决定了后面所有操作的成功率。老盘配新光驱或者老光驱配新盘都容易出现兼容性问题。原因在于激光波长、聚焦伺服和纠错策略的差异早期 CD 光驱的激光头是针对压制盘Pressed Disc优化的对刻录盘特别是深色染料的 CD-R反射率适应不好反过来后期的 DVD 复合光驱读 CD-R 时的功率曲线也未必最优。我的实际经验是抢救重要老盘优先找一个“读盘能力强”的老式 CD/DVD 光驱最好是带刻录功能的型号。这类光驱的激光头通常有更大的功率余量对划痕盘的容错更好。如果手上有多个光驱别嫌麻烦同一张盘在不同的光驱上各试一次成功率差别可能非常大。我曾经有一张盘在三个光驱上都读不出完整数据换到第四个才把整盘镜像做下来。盘片本身的处理也有讲究。清洁时用无绒布从盘中心向外沿直线擦拭不要绕圈擦——绕圈擦会把划痕做成同心圆而光盘的数据轨道恰好也是同心圆同心圆划痕会整条轨道报废径向划痕虽然看着吓人但因为跨越的轨道多、每段损伤短纠错码往往能救回来。清洁剂用无水乙醇或者专用光盘清洁液别用纸巾干擦那等于拿砂纸磨。还有一个物理常识光盘的读取面是底面那层透明基材数据层在它上面标签面反而更脆弱。所以标签面绝对不能贴重物、不能写字用力、不能受潮一旦标签面的保护漆破损反射层氧化整张盘就彻底废了。我见过有人用记号笔在标签面用力写几年后那一片区域完全读不出。3.2 软件侧三类工具各管一段路工具选型上我把它分成三类千万不要拿一类工具去干另一类的活。第一类是镜像级读取工具代表是dd系列、ddrescue、以及一些带“物理盘直读”功能的镜像软件。这类工具的特性是不关心文件系统从第 0 扇区一路往下读能记录坏区位置、能断点续读、能控制重试次数。它们的输出是一个完整镜像文件后续所有操作都基于这个镜像物理盘只读一次。这是抢救老盘的标准做法。第二类是文件系统解析工具代表是isoinfo、xorriso、各种能直接打开 ISO 的归档工具。它们能解析 ISO 9660 结构列出目录树、查看卷描述符、按路径提取单个文件。这类工具的价值在于诊断isoinfo -d能看到这张盘到底有几个卷描述符、是 Level 几、有没有 Joliet 和 Rock Ridge 扩展。先诊断再动手比瞎试快得多。第三类是图形界面的复制工具就是资源管理器里的拖拽复制。它的优点是简单缺点是完全没有容错能力遇到坏区要么卡死要么直接中断而且不告诉你具体卡在哪个扇区。我的建议是小盘、好盘可以先用它快速试一次确认盘基本可读一旦出现任何中断立刻切换到第一类工具做镜像别在原地反复折腾。还有一类要单独提抓音轨工具。如果你的盘是纯音频 CD 或者混合模式盘的音轨部分那是不能用文件系统方式读的必须用专门的抓轨工具按音轨读。这个和“复制文件”是两回事很多人在这里混淆结果把音轨当数据文件硬读出来一堆噪声。3.3 镜像优先还是直接拖拽一个判断标准我给自己定的标准很简单只要这张盘的数据你还想再用第二次就先做镜像。理由有三个。第一物理盘每读一次就损耗一次尤其是已经有划痕的老盘反复读只会让情况变糟。做成镜像之后所有后续操作解包、校验、重试都在硬盘上做速度快几十倍而且不会再有读盘失败。第二镜像是唯一能完整保留原始结构的形态包括卷描述符、目录记录、时间戳、甚至那些“看起来没用”的扇区。而文件级复制会丢掉所有这些元数据只留下文件内容。第三镜像可以校验你可以对镜像算哈希值确认整盘读取是否完整文件级复制没有这个能力你只能一个个文件去比对。什么时候可以不先做镜像两种情况盘很新、内容很少、只是临时拷两个文件出来或者盘是纯音频 CD本来就没有“镜像”这个概念音轨要单独抓。除此之外我都建议先镜像。镜像的存储位置也要注意不要放在网络盘或者移动硬盘上直接写读取中断时容易留下半截文件先写到本地硬盘校验通过之后再转移。镜像文件本身不小一张 CD 就是 700MB 量级做之前确认一下空间。4. 实操三个平台把 CDFS 光盘文件完整取出来4.1 Windows 路线图形界面起步命令行兜底先说最简单的路径适合盘况良好、文件不多的情况。把盘放入光驱等系统识别出盘符假设是D:\打开资源管理器进入盘符全选所有内容右键复制粘贴到本地硬盘的目标目录。这里有两个细节要注意一是目标目录尽量短比如E:\cd\避免路径过长二是粘贴后不要立刻关窗口等进度条走完并且没有错误提示再操作。如果文件数量多、目录层级深图形界面容易在中途卡住而且不给具体信息。这时候用 PowerShell 更可控# 以管理员身份打开 PowerShell先确认光驱盘符 Get-Volume | Where-Object DriveType -eq CD-ROM # 递归复制保留目录结构出错时不中断 $src D:\ $dst E:\cd_backup\ New-Item -ItemType Directory -Path $dst -Force | Out-Null Copy-Item -Path (Join-Path $src *) -Destination $dst -Recurse -Force -ErrorAction Continue用-ErrorAction Continue的好处是遇到单个文件失败不会中断整个任务最后会汇总报错你能知道具体是哪几个文件有问题。这比图形界面卡死强太多。如果资源管理器里看到的是 8.3 短名想确认盘上到底有没有长名版本可以用命令行工具读卷描述符。这类诊断工具不少发行版都带核心是看输出里有没有多个卷描述符条目——有 Joliet 的盘会看到一个补充卷描述符Supplementary Volume Descriptor。Windows 上还有一个常被忽略的能力很多压缩/归档工具能直接打开 ISO 镜像文件把镜像当成一个压缩包来浏览和提取。所以流程可以是先用镜像工具把物理盘读成.iso再用归档工具打开它提取文件。这样可以绕开光驱驱动的某些兼容性问题。需要提醒的是Windows 的 CDFS 驱动对坏区的容错策略比较激进遇到读不出的扇区会反复重试很多次表现出来就是“卡住不动”。这时候不要以为死机了等两三分钟如果超过五分钟还没动静直接按光驱的弹出键或者用任务管理器结束进程换镜像工具处理。4.2 Linux 路线挂载看结构ddrescue 抢救数据Linux 下的优势是工具链完整、参数透明适合处理疑难盘。第一步先确认设备名和盘的基本信息# 查看光驱设备与容量 lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # 典型输出里光驱是 /dev/sr0 # 读取光盘的容量与轨道信息 cdrom_id /dev/sr0 2/dev/null || true blockdev --getsize64 /dev/sr0blockdev --getsize64的输出就是这张盘可读的总字节数。拿它和前面算的理论值对比能快速判断驱动是否正常识别了整张盘。接下来挂载看目录结构sudo mkdir -p /mnt/cd sudo mount -t iso9660 -o ro,nosuid,nodev /dev/sr0 /mnt/cd ls -la /mnt/cd-t iso9660是明确告诉内核按这个文件系统解析比让它自动探测更可靠。如果报wrong fs type说明这张盘可能不是纯数据盘先执行isoinfo -d -i /dev/sr0或者用读轨工具确认轨道布局。挂载成功后就可以正常cp -r复制了mkdir -p ~/cd_backup cp -rv /mnt/cd/. ~/cd_backup/ sudo umount /mnt/cd但对于有划痕的老盘不要用cp硬扛。正确做法是先做整盘镜像而且要分多遍做。ddrescue是这类场景的标准工具它的核心优势是带 mapfile 记录进度可以反复续读每一遍策略不同# 第一遍快速扫过跳过坏区不重试-n先把好数据抢下来 sudo ddrescue -b 2048 -n -v /dev/sr0 disc.img disc.map # 第二遍只针对第一遍剩下的坏区重试 3 次 sudo ddrescue -b 2048 -r3 -v /dev/sr0 disc.img disc.map # 第三遍反向扫描让读取方向和划痕走向交叉提高命中率 sudo ddrescue -b 2048 -R -r1 -v /dev/sr0 disc.img disc.map-b 2048这个参数不是随便写的。CD 数据轨的一个用户扇区就是 2048 字节按这个边界对齐读取能保证每次读都是一个完整扇区避免跨扇区读取时把纠错码切坏。如果设成 512 或者 4096虽然功能上也能跑但在坏区边界上重试效率会下降。第一遍用-n是关键先把所有能秒读的数据抢下来再回头啃硬骨头这个顺序比一上来就死磕坏区要快一个数量级——因为死磕坏区时激光头反复定位整体读取速度会掉到几百 KB/s。镜像做完之后把镜像挂载成回环设备从镜像里复制文件物理盘就再也不用碰了sudo mkdir -p /mnt/img sudo mount -t iso9660 -o ro,loop /mnt/img disc.img如果挂载时报结构损坏说明镜像里卷描述符所在的那几个扇区恰好是坏的这时候还可以用isoinfo直接从镜像里按路径提取单个文件绕过完整挂载isoinfo -i disc.img -f # 列出全部文件路径 isoinfo -i disc.img -x /SETUP.EXE SETUP.EXE # 提取单个文件纯音频盘的处理方式完全不同它没有文件系统只能用抓轨工具按轨道读成音频文件这一点别搞混。4.3 macOS 路线设备节点直读注意 raw 设备macOS 下的思路和 Linux 接近但设备命名不同。先用diskutil list看设备光驱通常显示为disk4之类对应的原始设备节点是/dev/rdisk4前面带r的那个。做镜像时一定要用 raw 设备它的读写缓冲更少、速度更快对坏盘的响应也更直接。# 查看设备列表找到外置光驱对应的 disk 编号 diskutil list # 卸载卷但保留设备可访问 diskutil unmountDisk /dev/disk4 # 整盘读取为镜像块大小按 2048 对齐 sudo dd if/dev/rdisk4 of$HOME/disc.img bs2048 statusprogress # 校验镜像与设备容量是否一致 ls -l $HOME/disc.imgstatusprogress这个参数在 macOS 自带的 dd 上不一定支持如果不认就换成bs2048加kill -INFO手动看进度或者用别的工具。读取完成后macOS 通常能直接双击挂载.iso或.cdr文件挂载之后按普通目录复制即可。macOS 上有一个特有的坑复制带特殊字符文件名的文件时会额外生成以._开头的隐藏文件这些是资源分支的副产物。如果你只是要文件内容可以忽略它们如果数量很多影响观感复制完成后批量清理一下。另外macOS 对 ISO 9660 的 Rock Ridge 扩展支持有限权限位可能丢失复制出来的文件会统一变成当前用户的权限这在做归档时要有心理准备。4.4 校验怎么确认这次复制是完整的复制完不等于复制对校验这一步我从来不省。校验分三个层次按严格程度递增。第一层是体量校验。比对各文件的总字节数与镜像大小、镜像大小与blockdev --getsize64的读数。差异应该只来自文件系统开销卷描述符、路径表、目录记录、扇区对齐填充通常在几百 KB 到 1MB 量级。如果散文件总大小比镜像小了十几 MB说明有文件没复制出来。第二层是数量校验。用工具列出盘上的完整文件清单与本地复制结果做对比# 从镜像中导出完整文件列表 isoinfo -i disc.img -f | sort list_img.txt # 生成本地文件的相对路径列表 cd ~/cd_backup find . -type f | sed s|^\./|/| | sort list_local.txt # 对比差异 diff list_img.txt list_local.txt输出为空就说明一个不漏。这一步能抓出“静默失败”——有些文件复制时没报错但实际是 0 字节或者被截断了光看总量不一定能发现。第三层是内容校验。适合对数据准确性有硬要求的情况比如归档、取证、交付。做法是对每个文件算哈希值find ~/cd_backup -type f -exec sha256sum {} | sort -k2 hash_local.txt如果要和原始盘比对就挂载镜像算一遍然后diff两份哈希清单。镜像挂载后的读取是纯内存/硬盘操作速度快可以放心跑。5. 常见故障速查与避坑经验5.1 问题速查表按现象找原因下面这张表是我这些年积累下来的高频问题对照覆盖了绝大部分“复制不出来”的场景。现象高概率原因处理方向资源管理器能看到目录双击文件卡住坏扇区导致驱动反复重试停止文件级复制改用镜像工具带 mapfile 读取文件名全是 8.3 短名刻录时未启用 Joliet/Rock Ridge用卷描述符工具确认无扩展则接受短名后人工重命名复制到 99% 报“无法读取源文件”文件末尾扇区损坏用镜像工具单独重读该区间或从镜像中提取该文件光驱盘符显示 0 字节纯音频盘或轨道布局异常确认轨道类型音频盘改用抓轨工具挂载报 wrong fs type混合模式盘或桥接盘布局先读轨道信息确认数据轨位置再挂载中文名变乱码编码不匹配Joliet 未正确解析换用支持 Joliet 的解析工具重新列目录复制出的文件时间全是 1995 年卷内时间戳未正确写入回落到默认值属正常现象按目录结构而非时间排序复制到一半提示空间不足目标分区为 FAT32或预留空间不足换 NTFS/exFAT按镜像大小 2.2 倍预留提示路径过长Joliet 路径限制叠加系统路径限制目标目录设在根目录缩短路径两个文件名只差大小写复制后少一个ISO 9660 不区分大小写先做镜像再逐目录单独导出镜像文件比预期小很多读取提前终止或设备容量识别错误比对blockdev --getsize64读数重新读取提取出的文件打开是乱码扇区模式不匹配导致数据错位确认是 Mode 1 还是 Mode 2调整块大小表里前三条是我遇到频率最高的。特别说一下第三条“复制到 99% 失败”这种情况用镜像工具往往能救回来。原因是文件级复制在末尾失败后驱动已经放弃了那个文件而镜像工具会逐扇区重试只要那个扇区的数据还有一丝能读出来的可能配合多遍扫描策略成功率就高得多。5.2 几条只有踩过坑才知道的操作细节第一条物理盘只碰一次。我做任何老盘抢救第一件事永远是整盘镜像之后所有操作都在镜像上做。见过太多人拿着划痕盘反复用资源管理器拖拽拖了十几次本来能读出来的区域被越读越糟。光盘的读取是激光照射理论上不磨损但老化的反射层在反复的激光和热量作用下确实会加速劣化尤其是已经有微小损伤的区域。第二条读取速度下调有明显收益。光驱默认按最高速度读这在好盘上没问题但在有划痕的盘上会显著降低纠错成功率。很多读取工具支持限速参数把速度降到 4 倍速甚至 2 倍速虽然总耗时变长但单扇区的信噪比提升明显坏区读出的概率会大幅上升。我一般用“先高速扫一遍、再低速啃坏区”的组合策略。第三条不要用文件预览或杀毒软件直接扫光盘。这一点很多人忽略。光盘插入后某些系统组件会自动去读盘上的文件生成缩略图、索引、扫描这些后台读取会和你自己的复制任务抢占激光头而且在坏盘上会引发反复重试导致整机卡顿。我的做法是插入盘后立刻取消所有自动扫描先做镜像之后想怎么扫都行。第四条mapfile 一定要留着。ddrescue生成的 mapfile 记录了每个扇区的读取状态是断点续读的唯一依据。中途中断、换光驱、隔天再读都必须用同一个 mapfile 才能接着干。我一般把它和镜像文件放在一起命名成disc.img.map。第五条镜像和散文件各存一份。镜像的价值在于完整保真散文件的价值在于方便使用。只留镜像将来要用得先挂载麻烦只留散文件将来发现某个文件有问题就没法回溯了。两份都留着成本也就是一倍空间。5.3 数据抢救的优先级顺序如果盘况很差别想着一次全弄出来按优先级分阶段推进效率最高。第一阶段抢元数据。先读卷描述符所在的扇区区域通常是第 16 到第 32 个扇区附近拿到卷标、根目录位置、逻辑块大小。这些信息只有几十 KB但决定了后续能不能解析目录结构。如果连这部分都读不出来后面基本无望。第二阶段抢目录树。目录记录通常集中在盘的前部比文件数据区更容易读。把目录树完整读出来你就有了“这张盘上到底有哪些文件、各多大、各在什么位置”的完整清单。这份清单本身就是重要资产即使文件读不出来也知道丢了什么。第三阶段按价值排序抢文件内容。优先救小文件成功率高、耗时短、优先救目录结构顶层的文件、优先救有明确命名的文件。对那些明显是大体积媒体文件、又位于坏区附近的放到最后。第四阶段处理残余坏区。到这一步能读的基本都读了剩下的就是硬骨头。这时候可以换光驱、降速、反向扫描、甚至尝试不同的读取工具把最后那点数据榨出来。我最多的一次是换了四个光驱、跑了七遍扫描把一张严重划伤的盘从 82% 的读取率提到了 97%。这个顺序的核心逻辑是先保证“知道有什么”再保证“拿到多少”最后才追求“全部拿到”。反过来做往往是在一个坏区上耗掉几小时结果连目录清单都没保存下来。我自己在这些盘上折腾下来最大的体会是光盘这东西的可靠性完全取决于“你什么时候开始备份”。刚刻好的盘几乎不会出问题问题都出现在放了五到十年之后。所以现在我给任何重要数据做光盘归档都会同时留一份硬盘副本并且每隔几年做一次“可读性抽检”——随便挑几个文件读一遍确认盘还活着。抽检这件事花不了十分钟但能让你在盘彻底报废之前提前发现征兆。另外一个小技巧如果手头的盘实在读不出来别急着丢把它平放在干燥阴凉处放几天再试有时候反射层和基材的应力会缓慢释放读取成功率会有微妙变化——这不是玄学我在几张盘上确实遇到过虽然不能保证。