В настоящее время мы извлекаем архив 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