Como extrair multipart rar com partes faltantes?

8

Eu tenho um arquivo multipart .rar contendo um único arquivo .tar.gz dentro dele (não pergunte por que, é assim que foi feito). Estou sentindo falta de algumas partes, mas tenho a primeira parte. Eu gostaria de extrair o máximo de .tar.gz possível. Como posso fazer isso?

Se eu executar unrar x -kb file.part1.rar , ele sempre extrai o início do .tar.gz de part1 e pára com um erro. Estou feliz em experimentar qualquer ferramenta (não precisa ser unrar).

    
por Alex I 30.01.2014 / 23:51

6 respostas

2

Eu tive uma coisa semelhante em windows , quando eu tinha partes 1,5,6,9,10 em 10. Eu estava faltando partes 2,3,4,7,8.

  1. use o 7zip para extrair as partes que você tem e renomeie-as de acordo. ou seja, pt1 pt5 pt6, etc.

  2. gera um arquivo nulo (zero) para preencher as partes que faltam, usando o tamanho exato em bytes de cada uma das partes que você tem e extrai (ou seja, tamanho de pt1 que é o mesmo que o tamanho de pt5 e pt6 ... ):

    fsutil file createnew [path_to_file] [size_in_bytes]

    no meu caso eu usei:

    fsutil file createnew C:\TMP\empty 1022701562

  3. concatena os arquivos (usando o / b para arquivos binários)

    copy /b file1+file2+file3 targetfile

    no meu caso:

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

quando foi feito, eu carreguei o arquivo no Deluge bittorrent client, e forcei novamente, e só estava perdendo a porcentagem que eu realmente não tinha, significando que o cliente bittorrent identificou que eu tenho as informações verdadeiras entre todos os zeros que adicionei.

    
por 19.08.2017 / 14:02
4

Isso provavelmente não é mais relevante, mas eu acabei de ter o mesmo problema e encontrei uma solução simples que funcionou para mim e que seria interessante compartilhá-la.

Eu tinha um arquivo RAR protegido por senha em 6 partes, mas faltava parte4. Eu tentei usar a função "repair" do WinRAR, mas ela disse que não conseguiu encontrar o registro de recuperação. Eu tentei os métodos acima, mas eles não funcionaram e a extração sempre parou onde a peça que faltava começou.

Finalmente, decidi enganar o WinRAR para pensar nas partes 5 e 6, onde um arquivo diferente e renomeá-los como "archive.part1.rar" e "archive.part2.rar". Eu então disse ao WinRAR para extrair a nova parte 1 e mesmo assim eu recebi uma mensagem de erro dizendo que não poderia extrair o arquivo que terminava no começo da nova parte 1 (já que faltavam alguns dados da parte faltante 4), ele conseguiu extrair todos os outros arquivos das partes originais 5 e 6.

Espero que isso ajude outras pessoas com o mesmo problema no futuro.

    
por 12.11.2014 / 19:08
1

Eu considero 100Mb partes, parte 3 ausente. Você pode tentar

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

Eu também tentaria, o que poderia funcionar melhor e fazer o WinRar pensar, o arquivo está corrompido:

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
    
por 31.01.2014 / 00:33
1

Etapa 1: renomeie os arquivos, por exemplo:

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

Passo 2: Use o 7-Zip para extrair cada arquivo.

Lucro!

(Em algumas circunstâncias, a renomeação é desnecessária e você pode deixar o 7-Zip extrair todos os arquivos para você.)

    
por 20.05.2015 / 20:23
1

Eu tinha apenas a segunda parte do arquivo rar de duas partes, enquanto descompactava a parte 2 como esperado winrar apareceu uma mensagem dizendo que a primeira parte estava faltando; Também notei que o conteúdo completo da parte dois fora descompactado na pasta; assim, sem tocar na mensagem pop-up do winrar, copiei os arquivos descompactados para outra pasta e, em seguida, cliquei em fechar na mensagem pop-up do winrar; o conteúdo descompactado foi excluído pelo winrar, mas desde que eu os copiei anteriormente em uma pasta diferente, eu poderia usar o conteúdo descompactado daquela pasta diferente.

    
por 18.10.2015 / 07:00
0

O 7-zip extrairá a parte de um arquivo de um rar de várias partes, e você poderá juntá-los novamente com o dd. Por exemplo, se você tiver a primeira e a última partes 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))

Se o deslocamento que você precisa procurar não for primo, use um tamanho de bloco maior que um. dd pode apenas seek para múltiplos do tamanho do bloco de saída. dd realmente faz read e write chamadas do sistema com esse tamanho de bloco, então bs=1 realmente é uma droga.

Um grande ibs (tamanho do bloco de entrada) economizaria metade do tempo da CPU, pois seek está em unidades de obs (tamanho do bloco de saída). Ou talvez haja alguma outra ferramenta que possa procurar uma posição de byte arbitrária e fazer E / Ss de tamanho normal. Ou, se você estivesse criando scripts, você poderia dd com bs=1 até 32k alinhados, então talvez tail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))

    
por 17.12.2015 / 23:23