Migration Flow
五步迁移,步步可逆
完整的事务流程设计,每一步都有校验和回退机制。中途失败可重试,迁移成功后随时回滚到原状。
01
复制
02
校验
03
备份
04
链接
05
清理
Step 01
CopyFile2 并行复制
利用 Windows CopyFile2 API 的 unbuffered IO 模式,配合 Rust Rayon 并行框架,大文件和小文件分别走不同复制策略,最大化磁盘吞吐。
- 大文件走 CopyFile2 unbuffered 模式,绕过系统缓存直接 DMA 传输
- 小文件走 Rayon 并行复制,自动根据 CPU 核心数调整并发度
- SSD 上 8 线程并行,HDD 上单线程顺序读写,避免磁头抖动
30%
大文件复制速度提升
8 线程
SSD 最大并行度
copy_engine.rs
fn copy_parallel(src: &Path, dst: &Path) -> Result<()> {let meta = fs::metadata(src)?;
if meta.len() > LARGE_FILE_THRESHOLD {
copy_file2_unbuffered(src, dst)?;
} else {
files.par_iter().for_each(|f| {
fs::copy(&f.src, &f.dst).ok();
});
}
Ok(())
}
源文件
0xA3F2...8B1C
目标文件
0xA3F2...8B1C
✓ 校验通过
Step 02
XXHash 完整性校验
复制完成后对源文件和目标文件做 xxHash64 校验比对,确保每一位数据都完整无误。校验不通过自动重试,最多三次。
- xxHash64 极速哈希,4 GB/s 以上吞吐,校验不拖后腿
- 逐文件比对源与目标哈希值,发现不一致立即标记重试
- 三次重试仍失败则中止迁移,已复制文件不受影响
4 GB/s
xxHash64 吞吐量
3 次
最大重试次数
Step 03
元数据安全备份
迁移前将原始路径、文件属性、时间戳等元数据写入 SQLite WAL 数据库,即使程序崩溃也能从断点恢复。
- 完整记录原始路径、文件属性、创建/修改/访问时间戳
- SQLite WAL 模式支持并发读写,不阻塞其他操作
- 事务型写入,每步完成后持久化进度,崩溃可恢复
migration_records
idINTEGER PK
src_pathTEXT
dst_pathTEXT
file_hashTEXT
created_atDATETIME
modified_atDATETIME
statusENUM
C:\Users\...\AppData
Junction →
D:\Migrated\AppData
Step 04
Junction / Symlink 透明链接
在原位置创建 NTFS Junction(目录)或 Symlink(文件),所有应用读写操作透明转发到新位置,零感知无感迁移。
- 目录迁移创建 NTFS Junction,文件迁移创建 Symlink
- 应用层完全透明,读写操作自动转发到新位置
- 支持 Reparse Point 深度检测,避免嵌套链接问题
Step 05
清理源文件 & 释放空间
确认链接创建成功后,安全移除源文件释放磁盘空间。清理前二次确认链接有效性,确保应用不受影响。
- 清理前验证 Junction/Symlink 可访问,确保链接有效
- 删除源文件后更新迁移记录状态为 completed
- 一键回滚:逆向操作恢复到迁移前状态
删除链接
→
复制回原位
→
恢复元数据
→
完成回滚
完整逆向操作,恢复到迁移前状态
Workflow
安全迁移,放心回滚
五步事务流程,每一步都有保障。