bug-coreutils
[Top][All Lists]
Advanced

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

Re: make 'dd conv=sync' pad last block


From: Scott Weikart
Subject: Re: make 'dd conv=sync' pad last block
Date: Sun, 6 Jun 2004 13:04:53 -0700

On Sunday 06 June 2004 12:14 pm, Paul Eggert wrote:
> Scott Weikart <address@hidden> writes:
> >   tar cfb - 2 $files | dd of=/dev/nst0 obs=128k conv=sync
> >
> > But GNU dd in coreutils-5.2.1 doesn't pad the final output block.
>
> conv=sync is supposed to pad input blocks (ibs=), not output blocks
> (obs=).

The Solaris 9 man page for 'dd' shows it padding output blocks:

  Example 4: Using conv=sync to Write to Tape

  The following example uses conv=sync when writing to a tape:

  example% tar cvf - . | compress | dd obs=1024k of=/dev/rmt/0 conv=sync

with an example almost identical to the problem I'm trying to solve.

> You might try "dd ibs=128k obs=128k conv=sync".

That technically works, but the results are not desirable.

It reads a variable number of 2b block from tar, pads the input
buffer to 128KB, then writes it out.  So, the space-efficiency is
partially lost; the output is about 30 times larger than the
output with my patch (when I tar a directory with a hundred files
adding up to a couple MB).

Also, when you extract the tar from your example, you have to use
--ignore-zeros, else you'll lose files.  And you get the warning
"tar: Skipping to next header" for each section of padding.

-scott




reply via email to

[Prev in Thread] Current Thread [Next in Thread]