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 上单线程顺序读写,避免磁头抖动
0 % 大文件复制速度提升
0 线程 SSD 最大并行度
copy_engine.rs
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(())
}
Step 02

XXHash 完整性校验

复制完成后对源文件和目标文件做 xxHash64 校验比对,确保每一位数据都完整无误。校验不通过自动重试,最多三次。

xxHash64 极速哈希,4 GB/s 以上吞吐,校验不拖后腿
逐文件比对源与目标哈希值,发现不一致立即标记重试
三次重试仍失败则中止迁移,已复制文件不受影响
0 GB/s xxHash64 吞吐量
0 最大重试次数
源文件 0xA3F2...8B1C
目标文件 0xA3F2...8B1C
校验通过
Step 03

元数据安全备份

迁移前将原始路径、文件属性、时间戳等元数据写入 SQLite WAL 数据库,即使程序崩溃也能从断点恢复。

完整记录原始路径、文件属性、创建/修改/访问时间戳
SQLite WAL 模式支持并发读写,不阻塞其他操作
事务型写入,每步完成后持久化进度,崩溃可恢复
migration_records
idINTEGER PK
src_pathTEXT
dst_pathTEXT
file_hashTEXT
created_atDATETIME
modified_atDATETIME
statusENUM
WAL Mode
Step 04

Junction / Symlink 透明链接

在原位置创建 NTFS Junction(目录)或 Symlink(文件),所有应用读写操作透明转发到新位置,零感知无感迁移。

目录迁移创建 NTFS Junction,文件迁移创建 Symlink
应用层完全透明,读写操作自动转发到新位置
支持 Reparse Point 深度检测,避免嵌套链接问题
Step 05

清理源文件 & 释放空间

确认链接创建成功后,安全移除源文件释放磁盘空间。清理前二次确认链接有效性,确保应用不受影响。

清理前验证 Junction/Symlink 可访问,确保链接有效
删除源文件后更新迁移记录状态为 completed
一键回滚:逆向操作恢复到迁移前状态
删除链接
复制回原位
恢复元数据
完成回滚
完整逆向操作,恢复到迁移前状态

安全迁移,放心回滚

五步事务流程,每一步都有保障

返回首页