Como extrair rar multipartes com peças ausentes?


12

Eu tenho um .rararquivo multipartes que contém um único .tar.gzarquivo (não pergunte o porquê, foi assim que foi feito). Faltam algumas partes, mas tenho a primeira. Eu gostaria de extrair o .tar.gzmáximo possível. Como eu posso fazer isso?

Se eu rodar unrar x -kb file.part1.rar, sempre extrai o início do .tar.gzfrom part1e para com um erro. Fico feliz em experimentar qualquer ferramenta (não precisa ser unrar).


1
Obviamente, você precisa a coisa toda, a sua não vai ao trabalho de outra forma
Sickest

1
Bem, ele diz que quer "o máximo possível". No entanto, é altamente provável que o que ele extrai não seja utilizável, a menos que seja um formato de arquivo simples (bitmap?).
WindowsEscapist

Se houver outro arquivo dentro do qual contenha muitos arquivos, ele poderá recuperar alguns dos arquivos. O truque é apenas fazer o WinRar extrair o máximo possível.
Davidbaumann

2
Não entendo por que as pessoas rejeitam perguntas, apenas porque elas não entendem.
Davidbaumann

Então, você encontrou uma solução e compartilhou conosco?
davidbaumann

Respostas:


2

Eu tinha uma coisa semelhante no Windows , quando eu tinha partes 1,5,6,9,10 de 10. Eu estava faltando partes 2,3,4,7,8.

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

  2. gere um arquivo nulo (zero) para preencher as partes ausentes, usando o tamanho exato em bytes de cada uma das partes que você possui e extraiu (ou seja, tamanho de pt1 que é igual ao tamanho de pt5 e pt6 ...):

    arquivo fsutil createnew [path_to_file] [size_in_bytes]

    no meu caso eu usei:

    arquivo de fsutil cria novo C: \ TMP \ vazio 1022701562

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

    copiar / b arquivo1 + arquivo2 + arquivo3 arquivo de destino

    No meu caso:

    copiar / b pt1 + vazio + vazio + vazio + pt5 + pt6 + vazio + vazio + pt9 + pt10 output_file

quando isso foi feito, carreguei o arquivo no cliente bittorrent do Deluge e verifiquei novamente, e estava faltando apenas a porcentagem que realmente não tinha, o que significa que o cliente bittorrent identificou que tenho as informações verdadeiras entre todos os zeros que eu adicionado.


Não entendo muito bem as instruções. Como você 'extrai as partes que possui' do 7zip? 7z %filetenta carregar todos os arquivos de peça e retorna um erro se um deles já estiver ausente. O que a coisa toda tem a ver com torrents? Posso extrair os arquivos compactados originais individuais do binário concatenado usando o Deluge?
Cduguet 9/05/19

5

Provavelmente isso não é mais relevante, mas acabei de ter o mesmo problema e encontrei uma solução simples que funcionou para mim e achei que seria bom compartilhar.

Eu tinha um arquivo RAR protegido por senha em 6 partes, mas part4 estava ausente. Tentei usar a função "reparo" do WinRAR, mas ele disse que não conseguia encontrar o registro de recuperação. Eu tentei os métodos acima, mas eles não funcionaram e a extração sempre parava onde a parte ausente começava.

Por fim, decidi enganar o WinRAR para pensar nas partes 5 e 6 em um arquivo diferente e renomeei-o como "archive.part1.rar" e "archive.part2.rar". Em seguida, disse ao WinRAR para extrair a nova parte 1 e, apesar de receber uma mensagem de erro dizendo que não foi possível extrair o arquivo que terminou no início da nova parte 1 (pois estavam faltando alguns dados da parte 4), conseguiu extrair todos os outros arquivos das partes originais 5 e 6.

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


1

Presumo 100Mb partes, parte 3 em falta. Podes tentar

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

Também eu 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

Boas idéias, tentei. 1. Se todas as peças existentes forem concatenadas, o unrar falhará (erro CRC) exatamente no mesmo local. 2. Se eu apenas copiar uma parte posterior para ter o mesmo nome da peça ausente, ela falhará no mesmo local, mas depois imprimirá mensagens que implicam que está processando as partes posteriores (talvez procurando o início de outro arquivo) 3. Se eu criar um arquivo com todos os zeros com dd, ele falhará com "Arquivo morto"
Alex I

E, se eu criar um tudo ficheiro zeros e concatenar, ele falha ao mesmo lugar com "Não é possível localizar o volume"
Alex I

Pensamento apenas: cat blubb.rar | unrar > file.tgz.
Davidbaumann

Talvez você queira usar o WinRar para Windows
davidbaumann

1

Etapa 1: renomeie os arquivos, por exemplo:

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

Etapa 2: use o 7-Zip para extrair cada arquivo.

Lucro!

(Em algumas circunstâncias, renomear é desnecessário e você pode deixar o 7-Zip extrair todos os arquivos para você.)


3
Isso não vai ajudar com arquivos que abrangem mais de um arquivo de peça.
Rohit Gupta

Você tentou extrair cada arquivo renomeado um por um usando o 7-Zip?
18718 Cychoi #

1

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


0

O 7-zip extrairá a parte de um arquivo de um rar de várias partes e você poderá costurá-las novamente com o dd. Por exemplo, se você possui a primeira e a última parte 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. ddpode apenas seekpara múltiplos do tamanho do bloco de saída. ddrealmente faz reade writechama o sistema com esse tamanho de bloco, então bs=1é realmente péssimo.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.