Date: Sat, 16 Jun 2012 13:46:54 -0700 From: Garrett Cooper <yanegomi@gmail.com> To: Mike Meyer <mwm@mired.org> Cc: freebsd-hackers@freebsd.org Subject: Re: BIO_DELETE equivalent for file on FFS filesystem Message-ID: <CAGH67wSPtG7%2BWSCDQ820hQGqBqGsqnGZ6CGNVTazc_c7SJjgtQ@mail.gmail.com> In-Reply-To: <20120616163450.2d0fa3c7@bhuda.mired.org> References: <alpine.BSF.2.00.1205261704590.70782@wojtek.tensor.gdynia.pl> <4FD94240.6060806@delphij.net> <alpine.BSF.2.00.1206140647080.72545@wojtek.tensor.gdynia.pl> <CADLo83-T%2B4W2aUKc=-CEUrOqwCq5aqipt-fK=BBboQVNJ3qcWQ@mail.gmail.com> <CAGMYy3sWPMCnttUtJhJCFTtPtgfWWUO1tgK%2BRYOE3QQpg=%2Bw1A@mail.gmail.com> <CADLo83-dZD5C2Fk3ZTH9z=pXHn8BtYzZQqUBG6HCkHZKe1=P8Q@mail.gmail.com> <20120616163450.2d0fa3c7@bhuda.mired.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Jun 16, 2012 at 1:34 PM, Mike Meyer <mwm@mired.org> wrote:
> On Sat, 16 Jun 2012 21:04:26 +0100
> Chris Rees <utisoft@gmail.com> wrote:
>
>> On Jun 16, 2012 8:37 PM, "Xin LI" <delphij@gmail.com> wrote:
>> >
>> > On Sat, Jun 16, 2012 at 12:01 PM, Chris Rees <utisoft@gmail.com> wrote:
>> > > On Jun 14, 2012 5:49 AM, "Wojciech Puchar" <
>> wojtek@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGH67wSPtG7%2BWSCDQ820hQGqBqGsqnGZ6CGNVTazc_c7SJjgtQ>
