Skip site navigation (1)Skip section navigation (2)
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 "punc=
h"
>> > >>>> holes?
>> > >>>
>> > >>>
>> > >>> I think you can only truncate the file at this time, pretty much l=
ike
>> > >>> 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. =A0I thi=
nk
>> > 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. =A0I 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 =A0 =A0Size =A0 =A0Used =A0 Avail Capacity =A0Mounted on
> /dev/md0 =A0 =A0 =A0123M =A0 =A01.2M =A0 =A0112M =A0 =A0 1% =A0 =A0/tmp
> bhuda% ls -lh holey.test
> -rwxr-xr-x =A01 mwm =A0wheel =A0 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=3Dsparse 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>