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"