Atualmente extraímos um arquivo TAR para um cartão SD como este
tar xf ${ROOT}/rootfs.tar -C /cynox/${DRIVE}/${TARGET}
Como observação lateral: o rootfs.tar contém arquivos para um sistema Linux embarcado. Alguns desses sistemas apresentam algum tipo de corrupção de dados nos cartões SD. Isso pode resultar na perda de arquivos, conteúdo de arquivo corrompido, etc., impedindo o sistema embarcado de funcionar corretamente ou até mesmo de inicializar. Provavelmente, isso NÃO está relacionado a problemas durante a criação do cartão SD, mas para ter certeza, também temos que investigar nessa direção.
Qual é a melhor maneira de comparar posteriormente o conteúdo do cartão SD com o conteúdo do TAR de origem?
Sem saber se é prático no Linux, as coisas que vêm à mente são
- Crie um novo arquivo a partir do cartão SD e compare o MD5 de ambos os arquivos (ou serão naturalmente diferentes?)
- Extraia o TAR de origem em outro lugar, calcule o MD5 de cada arquivo e compare arquivo por arquivo (é prático rastrear todas as pastas/arquivos?)
- De alguma forma, compare diretamente o conteúdo do cartão SD com o conteúdo compactado do arquivo TAR por arquivo?
- Precisamos de algumas validações especiais em relação à estrutura de pastas, permissões de arquivos/pastas e assim por diante?
Não sei quais possibilidades o Linux oferece para esta tarefa, então ficaria grato por quaisquer sugestões, indicações na direção certa e exemplos, se possível.
Responder1
Para verificar se você obteve o mesmo tar
arquivo, você poderia fazer (aqui com GNU tar
):
cd /where/it/was/extracted &&
tar tf /path/to/file.tar |
tar -T - --no-recursion -cf - |
cmp - /path/to/file.tar
Observe que ele compara conteúdo e metadados, incluindo propriedade e horários. Por exemplo, se você não extraiu os arquivos como root
, a propriedade provavelmente será diferente.
Você também deseja usar a mesma implementação tar
que criou o tar
arquivo.
Responder2
Eu compararia as somas de verificação de cada arquivo.
Primeiro é a rootfs
pasta que emite o seguinte comando:
rootfs# find . -type f -print0 | xargs --null sha1sum --binary > ../rootfs.sum
Em seguida, na targetfs
pasta, verifique cada arquivo:
targetfs# sha1sum --check <PATH_TO_SUM_FILE> | grep FAILED