[libvirt] [PATCH 3/3] Add volume zeroing

Dave Allan dallan at redhat.com
Tue Feb 16 15:49:22 UTC 2010


On 02/16/2010 06:33 AM, Daniel P. Berrange wrote:
> On Mon, Feb 15, 2010 at 10:47:33PM +0100, Paolo Bonzini wrote:
>> On 02/15/2010 10:29 PM, David Allan wrote:
>>> * If the volume is a sparse file and the fiemap ioctl is available,
>>> use fiemap to locate the volume's extents.
>>
>> What about for a sparse file doing just
>>
>>    ftruncate (fd, 0);
>>    ftruncate (fd, st.st_size);
>>
>> ?
>>
>> It's already sparse, it doesn't hurt to make it _more_ sparse.
>
> The idea of zeroing upon delete, is that we want the currently allocated
> extents to be overwritten with zeros. If we truncate to 0 size, then
> extend to original size I imagine that would easily allow the filesystem
> to give you a new set of extents filled with zeros, leaving the old
> extents with data intact as unused space on the FS.

Again, just to be clear, I'm only speaking of regular files here: the 
situation you just described seems ok to me, since we're not trying to 
protect against attackers on the host.  As long as we guarantee that any 
read to the file will return zeros following the zero operation, I think 
we're ok.  Since the section of the POSIX spec that Eric pointed to 
makes that guarantee with ftrucate, that's a great option for sparse files.

Can you think of any situation in which we'd want to do a complete 
overwrite of a sparse file?  At this point, I'm not seeing any.  fiemap 
is a nice tool, but I think we can dispense with it.

> Also, we need to make sure that this code works with physical block
> devices, as well as plain files. You can't truncate a block device so
> we'll need to write zeros in that case anyway.

That's what it currently does, so we're ok there.

Dave




More information about the libvir-list mailing list