tar archives και corruption

George Notaras gnot at g-loaded.eu
Thu Nov 29 17:58:09 EET 2007


On Thu, 2007-11-29 at 17:41 +0200, Giorgos Keramidas wrote:
> On 2007-11-29 17:10, George Notaras <gnot at g-loaded.eu> wrote:
> > Εάν ένα uncompressed tar αρχείο "χαλάσει" σε κάποιο σημείο, είναι δυνατό
> > το extraction αρχείων που δεν επηρεάζονται από την corrupted περιοχή?
> 
> Μπορείς πάντα να χρησιμοποιήσεις το cpio(1), το οποίο υποστηρίζει
> per-file checksums.
> 
> Για παράδειγμα, έφτιαξα ένα ~/crew directory με το source από το
> ``mercurial-crew'' branch, και το συμπίεσα με το cpio(1) σε BSD και
> Solaris:
> 
>     cd ~/crew
>     find . | cpio -o -H crc > /var/tmp/mercurial.cpio
> 
> Ύστερα με το hexl-mode του Emacs (ή ένα οποιοδήποτε άλλο hex editor)
> άλλαξα ένα byte στο αρχείο, και το έκανα extract:
> 
>     $ cpio -i -H crc < /var/tmp/mercurial-broken.cpio
>     cpio: "contrib/churn.py" - checksum error
>     4768 blocks
>     1 error(s)
>     $ echo $?
>     1
>     $
> 
> Η διαφορά είναι όντως το ένα byte που άλλαξα...
> 
>     $ gdiff -ruN crew crew-test
>     diff -ruN crew/contrib/churn.py crew-test/contrib/churn.py
>     --- crew/contrib/churn.py       2007-11-29 17:40:27.207508000 +0200
>     +++ crew-test/contrib/churn.py  2007-11-29 17:40:36.591104000 +0200
>     @@ -174,7 +174,7 @@
>          revs.sort()
>          stats = gather_stats(ui, repo, amap, revs, opts.get('progress'))
> 
>     -    # make a list of tuples (name, lines) and sort it in descending order
>     +    # make a list of tuples (name, lines) and sort it in descending or er
>          ordered = stats.items()
>          ordered.sort(lambda x, y: cmp(y[1], x[1]))
> 
>     $
> 

Το per-file checksums φαίνεται πολύ καλό χαρακτηριστικό για backup (ίσως
γι αυτό το cpio να χρησιμοποιείται στο rpm).

θεωρούσα το cpio (για κάποιον *ανεξήγητο* λόγο) 2ης κλάσης. Πρέπει να
διαβάσω τη man page γιατί δεν το έχω ξαναχρησιμοποιήσει. Δεν θα ήθελα
πάντως να γίνεται ξανά συμπίεση, επειδή σχεδόν όλα τα αρχεία είναι ήδη
συμπιεσμένα.

ΥΓ: Ήθελα να κάνω κι εγώ ένα τεστ με το tar, οπότε ευχαριστώ διπλά για
το όλο παράδειγμα. :)





More information about the Linux-greek-users mailing list