1 序言
我電腦上有超過 2T 的數據需要備份,但是這么多數據使用 windows 文件歷史記錄來做多版本備份實在太消耗空間了。我用 FreeFileSync 鏡像同步一份數據到移動硬盤來作為單版本備份使用,為了節約移動硬盤空間,刪除文件的方式使用“永久”。有一天,我修改了電腦上 500GB 的文件,並且把他們移動到了另外一個文件夾,然后打開 FreeFileSync 開始鏡像同步。在 FreeFileSync 漫長的拷貝數據的過程中,我隨手點開移動硬盤的屬性頁面,發現了一件很奇怪的事情:移動硬盤已用空間大小怎么少了500GB?經過一番檢查,我發現 FreeFileSync 居然是先把目標文件夾原來目錄中的文件給刪除了,然后才是拷貝新增的數據到新的文件夾。所以在鏡像同步的過程中,我居然一個版本的備份數據都不存在!
拷貝 500GB 的文件可是需要 60 分鍾啊,這 60 分鍾的過程中,我的數據居然沒有備份的保護!本來以為同步一下能提升數據安全性,沒想到在同步的過程中,數據居然變得更加不安全了!
2 測試結果
根據我對一堆同步軟件的測試結果,它們默認都會先移除掉目標目錄下的文件,然后才是把新的文件拷貝過去。如果你移動了一堆的文件,會導致在同步的過程中,目標目錄下面的文件不完整,此時如果源目錄所在的硬盤發生故障,所有數據都會丟失。
許多軟件有一個使用“回收站”存放被刪除的文件的選項,但是“回收站”滿了的時候,它們會靜悄悄地把文件永久刪除了,非常不可控。所以 "回收站" 並不是解決方案。
有些同步軟件有 “歷史版本” 的功能,但是用同步軟件本來就只想要一個版本,如果要歷史版本,為什么不直接用 windows 自帶的 “文件歷史記錄” 呢?
軟件 | 長路徑 | 原子性同步 | 價格 |
FreeFileSync 11.17 | ✓ | 🤔 需要手動模擬 | 免費 |
AllwaySync 21.1.5 | ✓ | ✗ | 免費但是限制文件數量 |
Microsoft SyncToy 2.1 | ✗ | ✗ | 免費 |
DirSync Pro 1.54b1 | ✓ | ✗ | 免費 |
Syncovery 9.46k build 358 | ✓ | 🤔 可以調整參數變成先拷貝文件,然后刪除文件 | 收費 |
⭐️ FileGee 免費版 11.0.9 | ✓ | ✗ 不管是"鏡像同步"還是"增量備份",都沒法正確做單版本備份。 | 免費 |
長路徑:windows 上的歷史遺留問題,很多軟件沒法處理 > 260 路徑長度的文件。如果備份/同步軟件不支持長路徑,那在備份/同步的時候,會丟失一部分數據。
原子性同步:保證只有新版本的數據
同步完成之后,老版本的
同步數據才會被自動刪除掉。也就是這篇文章講的內容。
3 DIY 一個靠譜的方案
FreeFileSync 默認的"鏡像同步",並且設置 "永久" 刪除文件也是不安全的,但是可以通過調整選項,讓它變得安全。
注意它的設置中的 "無風險的文件復制" 功能只對於文件名不變,單純修改了文件內容有效。如果你像我一樣改了文件內容,然后改了下文件名,那這個選項是沒法保護你的備份數據的。
需要按照下圖的方式設置,才能安全同步數據。


上面的設置的工作原理:鏡像同步的時候,被刪除和修改的文件先移動到歷史版本文件夾,然后在任務成功完成的時候,自動執行一個命令,刪除歷史文件夾里面的內容。注意,失敗或者任務中斷的時候,命令不會執行,所以歷史版本是安全的。同時日志也放到了目標磁盤下,如果源硬盤同步到一半的時候壞掉,可以根據日志手動回滾這次失敗的同步。
3.1 在成功時執行的命令
(1) 如果直接從資源管理器里面拷貝路徑,獲得的是下面的以盤符開頭的路徑。
"E:\Revisions-freefilesync\atomic mirror"
(2) 但是重新插上移動硬盤后,盤符可能會變化,所以不能使用盤符,需要使用
volume GUID。
在"命令提示符"執行下面的命令,在輸出結果的最后幾行,會顯示盤符和 volume GUID 的映射關系。
mountvol.exe
(3) 然后可以拼接出下面這種以 volume GUID 開頭的文件路徑
"\\?\Volume{576f2736-1404-46b6-b46e-cf34cc7260f0}\Revisions-freefilesync\atomic mirror"
(4) 把上面的路徑放到 rmdir 命令的參數里面,就是完整的命令了。把類似下面的結果直接貼到上圖中的 “在成功時” 執行的命令后面的框里就行了。
rmdir /s /q "\\?\Volume{576f2736-1404-46b6-b46e-cf34cc7260f0}\Revisions-freefilesync\atomic mirror"
4 了解更多
- 不同電子設備之間傳輸和備份文件的方案 這個博客里面寫了詳細的測試過程和結果