CopyFile2 内核 API + Rayon 并行迭代器 + 分级缓冲区,每一个参数都来自真实代码。
从源码 file_migrator.rs 提取的真实执行流程
递归遍历源目录,构建 DirectoryCopyPlan。收集所有文件路径 + FileSignature(size + modified_ns),生成 SourceManifest。
build_directory_copy_plan() → DirectoryCopyPlan
按路径深度排序创建目标目录树,确保父目录先于子目录创建。
prepare_directory_copy_plan() → mkdir -p sorted by depth
小目录串行复制,大目录 Rayon par_iter 并行。每个文件先尝试 CopyFile2,失败降级为缓冲复制。独立线程 200ms 上报进度。
should_parallelize() ? par_iter : iter → copy_file_optimized()
逐文件验证:源文件 FileSignature 未变 + 目标文件存在 + 大小一致。源文件若在迁移期间被修改,立即报错。
verify_copied_file() → size + modified_ns check
源文件重命名为 .backup_temp,创建 Junction/Symlink 指向目标,验证链接有效性。失败则还原备份。
fs::rename(src, .backup_temp) → create_link() → verify_link()
删除 .backup_temp 备份文件,完成迁移。若任一步失败,逆向回滚:删链接 → 还原备份 → 删目标。
cleanup_backup() → MigrationResult { success: true }
CopyFile2 优先,缓冲复制降级
每个参数都有据可查
返回首页