Извлеките 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

Связанный контент