将 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

相关内容