On Sat, Jun 16, 2012 at 1:34 PM, Mike Meyer <m...@mired.org> wrote:
> On Sat, 16 Jun 2012 21:04:26 +0100
> Chris Rees <utis...@gmail.com> wrote:
>
>> On Jun 16, 2012 8:37 PM, "Xin LI" <delp...@gmail.com> wrote:
>> >
>> > On Sat, Jun 16, 2012 at 12:01 PM, Chris Rees <utis...@gmail.com> wrote:
>> > > On Jun 14, 2012 5:49 AM, "Wojciech Puchar" <
>> woj...@wojtek.tensor.gdynia.pl>
>> > > wrote:
>> > >>>>
>> > >>>> file to take 900MB or... can i call some system function to "punch"
>> > >>>> holes?
>> > >>>
>> > >>>
>> > >>> I think you can only truncate the file at this time, pretty much like
>> > >>> brk() works for memory.
>> > >>
>> > >>
>> > >>
>> > >> BAD. suppose i keep windoze VM image on filesystem which takes 10GB but
>> > > uses 5GB.
>> > >>
>> > >> i could write simple program to find out what blocks are unused and
>> > > then...do nothing.
>> > >>
>> > >
>> > > What if you cp it?
>> >
>> > That would be a dd(1) unless we teach cp(1) how to do sparse.  I think
>> > what he wanted is to tell the OS "I don't need block XX - YY anymore"
>> > and the OS creates a sparse hole, which is not available at this time.
>>
>> Sorry, I must have misread.  I take it cp would take a file with holes and
>> only copy the data part? i.e. take a 10G file of which 5G is a hole, you'd
>> end up with a 5G file?
>
> No, cp just does read()s. Reading data from a hole returns a block
> full of zeros. A quick test (after writing a program to create the
> file) shows this:
>
> bhuda% df -h .
> Filesystem    Size    Used   Avail Capacity  Mounted on
> /dev/md0      123M    1.2M    112M     1%    /tmp
> bhuda% ls -lh holey.test
> -rwxr-xr-x  1 mwm  wheel   953M Jun 16 16:22 holey.test
>
> Ok, I've got a file that's 953M on an FS with 1.2 meg used. It's got
> holes.
>
> bhuda% cp holey.test foobar
> /tmp: write failed, filesystem is full
> cp: foobar: No space left on device
>
> And doing a cp fails. Use dd conv=sparse to get the effect you want.

    Our version of cp doesn't support sparsing of files, but Linux's
does: http://linux.about.com/od/commands/l/blcmdl1_cp.htm
    Our copy of dd and rsync are the two common tools I know of that
properly handle sparse files if the underlying filesystem supports it
(like Xin said), apart from writing a tool to do the necessary calls
to lseek to do the right thing in the file (which is possible, but you
would need to potentially read the whole file in, or pieces, similar
to defrag until Windows might do).
Thanks,
-Garrett
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to