[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Reproducible, precompiled .o files: what say policy+gpl?



On Tue, Oct 19, 2004 at 12:59:42AM +0200, Wesley W. Terpstra wrote:
> To which, I say, wtf!

You're using it wrong.

> ... and yet par2 tells me I need 1909 more (I have 101).
> That means I would need 18* more information in order to recover foo.pdf!
> I have to admit, I am surprised by this. I would have expected a better
> ratio, even with very old techniques.

First off, I'm going to use PAR, since it's much simpler and in many
cases a better choice than par2.  (Par2 allows recovering files which
have internal corruption, which is useful for completing almost-complete
Bittorrented files.)

You need to split files separately for PAR to work as you want.  This
is done just about everywhere on Usenet binary groups these days.  I'm
going to use split(1); people on Usenet, unfortunately, have a habit
of using RAR.

Let's create a 16-meg file:

07:27pm glenn@zewt/11 [~/z] dd if=/dev/urandom of=testing bs=1048576 count=16
16+0 records in
16+0 records out

Split it into parts, not necessarily of even size:

07:29pm glenn@zewt/11 [~/z] split -b 1000000 testing testing.part.
07:29pm glenn@zewt/11 [~/z] ls -l
total 32824
-rw-r--r--  1 glenn users 16777216 Oct 18 19:28 testing
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.aa
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.ab
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.ac
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.ad
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.ae
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.af
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.ag
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.ah
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.ai
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.aj
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.ak
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.al
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.am
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.an
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.ao
-rw-r--r--  1 glenn users  1000000 Oct 18 19:29 testing.part.ap
-rw-r--r--  1 glenn users   777216 Oct 18 19:29 testing.part.aq

and then:

07:31pm glenn@zewt/11 [~/z] parchive a -n 5 testing.par testing.part.*
...
07:32pm glenn@zewt/11 [~/z] ls -l testing.p??
-rw-r--r--  1 glenn users 1001558 Oct 18 19:32 testing.p01
-rw-r--r--  1 glenn users 1001558 Oct 18 19:32 testing.p02
-rw-r--r--  1 glenn users 1001558 Oct 18 19:32 testing.p03
-rw-r--r--  1 glenn users 1001558 Oct 18 19:32 testing.p04
-rw-r--r--  1 glenn users 1001558 Oct 18 19:32 testing.p05
-rw-r--r--  1 glenn users    1558 Oct 18 19:32 testing.par

Now all I need is enough parts:

07:32pm glenn@zewt/11 [~/z] mkdir partial
07:32pm glenn@zewt/11 [~/z] cp testing.part.* partial/
07:33pm glenn@zewt/11 [~/z] rm partial/testing.part.ah
07:33pm glenn@zewt/11 [~/z] du partial
16444   partial
07:33pm glenn@zewt/11 [~/z] cp testing.p02 partial/

and recover:

07:33pm glenn@zewt/11 [~/z/partial] parchive r testing.p02
Checking testing.p02
  testing.part.aa                          - OK
  testing.part.ab                          - OK
  testing.part.ac                          - OK
  testing.part.ad                          - OK
  testing.part.ae                          - OK
  testing.part.af                          - OK
  testing.part.ag                          - OK
  testing.part.ah                          - NOT FOUND
  testing.part.ai                          - OK
  testing.part.aj                          - OK
  testing.part.ak                          - OK
  testing.part.al                          - OK
  testing.part.am                          - OK
  testing.part.an                          - OK
  testing.part.ao                          - OK
  testing.part.ap                          - OK
  testing.part.aq                          - OK

Restoring:
0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
  testing.part.ah                          - RECOVERED

and join:

07:33pm glenn@zewt/11 [~/z/partial] cat testing.part.* > testing
07:34pm glenn@zewt/11 [~/z/partial] diff testing ../testing
07:34pm glenn@zewt/11 [~/z/partial]

Alternatively, I can work exclusively with PAR files (though there's rarely
any reason to do this), by creating enough PARs so their sum is large enough
to recreate the file:

07:35pm glenn@zewt/11 [~/z] parchive a -n 20 testing.par testing.part.*
07:35pm glenn@zewt/11 [~/z] mkdir testing2
07:36pm glenn@zewt/11 [~/z] cp testing.p?? testing2

07:36pm glenn@zewt/11 [~/z/testing2] parchive r testing.p13
07:36pm glenn@zewt/11 [~/z/testing2] cat testing.part.* > testing
07:37pm glenn@zewt/11 [~/z/testing2] diff testing ../testing
07:37pm glenn@zewt/11 [~/z/testing2]

This is exactly what you describe.

-- 
Glenn Maynard



Reply to: