Восстановить огромный и сломанный файл Gzip

У меня есть файл размером 50,9 ГБ, который является резервной копией моей домашней папки в Ubuntu 12.04. Я сжал этот файл с помощью tar на терминале с моего диска sda (ext4) в sdb (ext4). Команда, которую я использовал, была

tar cvfz /media/2ndHDD/home.tar /home/<my_username>

Я получаю эту ошибку после сжатия:

tar: Exiting with failure status due to previous errors,

Я повторил сжатие трижды, но ту же ошибку я получаю, когда сжатие закончено. Поскольку я уже слишком устал от этой попытки с третьей попытки (особенно из-за того, что это заняло у меня целый день), я просто проигнорировал ошибку и надеялся, что она не повлияет, когда я распакую файл.

После этого я установил новую ОС Ubuntu 14.04 на свой накопитель sda. После установки я попытался распаковать файл, сжатый некоторое время назад, используя эту

tar xvf home.tar

но я получаю эту ошибку:

gzip: stdin: invalid compressed data--format violated
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

Поэтому я попытался сжать файл с помощью

gzip home.tar

и ждал почти 1 час, чтобы закончить. И после этого я снова распаковал его, используя на этот раз gzip.

tar -xvzf home.tar.gz

Процесс просто не может завершиться и остановится через 15 минут, в результате чего созданная "домашняя" папка будет неполной из ожидаемых файлов. Я повторял процесс снова и снова, но на самом деле не закончил.

Можно ли как-нибудь восстановить этот огромный сжатый файл? Я уже пробовала gzrecover ( http://fosshelp.blogspot.com/2013/04/howto-recover-corrupted-targz-file.html), но всегда терпит неудачу. Возможно ли, что я уже потерял свои файлы, когда попытался преобразовать их в gzip? Я действительно сожалею, почему я не просто скопировал домашнюю папку без сжатия.:(

ОБНОВЛЕНИЕ: только что я попытался преобразовать его обратно в tar с помощью этой команды

gzip -d home.tar.gz

и распаковал его, запустив

tar xvf home.tar

Теперь я получаю эту ошибку:

gzip: stdin: invalid compressed data--format violated
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now

И даже простое перечисление файлов внутри файла tar не завершит обработку

tar -tvf home.tar

Я все еще получу ту же ошибку выше

ОБНОВЛЕНИЕ (11/11/2015): я пытался бежать strace gunzip home.tar.gz и примерно через 15-20 минут я получил это:

read(3, "\231\300\2678\242p\206\371\341\322\352\312\374\271?\252.\1775sC\330|D$PF$\10r\362V"..., 32768) = 32768
write(4, "\256Y\341\224\362Nn\315\316\373>\31\202\275c\373\266\265\345\27 R\312\2\221b'6\263\321\10F"..., 32768) = 32768
read(3, "[\366\"\r\265\244\3s\201\223b\n\267\364\34\247Ej\210tF\22\255B\254\223\216E\26\242\321\210"..., 32768) = 32768
write(4, "\n1g\201\\m\231\364\352@\"%\207\"Q+\37a^!8\226\233\204\244\v\334&i\361\2a"..., 32768) = 32768
read(3, "\222\327\351\337(\376\376?\246AzC\371\231\200${V\361\310W9.\3571a\362\357\251\306o\234"..., 32768) = 32768
write(4, "\346\216sH\250\272\264T\335\356<?\377\266\272o{\32\21\264\367\34\377w\327\220\324\313\231\2775\337"..., 32768) = 32768
read(3, "\266\276\345\213\277}G\235\355\360\326\232\244\353Z\\\215\222g\354\202\356\351\303G~\210\363b\31\17P"..., 32768) = 32768
write(4, "\326!1\332\213\253\276\327\222<\345\25\210\366\266\337uSkj>\345$\257\225\2q\321^8Jk"..., 32768) = 32768
read(3, "~D\212\373\372\"\373\367m0\322%\365S\377\335\331\336\376RB\037727e'\371#S\224\223"..., 32768) = 26366
read(3, "", 6402)                       = 0
write(4, "\23\320\"\0059\24\20\"\5#M\210I\323\320\363T\220N\321\301\207\\\327(I\204\362\371\377\32!"..., 32768) = 32768
write(4, " \6\325\33\246\324\35\240h\225B\270\312\207\211\340)\314\27\17\"pv\2232?\"0Sez\247"..., 14402) = 14402
close(3)                                = 0
utimensat(4, NULL, {{1420884866, 686801693}, {1420818997, 36136000}}, 0) = 0
fchown32(4, 1000, 1000)                 = 0
fchmod(4, 0666)                         = 0
close(4)                                = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT PIPE TERM XCPU XFSZ], [], 8) = 0
unlink("home.tar.gz")                   = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
_llseek(0, 0, 0xbf8c86a0, SEEK_CUR)     = -1 ESPIPE (Illegal seek)
close(0)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

