Backup
如何檢查 dd 備份的完整性?
我剛剛通過以下方式備份了整個硬碟驅動器(50GB)
ssh
:dd if=/dev/hda | buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"
現在檢查文件完整性的最佳方法是什麼
image.img
,即如何驗證所有內容是否正確複製?
如果命令成功終止,則備份是正確的,除非出現硬體故障(這同樣會影響您可能執行的任何驗證)。如果硬體出現故障,以後可能會變得不正確,但大多數儲存硬體都會檢測到損壞。
這裡有一個警告:在管道中,shell 不會從左側報告錯誤。(這是因為一個相當常見的場景,即右側不需要讀取所有數據,例如
some_command | head
,而左側因為不再需要它的輸出而死掉。)所以這裡dd
會出現讀取錯誤被忽略。在 bash 中,設置pipefail
選項以報告管道所有部分的錯誤。另外,請注意
dd bs=…
忽略一些錯誤並且dd
通常比替代品慢。我建議根本不要使用dd
:僅複製整個文件沒有任何好處。與您可能在某處讀到的相反,dd
它不是具有特殊屬性的低級磁碟訪問命令,絕對沒有魔法 indd
,魔法在/dev/hda
.shopt -s pipefail set -e </dev/hda buffer -s 64k -S 10m | ssh myuser@myhost "cat > ~/image.img"
儘管如此,如果您想檢查備份,最好的方法是在每一側獲取加密校驗和並進行比較。例如:
ssh myuser@myhost "sha1sum image.img" & sudo sha1sum /dev/hda
檢查兩個校驗和是否相同。
請注意,這將在檢查時測試備份和原始文件是否相同。您更改的任何內容
/dev/hda
,包括掛載和解除安裝文件系統,即使沒有進行任何更改(這將更新許多文件系統上的最後掛載日期),都會更改校驗和。如果您想稍後驗證完整性,請在某處備份時記下磁碟的校驗和。