Come estrarre rar multipart con parti mancanti?


12

Ho un .rararchivio multipart contenente un singolo .tar.gzfile al suo interno (non chiedere perché, è così che è stato creato). Mi mancano alcune parti, ma ho la prima parte. Vorrei estrarre il .tar.gzpiù possibile. Come lo posso fare?

Se unrar x -kb file.part1.rarlo eseguo estrae sempre l'inizio del .tar.gzda part1e si ferma lì con un errore. Sono felice di provare qualsiasi strumento (non deve essere unrar).


1
ovviamente, hai bisogno di tutto, non funzionerà altrimenti
Sickest

1
Bene, dice che vuole "il più possibile". Tuttavia, è molto probabile che tutto ciò che estrae non sarà utilizzabile, a meno che non sia un semplice formato di file (bitmap?).
Windows Escapist

Se c'è un altro archivio all'interno che contiene molti file, potrebbe essere in grado di recuperare alcuni dei file. Il trucco è solo per estrarre WinRar il più possibile.
davidbaumann,

2
Non capisco perché le persone votino le domande, solo perché non capiscono.
davidbaumann,

Quindi hai trovato una soluzione e hai condiviso con noi?
davidbaumann,

Risposte:


2

Avevo qualcosa di simile su Windows , quando avevo parti 1,5,6,9,10 su 10. Mi mancavano parti 2,3,4,7,8.

  1. usa 7zip per estrarre le parti che hai e rinominale di conseguenza. cioè: pt1 pt5 pt6, ecc.

  2. genera un file null (zero) per riempire le parti mancanti, usando la dimensione esatta in byte di ciascuna delle parti che hai ed estratto (cioè dimensione di pt1 che è la stessa dimensione di pt5 e pt6 ...):

    fsutil file createnew [path_to_file] [size_in_bytes]

    nel mio caso ho usato:

    file fsutil createnew C: \ TMP \ empty 1022701562

  3. concatenare i file (usando / b per i file binari)

    copia / b file1 + file2 + file3 targetfile

    nel mio caso:

    copia / b pt1 + vuoto + vuoto + vuoto + pt5 + pt6 + vuoto + vuoto + pt9 + pt10 output_file

quando è stato fatto, ho caricato il file nel client bittorrent di Diluvio, e ho forzato il controllo, e mi mancava solo la percentuale che non avevo davvero, il che significa che il client bittorrent ha identificato che ho le informazioni vere tra tutti gli zeri che ho aggiunto.


Non capisco molto bene le istruzioni. Come "estraete le parti che avete" da 7zip? 7z %filetenta di caricare tutti i file di parti e restituisce un errore se uno di questi è già mancante. Cosa c'entra tutto con i torrent? Posso estrarre i singoli file compressi originali dal file binario concatenato usando Deluge?
cduguet,

5

Questo probabilmente non è più rilevante, ma ho appena avuto lo stesso problema e ho trovato una soluzione semplice che ha funzionato per me e ho pensato che sarebbe stato bello condividerlo.

Avevo un archivio RAR protetto da password in 6 parti, ma mancava la parte 4. Ho provato ad usare la funzione "riparazione" di WinRAR ma mi ha detto che non è stato possibile trovare il record di recupero. Ho provato i metodi sopra ma non hanno funzionato e l'estrazione si è sempre fermata da dove è iniziata la parte mancante.

Alla fine, ho deciso di ingannare WinRAR nel pensare alle parti 5 e 6 in cui un archivio diverso e ribattezzarle come "archive.part1.rar" e "archive.part2.rar". Ho quindi detto a WinRAR di estrarre la nuova parte 1 e anche se ho ricevuto un messaggio di errore che diceva che non poteva estrarre il file terminato all'inizio della nuova parte 1 (poiché mancavano alcuni dati dalla parte 4 mancante), è riuscito a estrarre tutti gli altri file dalle parti originali 5 e 6.

Spero che questo possa aiutare altre persone con lo stesso problema in futuro.


1

Presumo parti da 100 Mb, parte 3 mancante. Puoi provare

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

anche io proverei, che potrebbe funzionare meglio e far pensare WinRar, il file è corrotto:

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

Buone idee, provate. 1. Se tutte le parti esistenti sono concatenate, l'ordinamento non riesce (errore CRC) nello stesso identico posto. 2. Se copio solo una parte successiva con lo stesso nome della parte mancante, non riesce nello stesso posto, ma poi stampa i messaggi che implicano che sta elaborando le parti successive (magari cercando l'inizio di un altro file) 3. Se creo un file all-zeros con dd, non funziona con "Bad archive"
Alex I

E, se creo un file all zeros e concateno, non riesce nello stesso posto con "Impossibile trovare il volume"
Alex I

Basta pensare: cat blubb.rar | unrar > file.tgz.
davidbaumann,

Forse vuoi usare WinRar per Windows
davidbaumann

1

Passaggio 1: rinominare i file, ad esempio:

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

Passaggio 2: utilizzare 7-Zip per estrarre ciascun file.

Profitto!

(In alcune circostanze, la ridenominazione non è necessaria e puoi consentire a 7-Zip di estrarre tutti i file per te.)


3
Questo non aiuta con i file che si estendono su più di un file di parti.
Rohit Gupta,

Hai provato a estrarre ogni file rinominato uno per uno usando 7-Zip?
cychoi,

1

Avevo solo la seconda parte dell'archivio rar di due parti, mentre disimballavo la parte 2, come previsto, Winrar ha fatto apparire un messaggio dicendo che mancava la prima parte; Ho anche notato che l'intero contenuto della seconda parte era stato decompresso nella cartella; quindi, senza toccare il messaggio popup di Winrar, ho copiato i file decompressi in un'altra cartella e quindi ho fatto clic su Chiudi nel messaggio popup di Winrar; i contenuti decompressi sono stati eliminati da winrar, ma poiché li avevo copiati in precedenza in una cartella diversa, ho potuto utilizzare il contenuto decompresso da quella cartella diversa.


0

7-zip estrae la parte di un file da una rar multiparte, quindi puoi ricucirli insieme a dd. Ad esempio, se hai la prima e l'ultima rar-parti:

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 l'offset che devi cercare non è primo, usa una dimensione del blocco maggiore di una. ddpuò solo seekper multipli della dimensione del blocco di output. ddfa davvero reade writechiama il sistema con quella dimensione di blocco, quindi fa bs=1davvero schifo.

Una grande ibs(dimensione del blocco di input) risparmierebbe la metà del tempo della CPU, poiché seekè in unità di obs(dimensione del blocco di output). O forse c'è qualche altro strumento che può cercare una posizione di byte arbitraria e quindi eseguire I / O di dimensioni normali. O se lo stessimo copiando, potresti dd con un bs=1massimo di 32k allineati, quindi forsetail -c +$misalignment lastpart/file | dd ... of=p1/file conv=notrunc bs=32k seek=$(( (full_size - lastpart_size + misalignment) / (32 * 1024) ))

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.