我每天都会将 SD 卡上的数据同步到电脑上,实际上是整个 SD 卡
几天前,SD 卡损坏了,我换了一张新卡,并将所有数据从电脑复制回新 SD 卡,但其中一些文件已损坏
这里,我很困惑,如果我继续以这种方式同步我的文件并且我的 SD 卡上的某些文件损坏了,它们也会同步并且我在双方(PC 和 SD 卡)都只有损坏的文件,我该如何防止这种情况发生?
附言:
Android 正在使用 SD 卡,文件系统:FAT32
电脑操作系统:Windows 7 x64 位
我正在使用 Android 版 FolderSync 应用进行无线同步(本地网络同步)
当我使用连接到 PC 的数据线进行同步时,有时也会使用 PC 软件 FreeFileSync(同样仅限本地同步)
答案1
有两种方法可以防止这种情况:
在同步之前对 SD 卡进行完整性检查,并在同步之后比较哈希值。完整性检查取决于您使用的文件系统类型。如果文件格式支持,您也可以进行基于文件的完整性检查。
保留 SD 卡的多个副本。这样,您就可以随时回到较早的日期(损坏发生之前)。
选项 1 是可取的选项,如果有数据损坏,您希望尽快了解。
答案2
当然,这不是您个人的情况,也不适用于 Windows 或 Android,但对于阅读您出版物的其他用户来说可能会很有用。
Linux 上有开源软件可以解决您所写的问题。
https://github.com/dennisrazumovsky/precizer
precizer 是一款 CLI 应用程序,用于检查同步后文件的完整性。该程序以递归方式遍历目录并创建文件及其校验和的数据库,然后进行快速比较。
precizer 专注于处理巨型文件系统。使用该程序可以通过将数据与来自不同来源的文件及其校验和进行比较来查找同步错误。或者,它可以通过比较来自同一来源的不同时间的数据库来抓取历史变化。
简单示例
假设有两台主机,磁盘很大,内容也完全一样,分别挂载在/mnt1和/mnt2上,一般就是检查一下内容是否完全一样,或者有没有什么区别。
1.在第一台主机名为host1的机器上运行该程序:
precizer --progress /mnt1
程序运行后,将递归遍历从 /mnt1 开始的所有目录,并在当前目录中创建 host1.db 数据库。--progress 选项可直观显示进度,并显示空间量和正在检查的文件数。
2. 在第二台具有主机名的机器上运行该程序,例如 host2:
precizer --progress /mnt2
结果,将在当前目录中创建 host2.db 数据库。
3.将包含 host1.db 和 host2.db 数据库的文件复制到其中一台机器,并使用适当的参数运行程序来比较数据库:
precizer --compare host1.db host2.db
屏幕上将显示以下信息:
- 哪些文件在 host1 上缺失,但在 host2 上存在,反之亦然。
- 对于两个主机上存在的文件,校验和不匹配。