我們目前將 TAR 存檔提取到 SD 卡,如下所示
tar xf ${ROOT}/rootfs.tar -C /cynox/${DRIVE}/${TARGET}
附帶說明:rootfs.tar 包含用於嵌入式 Linux 系統的檔案。其中一些系統的 SD 卡上出現某種資料損壞。這可能會導致檔案遺失、檔案內容損壞等,從而阻止嵌入式系統正常運作甚至啟動。這很可能與 SD 卡創建過程中的問題無關,但為了完全確定,我們也必須朝這個方向進行調查。
之後將 SD 卡上的內容與來源 TAR 的內容進行比較的最佳方法是什麼?
我不知道它在 Linux 上是否實用,我想到的是
- 從 SD 卡建立一個新存檔並比較兩個存檔的 MD5(或者它們自然會有所不同嗎?)
- 在其他地方提取來源 TAR,計算每個檔案的 MD5 並逐個檔案進行比較(爬取所有資料夾/檔案是否可行?)
- 如何直接將 SD 卡內容與 TAR 檔案的打包內容逐一比較?
- 我們是否需要對資料夾結構、文件/資料夾權限等進行一些特殊驗證?
我不知道 Linux 為這項任務提供了哪些可能性,所以如果可能的話,我將感謝任何建議、正確方向的指示和範例。
答案1
要檢查您是否獲得相同的tar
文件,您可以執行以下操作(此處使用 GNU tar
):
cd /where/it/was/extracted &&
tar tf /path/to/file.tar |
tar -T - --no-recursion -cf - |
cmp - /path/to/file.tar
請注意,它比較內容和元數據,包括所有權和時間。例如,如果您沒有將文件提取為root
,則所有權可能會有所不同。
您還需要確保使用tar
與建立該tar
文件相同的實作。
答案2
我會比較每個文件的校驗和。
首先是rootfs
資料夾發出以下命令:
rootfs# find . -type f -print0 | xargs --null sha1sum --binary > ../rootfs.sum
然後在targetfs
資料夾中檢查每個文件:
targetfs# sha1sum --check <PATH_TO_SUM_FILE> | grep FAILED