Backup

如何檢查 dd 備份的完整性?

  • June 8, 2019

我剛剛通過以下方式備份了整個硬碟驅動器(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它不是具有特殊屬性的低級磁碟訪問命令,絕對沒有魔法 in dd,魔法在/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,包括掛載和解除安裝文件系統,即使沒有進行任何更改(這將更新許多文件系統上的最後掛載日期),都會更改校驗和。如果您想稍後驗證完整性,請在某處備份時記下磁碟的校驗和。

引用自:https://unix.stackexchange.com/questions/45817