Как извлечь multipart rar с отсутствующими частями?


12

У меня есть многокомпонентный .rarархив, содержащий один .tar.gzфайл внутри него (не спрашивайте почему, именно так оно и было сделано). Мне не хватает нескольких частей, но есть первая часть. Я хотел бы извлечь как можно больше из этого .tar.gz. Как я могу это сделать?

Если я запускаю unrar x -kb file.part1.rarего всегда извлекает начало .tar.gzиз part1и останавливается там с ошибкой. Я счастлив попробовать любые инструменты (не должен быть unrar).


1
очевидно, вам нужно все это, иначе не получится
Sickest

1
Ну, он говорит, что хочет "как можно больше". Тем не менее, весьма вероятно, что все, что он извлекает, не будет пригодно для использования, если только это не простой формат файла (растровое изображение?).
WindowsEscapist

Если внутри есть другой архив, который содержит много файлов, он может восстановить некоторые файлы. Хитрость заключается в том, чтобы просто извлечь WinRar как можно больше.
Давидбауман

2
Я не понимаю, почему люди отказываются от вопросов, просто потому, что они не понимают.
Давидбауман

Итак, вы нашли решение и поделились с нами?
Давидбауман

Ответы:


2

У меня была похожая вещь на окнах , когда у меня были части 1,5,6,9,10 из 10. Мне не хватало частей 2,3,4,7,8.

  1. используйте 7zip для извлечения частей, которые у вас есть, и соответственно переименуйте их. то есть: pt1, pt5, pt6 и т. д.

  2. сгенерируйте нулевой (нулевой) файл, чтобы заполнить недостающие части, используя точный размер в байтах каждой из частей, которые вы ДЕЛАЕТЕ и извлекли (т.е. размер pt1, который равен размеру pt5 и pt6 ...):

    fsutil файл createnew [path_to_file] [size_in_bytes]

    в моем случае я использовал:

    fsutil файл createnew C: \ TMP \ empty 1022701562

  3. объединить файлы (используя / b для двоичных файлов)

    скопировать / b file1 + file2 + file3 targetfile

    в моем случае:

    copy / b pt1 + empty + empty + empty + pt5 + pt6 + empty + empty + pt9 + pt10 output_file

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


Я не очень хорошо понимаю инструкции. Как «извлечь нужные детали» из 7zip? 7z %fileпытается загрузить все файлы деталей и возвращает ошибку, если один из них уже отсутствует. Какое отношение все это имеет к торрентам? Могу ли я извлечь отдельные оригинальные сжатые файлы из сцепленного двоичного файла с помощью Deluge?
cduguet

5

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

У меня был защищенный паролем архив RAR в 6 частях, но часть 4 отсутствовала. Я пытался использовать функцию восстановления WinRAR, но он сказал, что не может найти запись восстановления. Я попробовал описанные выше методы, но они не работали, и извлечение всегда останавливалось там, где начиналась недостающая часть.

Наконец, я решил обмануть WinRAR в части мышления 5 и 6, где был другой архив, и переименовал их в «archive.part1.rar» и «archive.part2.rar». Затем я сказал WinRAR извлечь новую часть 1, и хотя я получил сообщение об ошибке, в котором говорилось, что он не может извлечь файл, который закончился в начале новой части 1 (так как в нем отсутствовали некоторые данные из отсутствующей части 4), ему удалось извлечь все остальные файлы из оригинальных частей 5 и 6.

Я надеюсь, что это поможет другим людям с той же проблемой в будущем.


1

Я предполагаю, что 100Mb частей, часть 3 отсутствует. Можешь попробовать

cat blubb.part01.rar blubb.part02.rar blubb.part04.rar > blubb.rar

также я бы попробовал, что могло бы работать лучше и заставить WinRar думать, что файл поврежден:

dd if=/dev/zero of=blubb.part03.rar bs=1M count=100
cat blubb.part01.rar blubb.part02.rar blubb.part03.rar blubb.part04.rar > blubb.rar

Хорошие идеи, опробовали их. 1. Если все существующие части объединены, происходит сбой unrar (ошибка CRC) в том же месте. 2. Если я просто скопирую более позднюю часть, чтобы иметь то же имя, что и у отсутствующей части, она не будет выполнена в том же месте, но затем напечатает сообщения, которые подразумевают, что она обрабатывает более поздние части (возможно, ищет начало другого файла) 3. Если я создаю файл с нулями с помощью dd, он завершается неудачно с «Плохой архив»
Alex I

И, если я создаю файл со всеми нулями и объединяю, он завершается с ошибкой в ​​одном месте с «Не удается найти том»
Alex I

Просто мышление: cat blubb.rar | unrar > file.tgz.
Давидбауман

Может быть, вы хотите использовать WinRar для Windows
davidbaumann

1

Шаг 1: переименуйте файлы, например:

file.part1.rar -> fileA.rar
file.part2.rar -> fileB.rar
file.part3.rar -> fileC.rar
etc..

Шаг 2: Используйте 7-Zip для извлечения каждого файла.

Прибыль!

(В некоторых случаях переименование не требуется, и вы можете позволить 7-Zip извлечь все файлы для вас.)


3
Это не поможет с файлами, которые охватывают более одного файла детали.
Рохит Гупта

Вы пытались извлечь каждый переименованный файл один за другим, используя 7-Zip?
cychoi

1

У меня была только вторая часть из двух частей rar архива, при распаковке части 2, как и ожидалось, winrar высветил сообщение о том, что первая часть отсутствует; Я также заметил, что все содержимое второй части было распаковано в папке; поэтому, не касаясь всплывающего сообщения winrar, я скопировал распакованные файлы в другую папку, а затем нажал кнопку «Закрыть» во всплывающем сообщении winrar; распакованное содержимое было удалено winrar, но поскольку я ранее скопировал их в другую папку, я мог использовать распакованное содержимое из этой другой папки.


0

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

7z x p1.rar
mv dir p1  # rename out of the way
7z x plast.rar
unrar l p1.rar
   # note the file size of the entire file
ls -l dir/file  # note the size of the last part
dd if=dir/file of=p1/file  conv=notrunc  bs=1 seek=$((full_size - lastpart_size))

Если смещение, к которому нужно стремиться, не является простым, используйте размер блока больше единицы. ddможно только seekумножить на размер выходного блока. ddдействительно делают readи writeсистемные вызовы с этим размером блока, так что на bs=1самом деле отстой.

Большой ibs(размер входного блока) сэкономит половину процессорного времени, так как seekвыражается в единицах obs(размер выходного блока). Или, может быть, есть какой-то другой инструмент, который может искать произвольную позицию байта, а затем выполнять операции ввода-вывода нормального размера. Или, если вы пишете это, вы можете использовать dd с bs=1выравниванием до 32 Кб, тогда, возможно,tail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.