1. 检查硬盘(只读)
应用在不做任何改动的情况下扫描硬盘。它统计文件和文件夹数量,标出 exFAT 不允许的名称,跳过 System Volume Information 和 $RECYCLE.BIN 等系统文件夹,并把硬盘报告的已用空间与 macOS 实际能看到的文件做对比。差距过大就是警告,说明部分数据可能对 macOS 不可见。
- 不会向硬盘写入任何内容
- 无法读取的项目会被列出,而不是悄悄跳过
- 你会看到需要多少备份空间
共五个阶段,并且绝不跳过任何一个。本页说明在每一步你的数据会发生什么,以及有哪些检查在帮你防止失误。
应用在不做任何改动的情况下扫描硬盘。它统计文件和文件夹数量,标出 exFAT 不允许的名称,跳过 System Volume Information 和 $RECYCLE.BIN 等系统文件夹,并把硬盘报告的已用空间与 macOS 实际能看到的文件做对比。差距过大就是警告,说明部分数据可能对 macOS 不可见。
文件被复制到你选择的文件夹。复制每个文件的同时计算其 SHA-256。进度保存在只追加的清单(manifest)中,因此你可以暂停、退出并继续。
每个备份文件都绕过缓存从磁盘重新读取,并把其校验和与根据原文件计算的校验和比对。哪怕只有一个字节变化,校验也会失败。
只有以下条件全部满足,才能进行格式化:备份已完全校验;备份文件仍然存在且大小正确;硬盘的卷身份、磁盘身份和大小仍与之前一致;备份不在该硬盘上;并且你输入了准确的硬盘名称。应用会在动硬盘之前先记录“即将擦除”,这样即使被中断,之后也能识别出来。
所有文件被复制到新的 exFAT 卷,并再次读取以比对校验和。exFAT 不允许的名称会被重命名并列出。最终报告保存在备份旁边。
当一个文件写入后从硬盘读回的内容,计算出的 SHA-256 与原文件相同,才算已校验。应用不会仅凭文件大小或日期来判断。唯一的例外是名为 ._* 的 macOS 元数据文件:复制到 exFAT 后,macOS 会把它们合并为扩展属性,因此只能确认已写入,无法重新读取校验。
exFAT 不允许使用字符 " * : < > ? \ |、控制字符,以及以空格或点结尾的名称。这类名称会被替换并列入报告。仅大小写不同的名称会被改为唯一的名称。文件和文件夹的修改日期会被保留。
macOS 内置的 NTFS 读取器可能隐藏或重命名名称不被 Windows 允许的文件。NTFS2exFAT 只能处理 macOS 呈现给它的内容。当硬盘的已用空间远大于可见文件时它会发出警告,但无法检测出某一个被隐藏的文件。如果你的硬盘是由 Mac 或 Linux 的 NTFS 驱动写入的,请在转换之前,先在 Windows 中或用基于 ntfs-3g 的驱动(如 NTFSTool)检查。
转换引擎是一个小型 Swift 库,除 Foundation 和 CryptoKit 外没有其他依赖。Mac 应用和命令行工具共用同一个引擎。
引擎有单元测试(其中包括一个测试:在已校验的备份中翻转一个字节,并要求校验失败),也有端到端测试:构建真实的 NTFS 磁盘镜像,运行完整转换,并用 SHA-256 比对每个还原的文件。在实体外接硬盘上的测试仍在进行,这也是目前仍是测试版的原因之一。
同一个引擎也提供为 ntfs2exfat-cli。
ntfs2exfat-cli list
ntfs2exfat-cli start disk4 ~/Backups
ntfs2exfat-cli backup ~/Backups/NTFS2exFAT-<job>
ntfs2exfat-cli erase ~/Backups/NTFS2exFAT-<job> --confirm "MY DRIVE"
ntfs2exfat-cli restore ~/Backups/NTFS2exFAT-<job>