Bagaimana memulihkan file "tar.gz" yang rusak

11

Saya tiba-tiba perlu memulihkan tar.gzfile lama , tetapi segera setelah saya melakukannya:

tar -zxvf filename.tar.gz

Saya mendapatkan ini:

gzip: stdin: invalid compressed data--format violated  
tar: Child returned status 1  
tar: Error is not recoverable: exiting now
arrrrgv
sumber
8
Apakah itu benar-benar tarball yang di-gzip? Coba fileperintah di atasnya dulu.
alex
1
Ya, sudah terjadi pada saya lebih dari sekali bahwa saya mendapatkan .tar.gzyang benar-benar .tar, dan sekali bahkan PDF.
vonbrand

Jawaban:

12

Yang harus Anda coba adalah sebagai berikut:

  1. Gunakan fileperintah pada arsip untuk melihat apakah itu dikenali sebagai gzip-ped data.
  2. Jalankan strace gunzippada file. Ini akan mencetak byte terakhir yang dibaca dari file yang mungkin membantu Anda mengidentifikasi titik di file di mana korupsi terjadi.
  3. Jalankan build debug di gunzipbawah gdb. Cobalah untuk memperbaiki bagian yang rusak (Anda harus sangat beruntung untuk dapat melakukan itu) dan lihat apakah itu dapat berlanjut hingga akhir file.

Bergantung pada sifat korupsi, Anda mungkin atau mungkin tidak dapat memulihkan data Anda.

alex
sumber
gunzip filename.tar.gzbekerja untukku.
Ravi Dhoriya ツ
2

Pemulihan penuh tidak dimungkinkan. Format seperti .zip memberikan opsi perlindungan dan pemulihan yang lebih baik, tetapi juga tidak lengkap.

.tar.gz menggabungkan semua file dan menerapkan kompresi. .zip memulai kembali kompresi untuk setiap file. Oleh karena itu dalam file .zip kerusakan yang dilakukan pada blok terkompresi hanya memengaruhi file yang dimiliki blok ini. Di .tar.gz, kerusakan akan memengaruhi semua file berikutnya hingga kompresi dimulai kembali.

techtonik anatoly
sumber
yang saya pikirkan, penjelasan yang bagus terima kasih! Saya bertanya-tanya apakah ada format lain sebaik zip (tetapi dengan kompresi yang lebih baik), tetapi zip selalu dikenali di mana-mana dan mungkin merupakan opsi terbaik untuk pemulihan.
Aquarius Power
1

Jalankan zcat bad.tar.gz > some.tar, dan ekstrak itu. Melewati bagian file yang rusak akan menjadi rumit. Halaman manual memberikan pointer ke format, tetapi saya akan mencari opsi lain di Google.

Apakah Anda yakin ini dikompres dengan gzip? Mungkin mengeluh karena tidak mengerti format ...

vonbrand
sumber
1

Semua respies hanya berlaku untuk mengekstraksi info dari awal file ke titik di mana kesalahan terjadi, atau di mana file terpotong.

Sayangnya tidak ada satu pun penerima yang menjelaskan cara memulihkan file / stream setelah area korupsi. Adakah yang menerima?

Znik
sumber
-1

gunakan yang ini: https://github.com/arenn/gzrt

gzrecover foo.tar.gz
cpio -F foo.tar.recovered -i -v
W4U
sumber
Perintah Anda menghasilkan cpio: illegal option -- Fpesan kesalahan.
schily
1
cpio --help memberi Anda opsi: -F, --file = [[USER @] PEMBAWA ACARA:] FILE-NAME Gunakan FILE-NAME ini sebagai ganti input atau output standar. PENGGUNA dan HOST opsional menentukan nama pengguna dan host dalam hal arsip jarak jauh
W4U
Anda tidak berbicara tentang kemungkinan cpio, tetapi tentang kloning dengan opsi khusus vendor, lihat mis. Schillix.sourceforge.net/man/man1/cpio.1.html Namun, jika Anda berbicara tentang klon alih-alih yang asli, Anda harus menyebutkan klon mana yang Anda sedang menggunakan.
schily
1
@ schilly, saya berbicara tentang cpiotermasuk dalam debian. GNU cpio: tautan
W4U