沒有經過還原驗證的備份,只是一句聲稱
重點摘要
- 每一層驗證都抓到了上一層抓不到的問題:34 個檔案的校驗碼全部吻合卻打不開;一次雜湊比對標出了壞軌上的一段影片,而 SMART 仍顯示「Verified」。
- 替每個儲存位置寫出故障情境之後,我最大的單點風險落在一個 Apple 帳號上。執行檢查的 AI 代理也算作資料的讀取者。
- 異地副本方面,我比較了四種做法,選了 Arq 備份到 Backblaze B2:在 Mac 上加密,放在與我的電子郵件分開的帳號裡,每月大約 1 美元。
- 一次還原測試在 12 秒內從 B2 取回了 760 MB,每個檔案都與當初儲存時記錄的校驗碼一致。
我的職涯有很大一部分在做資料庫和串流系統。在那裡,沒有複寫、沒有測試過的還原、沒有備份過期警報,什麼都不能上線。9 月,我讓自己的儲存接受同樣的稽核,並沿用了那份工作裡的四條規則:
- 資料存放的每個位置都佔一列,並配一個故障情境。
- 副本要經過檢查才算備份,檢查分三層:數檔案、算雜湊、開檔案。每一層都能抓到上一層抓不到的問題。
- 落後的備份會發出警報。
- 做事的 AI 代理也算作資料的讀取者。
每個儲存位置一列,一個故障情境
清單是一個 TOML 檔,Mac、外接硬碟、iCloud、Google、GitHub 和代理的對話紀錄各佔一列。每一列寫明 Mac 壞了、房子燒了、帳號把我鎖在外面時我會失去什麼,再由一支腳本把這個檔案轉成依故障分類的頁面。
這樣寫出來之後,最大的單點風險是一個帳號。開啟「最佳化 Mac 儲存空間」後,Mac 只保留放得下的照片原始檔,圖庫的其餘部分只存在 iCloud 上。我開了「進階資料保護」,所以 Apple 不持有金鑰,也沒辦法幫我復原帳號。保護好帳號只是一半的修正,另一半是在帳號之外留一份副本。
這份副本是每季用 osxphotos 把原始檔匯出到本機硬碟。它會記得已經匯出過哪些,所以之後每次只複製新照片。第一次執行只跑到 25 Mbit/s,而這條線路的測速是 909。「照片」會從 iCloud 一個一個下載缺少的原始檔,每一項的等待時間佔了大半。
驗證分三層:計數、雜湊、開啟
每一層都比上一層成本更高。對照清單計數很便宜。我檢查第一份時光機備份的方法,是以唯讀方式掛載快照並重新清點檔案。計數看不出被截斷的檔案。雜湊看不出複製之前就已損壞的檔案。
SMART 顯示「Verified」時,雜湊比對抓到了一個壞軌
一顆存影片的硬碟應該要在第二顆硬碟上有完整副本。便宜的雙槽硬碟座無法同時運作兩顆 3.5 吋硬碟(第二顆會從匯流排上斷線),所以比對只能一次一顆:把每個檔案的雜湊寫進 Mac 上的清單,換硬碟,再算一次雜湊,比對兩份清單。每顆硬碟一個晚上。
除了一段 252 MB 的影片片段,所有檔案都吻合,而徹夜那一輪已經把它從頭讀到了尾。隔天早上複製它時,在 76.5 MB 處出現 I/O 錯誤,兩次都卡在同一個位元組。這顆硬碟的 SMART 摘要依然顯示「Verified」。我放棄了這個片段。比對把一個未知變成一筆已知的損失,沒有它,我說不出其他檔案裡哪些是安全的。
34 個檔案校驗碼吻合,卻打不開
一顆舊 SSD 很明顯適合當時光機磁碟,但上面存著我想保留的照片和影片。清除之前,我把它複製了兩份,並用 SHA-256 清單核對兩份副本。每個檔案都吻合。接著逐一開啟每個檔案:解碼每張圖片,完整播放每段影片,解析每份文件。34 個失敗了。
副本與來源的雜湊一致,所以損壞出在原本的硬碟上,很可能已經好幾年了。這些檔案寫入之後再也沒人打開過。之後這顆硬碟被清除成加密的 APFS,成了時光機磁碟。
代理算作資料的讀取者
大部分工作由一個代理完成:它量測硬碟、撰寫清單、建置頁面、執行匯出。它打開的所有內容都會傳給模型供應商,依對方的保存條款存放,同時也會留在我 Mac 上保存的對話紀錄裡。
所以存放個人文件的資料夾設為先問再讀:每次讀取都需要我核准。最敏感的檔案移進了一個加密磁碟映像檔,刪除原檔之前先做過雜湊驗證。這個映像檔是禁區,因為掛載它需要一組只有我會輸入的密碼。
一開始並不是這樣。我打開映像檔測試時,它沒有跳出密碼提示就掛載了。建立映像檔時,macOS 把密碼存進了登入鑰匙圈,所以這層加密能擋住所有人,只有坐在我已解鎖的 Mac 前面的人除外。代理想讀取鑰匙圈項目來找出儲存的密碼時,它自己的權限檢查以探查憑證為由拒絕了這道指令,於是這一步由我手動完成。項目在「鑰匙圈存取」裡(我第一次搜尋找的是較新的「密碼」App,沒找到)。刪掉它之後,密碼提示又回來了。
異地備份每月約 1 美元,功夫花在選擇上
現在每個重要的儲存位置都有兩份副本,但兩份都在同一個房間裡。故障情境決定了異地副本必須涵蓋什麼:
- 場所損失(火災、竊盜):另一棟建築裡的一份副本。
- 刪除與勒索軟體:附日期的快照,讓我能把一個資料夾還原成上週二的樣子。iCloud 雲碟或 Google 雲端硬碟 App 這類同步資料夾,會連刪除也一起同步。
- 帳號遺失:放在存有我電子郵件的帳號之外。
- 供應商遭入侵:在 Mac 上加密,金鑰只有我持有。
- 還原:每小時一個還原點,而且在新的 Mac 上不用終端機就能完成還原。
異地備份的範圍是文件、掃描檔、專案資料和代理的對話紀錄,影片不在其中。10 月 10 日,我比較了四種做法:
| 做法 | 100 GB 的費用 | 誰持有金鑰 | 隱憂 |
|---|---|---|---|
| Arq 7 備份到 Google 雲端硬碟 | 一次性 $59.99,另加 Google 2 TB 方案每月 $9.99 | 我 | Arq 的版本說明裡,2021、2023 和 2024 年都有針對 Google 配額的修正 |
| Arq 7 備份到 Backblaze B2 | 一次性 $59.99,另加每月約 $0.70(每 TB $6.95) | 我 | 要持續付錢給兩家廠商 |
| restic 或 Kopia 備份到 B2 | 自由軟體,另加每月約 $0.70 | 我 | restic 沒有 App,所以排程要自己設定、還原要用終端機;Kopia 有 App,但版本還停在 0.23 |
| Backblaze Personal Backup | 每年 $99,不限容量 | Backblaze,除非我設定私密金鑰 | 在預設的 30 天歷程下,一顆 30 天沒接上的硬碟可能會被移除 |
Google 雲端硬碟是最省事的選擇,但它不符合帳號這一條:一次被鎖,電子郵件和備份一起沒了。
付費買到的是好用,不是安全。加密資料放在 B2 上,用 2015 年起就持續發布的 restic 和用 Arq 一樣安全。Arq 出自一家小公司 Haystack Software,但它的資料格式是公開的,所以就算公司收掉,備份也還是讀得出來。這 $60 買到的是在新的 Mac 上點幾下就能完成的還原,不需要終端機,也不需要代理。
工具的選擇可以反悔:換工具的成本是重新上傳,大約一天。弄丟加密密碼則無法挽回,因為沒有人能重設它,廠商也不能。
我選了 Arq 備份到 B2。結果弱點是 Backblaze 帳號。它的兩步驟驗證碼寄到 Gmail,所以任何進得了我 Gmail 的人都能登入並刪掉備份。現在它改用驗證器 App,基於同樣的理由,我也沒有用「使用 Google 帳戶登入」。
備份工具每個區塊只上傳一次,並保留每個版本
Arq 的一個快照是所有檔案及其組成區塊的完整清單,但每個區塊只上傳一次。Arq 用內容的雜湊替區塊命名,並略過儲存桶裡已有的區塊,所以第一次上傳之後,每小時一次的執行只傳送 15 到 45 MB。舊快照幾乎不佔成本,因為它們和新快照共用區塊。
| Arq 7 | restic | Kopia | |
|---|---|---|---|
| 區塊在哪裡切分 | 未公開(Arq 5 用的是滾動校驗碼) | 依內容切分(Rabin),平均約 1 MiB | 依內容切分(buzhash) |
| 區塊命名 | 雜湊混入祕密鹽值;公式未公開 | 明文 SHA-256,保存在加密的索引檔裡 | 以祕密金鑰做 HMAC |
| 加密 | AES-CBC 加 HMAC-SHA256 | AES-256-CTR 加 Poly1305 | AES-256-GCM 或 ChaCha20-Poly1305 |
| 由密碼衍生金鑰 | PBKDF2,200,000 輪 | scrypt | scrypt |
| 刪除舊資料 | 每次備份之後 | prune;執行期間任何備份都無法完成 |
經過一段安全延遲後做垃圾回收 |
依內容切分區塊的意思是,在檔案中間插入內容只會移動附近的區塊邊界,檔案其餘部分仍與已儲存的資料吻合。
區塊名稱之所以重要,是因為儲存供應商看得到它們:明文雜湊讓任何持有儲存桶的人都能檢查我是否存了某個他們手上也有的檔案。Kopia 和 Arq 把一個祕密值混進名稱裡。restic 把明文雜湊藏在加密的索引檔中,它的設計文件也寫明了仍然存在的洩漏。在 B2 主控台裡,我的儲存桶是一些編號資料夾,裡面是隨機命名的物件,用戶端加密從外面看本來就該是這樣。
刪除舊資料是危險的一步。讓一個快照過期,代表要找出剩下的快照都不再使用的每個區塊,而且只刪除這些。一旦弄錯,之後的還原就會缺塊。restic 在清理期間暫停備份,Kopia 則在刪除前等待一段安全期。
接著我用同一層雜湊檢查測試了一次還原:五份掃描的報紙,約 760 MB,12 秒內從 B2 取回,大約 500 Mbit/s,五份都與掃描檔剛進來時我寫下的 SHA-256 清單一致。照這個速度,整份備份不到一小時就能取回。我沒有替完整還原計時過,而且成千上萬個小檔案會比五個大檔案慢。
備份落後時,頁面會變紅
清單頁面即時讀取磁碟,所以時光機一旦落後,不必有人檢查就會變紅。一份悄悄停掉的備份,在需要還原的那天之前,看起來和正在執行的備份沒有兩樣。
10 月做過一次還原,驗證了 B2 上的副本。目前還沒有任何機制檢查它是否仍在執行,這個警報是下一步。