給定原始和備份檔案系統,如何找出是否有檔案遺失?

給定原始和備份檔案系統,如何找出是否有檔案遺失?

我發現從Stackoverflow 上的這篇文章,如果你只是想獲取內容不同的相應文件的列表,那麼你可以執行:

diff  --brief --recursive dir1/ dir2/

……我自己嘗試一下,這給了一個內容不同的不錯的小文件列表。

但是,如果我對原始檔案系統(假設大檔案系統,例如 2TB)進行了備份,並且我想檢查備份是否與原始檔案系統相同(例如,我想檢查備份是否成功),那麼什麼如果我只對兩邊都不可用的文件有興趣,我應該運行嗎?我想要快速檢查目錄樹的東西(不檢查內容)。

儘管比較文件大小並不能絕對指示備份文件是否不同,但在比較命令期間將其與其他非文件內容元資料進行比較會有所幫助。

(我很抱歉重新發布一個非常相似的問題,但我注意到一個用戶認為這個問題可能偏離主題,所以這個問題肯定會出現在 stackoverflow 上。)

有這方面的經驗嗎?

答案1

檢查修改時間和檔案大小的非 rsync 解決方案:

diff <(find dir1 -mindepth 1 -printf '%P %t %s\n' | sort) <(find dir2 -mindepth 1 -printf '%P %t %s\n' | sort) | grep -E '^[<>]'

輸出範例:

> bar Sat Sep 14 11:52:33.0544384394 2013 91
< foo Fri Sep 13 17:58:21.0213671425 2013 445
> foo Sun Sep  8 23:01:02.0355432619 2013 347

顯示foo已在 中修改dir1bar僅存在於 中dir2

答案2

您沒有告訴我們您使用什麼備份解決方案,但幾乎所有真正的備份程式都有「驗證」模式。 (在這種情況下,「真正的」備份工具類似於 Bacula,專門為備份和復原而設計的軟體)。
在其他條件相同的情況下,我建議使用真正的備份軟體及其內建驗證工具。


rsync -nav --delete <backup> <original>我的建議是,所有其他事情都不相等。
檢查內容,並會告訴您額外的文件、不同的文件和遺失的文件。它不像 a 那樣深入(慢)diff,這-n意味著它實際上不會觸及檔案系統。

答案3

根據上面的答案,我想出了以下我想分享的小腳本:

# vi /bin/checkbackup

#!/bin/bash
echo "1/5: Checking source files..."
find "$1" -type f -printf "%P %s\n" | sort > ~/.checkbackup_files.tmp
echo "2/5: Comparing destination files..."
find "$2" -type f -printf "%P %s\n" | sort | diff - ~/.checkbackup_files.tmp
echo "3/5: Checking source directories..."
find "$1" -type d -printf "%P\n" | sort > ~/.checkbackup_dirs.tmp
echo "4/5: Comparing destination directories..."
find "$2" -type d -printf "%P\n" | sort | diff - ~/.checkbackup_dirs.tmp
echo "5/5: Cleaning up"
rm -f ~/.checkbackup_files.tmp
rm -f ~/.checkbackup_dirs.tmp

# chmod 755 /bin/checkbackup

用法:

$ checkbackup /path/to/dir1 /path/to/dir2

沒有報告意味著資料夾結構和名稱相同,並且文件具有相同的大小和名稱,沒有任何遺失。

在 SATA2 5400rpm 光碟上的 1.5TB 目錄樹上進行測試,大約需要 5 分鐘即可完成。

這個腳本還沒有完成,毫無疑問還有其他更好、更快、更深入、有更多檢查工具。但我想無論如何我都會分享它。

相關內容