[comp.sys.apollo] tar to an Ultrix VAX

mkhaw@teknowledge-vaxc.ARPA (Michael Khaw) (08/12/87)

I try to do the following from a DN3000 running SR 9.2.5, Domain/IX 9.2,
and TCP 9.2(?):

	tar cBf - src_dir | rsh vax 'cd dest_dir; tar xBf -'

I get a checksum error from the remote tar.  I've also tried substituting
various combinations of explicit blocking factors in place of the "B" option
to no avail.  Not that I expect it to make any difference, but the DN3000
is going through a gateway DN560 to the ethernet to an Ultrix 1.2 VAX.

This kind of pipe works with real Unix boxes of both SysV and 4bsd
persuasions.  Why doesn't it work under Domain/IX?  (No cutesy replies
about Apollos not being real Unix boxes, please -- I'm already convinced
of that).

Mike Khaw
-- 
internet:  mkhaw@teknowledge-vaxc.arpa
usenet:	   {hplabs|sun|ucbvax|decwrl|sri-unix}!mkhaw%teknowledge-vaxc.arpa
USnail:	   Teknowledge Inc, 1850 Embarcadero Rd, POB 10119, Palo Alto, CA 94303

tonyd@apollo.uucp (Tony Drogaris) (08/13/87)

In article <15554@teknowledge-vaxc.ARPA> mkhaw@teknowledge-vaxc.ARPA (Michael Khaw) writes:
>I try to do the following from a DN3000 running SR 9.2.5, Domain/IX 9.2,
>and TCP 9.2(?):
>
>	tar cBf - src_dir | rsh vax 'cd dest_dir; tar xBf -'
>
>I get a checksum error from the remote tar.

This will happen (at least occasionally) with any pair of machines.  The frequency of occurence
depends upon the relative speeds of the machines and the network connection.  The problem is that
the network connection is not guaranteed to pass any particular blocksize atomically and tar
expects to read entire blocks in one read.  ie., the read call in tar looks like:

                if (read(f, buf, blksize) != blksize) {
                        /* barf with checksum error */
                }

The network socket will return whatever data it has.  If it's less than blksize bytes, too bad.

The solution is to use dd to feed tar whatever size blocks it wants:

        tar cBf - src_dir | rsh vax 'cd dest_dir; dd | tar xf -'

(If you want, you can block between dd and tar by using dd's obs=xxx option.)



-- 
Tony Drogaris           UUCP:      ...{attunix,uw-beaver,decvax!wanginst}!apollo!tonyd
Apollo Computer         ARPA:     apollo!tonyd@eddie.mit.edu
                        INTERNET: tonyd@apollo.com