完整的事务流程设计,每一步都有校验和回退机制。中途失败可重试,迁移成功后随时回滚到原状。
利用 Windows CopyFile2 API 的 unbuffered IO 模式,配合 Rust Rayon 并行框架,大文件和小文件分别走不同复制策略,最大化磁盘吞吐。
fn copy_parallel(src: &Path, dst: &Path) -> Result<()> {
let meta = fs::metadata(src)?;
if meta.len() > LARGE_FILE_THRESHOLD {
// 大文件: CopyFile2 unbuffered
copy_file2_unbuffered(src, dst)?;
} else {
// 小文件: Rayon 并行
files.par_iter()
.for_each(|f| {
fs::copy(&f.src, &f.dst).ok();
});
}
Ok(())
}
复制完成后对源文件和目标文件做 xxHash64 校验比对,确保每一位数据都完整无误。校验不通过自动重试,最多三次。
迁移前将原始路径、文件属性、时间戳等元数据写入 SQLite WAL 数据库,即使程序崩溃也能从断点恢复。
在原位置创建 NTFS Junction(目录)或 Symlink(文件),所有应用读写操作透明转发到新位置,零感知无感迁移。
确认链接创建成功后,安全移除源文件释放磁盘空间。清理前二次确认链接有效性,确保应用不受影响。
五步事务流程,每一步都有保障
返回首页