Назад | Перейти на главную страницу

Как я могу извлечь из этого tar-файла, если мой файл может быть поврежден?

При попытке извлечь все файлы из tar-файла появляется следующее сообщение об ошибке:

tar: Skipping to next header
tar: Error exit delayed from previous errors

Некоторые файлы извлекаются правильно до того, как это сообщение об ошибке будет напечатано, и в результате получается искаженный файл, который, кажется, содержит остальную часть архива. Все файлы в этом архиве - текстовые.

Могу ли я попытаться восстановить остальные файлы?

Вы можете попробовать свой экстракт с параметром -i, чтобы игнорировать нули:

The --ignore-zeros (-i) option causes tar to ignore blocks of zeros in
the archive. Normally a block of zeros indicates the end of the archive,
but when reading a damaged archive, or one which was created by cat-ing
several archives together, this option allows tar to read the entire
archive. This option is not on by default because many versions of tar
write garbage after the zeroed blocks.

Вы можете попробовать другие версии tar: gnu tar, star, bsdtar и т. Д. Одна из них может лучше обрабатывать ошибки.

Вы говорите, что все ваши файлы являются текстовыми, поэтому у вас должна быть возможность вручную редактировать файл, выбирать каждый файл и копировать / вставлять его в новый файл. Ищите разделитель tar между каждым файлом, он выглядит как блок ASCII NULL со встроенными в него метаданными файла (имя, разрешения, временные метки и т. Д.).

Это некрасиво, но сработает в крайнем случае:

Установите «photorec», который может быть включен в пакет «testdisk» в вашем дистрибутиве (оба можно найти Вот).

Тип "photorec <foo.tar>" и следуйте подсказкам (выберите «Нет - носитель без разделов» и «Другое» для параметра файловой системы). Он должен иметь возможность восстановить многие файлы, хотя вам придется идентифицировать и переименовывать их все вручную. По крайней мере, это лучше, чем потерять все. (Для справки, я зарезервировал свой каталог / etc и попробовал это. Даже с неповрежденным tar-файлом он получил только 225 из 337 файлов, и даже некоторые из них были сильно искажены.)

Еще более грубым подходом было бы запустить "strings foo.tar > out.txt" для восстановления текстовых данных из файла, которые затем нужно будет отсортировать и вручную поместить обратно в отдельные файлы.

Кстати ... Google на тему "восстановить поврежденный файл tar" дал несколько инструментов, специфичных для вашей проблемы.