將 TAR 提取到 SD 卡並隨後驗證內容

將 TAR 提取到 SD 卡並隨後驗證內容

我們目前將 TAR 存檔提取到 SD 卡,如下所示

tar xf ${ROOT}/rootfs.tar -C /cynox/${DRIVE}/${TARGET} 

附帶說明:rootfs.tar 包含用於嵌入式 Linux 系統的檔案。其中一些系統的 SD 卡上出現某種資料損壞。這可能會導致檔案遺失、檔案內容損壞等,從而阻止嵌入式系統正常運作甚至啟動。這很可能與 SD 卡創建過程中的問題無關,但為了完全確定,我們也必須朝這個方向進行調查。

之後將 SD 卡上的內容與來源 TAR 的內容進行比較的最佳方法是什麼?

我不知道它在 Linux 上是否實用,我想到的是

  1. 從 SD 卡建立一個新存檔並比較兩個存檔的 MD5(或者它們自然會有所不同嗎?)
  2. 在其他地方提取來源 TAR,計算每個檔案的 MD5 並逐個檔案進行比較(爬取所有資料夾/檔案是否可行?)
  3. 如何直接將 SD 卡內容與 TAR 檔案的打包內容逐一比較?
  4. 我們是否需要對資料夾結構、文件/資料夾權限等進行一些特殊驗證?

我不知道 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

相關內容