С выводом выше, возможно ли, что я все еще могу восстановить это? Я просто не знаю с чего начать:(

1 ответ

Сначала вы создали архив gzipped tar с:

tar cvfz /media/2ndHDD/home.tar /home/<my_username>

Вы игнорировали ошибки и не прокручивали вверх, чтобы увидеть, что они были (довольно плохая идея). Затем вы попытались распаковать файл tar (даже без опции -z он должен был распознать, что это архив gzipped tar):

tar xvf home.tar

Это не сработало, и вы сжали уже сжатый (с тем же алгоритмом сжатия) архив. Можете ли вы объяснить мыслительный процесс здесь?

gzip home.tar

Затем вы попытались распаковать сжатый архив, который был снова разархивирован:

tar -xvzf home.tar.gz

Позвольте мне спросить - знаете ли вы, чего вы пытаетесь достичь, или это все просто пробуют случайные команды, "давайте посмотрим, что произойдет", не обращая внимания на то, что они на самом деле делают?

Я настоятельно рекомендую лучше планировать резервное копирование в будущем и обращать внимание на ошибки, которые были там, потому что, возможно, разработчики tar думали, что они достаточно важны (в конце концов, это резервное копирование - как правило, довольно важно), что их следует повторять в конце процесс...

На этот раз я постараюсь сначала узнать, какой у вас настоящий формат вашего архива (или что от него осталось). Использование:

file <archive_file>

Если это действительно архив с архивом gzip и он выдает эти ошибки, боюсь, вам не повезло.

ОБНОВЛЕНИЕ: я прочитал, что текущий файл у вас есть архив gzip:

home.tar: gzip compressed data, from Unix, last modified: Fri Jan  9 22:07:25 2015.

Убедитесь, что у вас есть, в зависимости от типа сжатых данных, я предполагаю, что в 4 раза больше свободного места на разделе, где вы делаете это. Переместите home.tar за пределы каталога / home, если его уже нет в другом месте.

Запустите на нем следующее в качестве последнего средства для распаковки:

gunzip -c home.tar > home1.tar
file home1.tar

Первая команда попытается разархивировать файл home.tar в home1.tar. Другой скажет вам, что такое home1.tar. Это может быть еще один архив GZIP.

Если file говорит, что это сжатые данные, запустите:

gunzip -c home1.tar > home2.tar

Убедитесь, что вы обращаете внимание на имена файлов. Узнайте, что такое home2.tar сейчас:

file home2.tar

Опять же, если это сжатые данные, снова запустите gunzip для него, как описано выше, на этот раз перенаправив на home3.tar. Бежать file на это снова.

Если это говорит:

homeX.tar: POSIX tar archive (GNU)

Попробуйте перечислить его содержимое с помощью:

tar taf homeX.tar

и если это работает, попробуйте распаковать файл tar.

Другие вопросы по тегам