[pve-devel] [Enhancement request] Thin Provisionning problems.. need to zero LVM disks before deleting a VM

Philippe OTTIN philippe.ottin at weishardt.com
Wed Mar 7 10:02:15 CET 2012


Hi,

As advised by Dietmar, I'm posting my request here.

I got a performance and disk space problem on my SAN (Datacore San 
Melody) due to the fact I've created/deleted too many VM's on the iSCSI 
LVM storage.
Datacore suggests us to zero disks before doing lvremove to tell the SAN 
the space is really available in order to allow San Melody to reclaim 
the unused space.

I explain the situation :

Each time we delete an LVM VM, the lvremove is processed. This is only a 
logical way to tell the LVM to remove the LV, but the data remains on 
the disks.
The SAN still sees this disk space as used (non-zero blocks). The only 
way to tell the SAN the data is available is to zero the LV before 
deleting it.
Then we're able, on the SAN to run a command to reclaim the unused space

It seems this problem is common on all thin-provisionning SAN's (not 
only SanMelody)


I wanted to modify Storage.pm to add a the dd command before the 
lvremove, but the problem is that is lasts from seconds to minuts... and 
the GUI session waits for the end of the dd before allowing me to do 
anything else..
Dietmar told me on the forum, that lvremove was considered as a quick 
command, and that's why it wasn't managed on a "batch" way.

So my question is : is there a way to add this feature in 2.0?
1) put a parameter (on the storage definition?) telling that we would 
like to zero the LV before lvremove
2) if this parameter is set, do the VM/disk deleteion in batch (showing 
a status in an other frame)


You'll find below the code I've tried to add in Storage.pm (I'm not a 
dev...so sorry if it's ugly... :D)

Code:

         my ($sizepo, $formatpo) = file_size_info("/dev/$vg/$volname");
         my $sizepoMo = int($sizepo/1024);
         my $cmd = ['dd', 'bs=1M', "count=$sizepoMo", 'if=/dev/zero', 
"of=/dev/$vg/$volname"];
         run_command ($cmd);

             my $cmd = ['/sbin/lvremove', '-f', "$vg/$volname"];
             run_command ($cmd);

Thank you in advance for your remarks.

- Philippe
--
This message is protected by the secrecy of correspondence rules ; furthermore it may contain privileged or confidential information
that is protected by law,notably by the secrecy of business relations rule ; it is intended solely for the attention of the addressee.
Any disclosure, use, dissemination or reproduction (either whole or partial) of this message or the information contained herein is
strictly prohibited without prior consent.
Any electronic message is susceptible to alteration and its integrity can not be assured. 
Weishardt declines any responsibility for this message in the event of alteration or falsification.
If you are not the intended recipient, please destroy it immediately and notify the sender of the wrong delivery and the mail deletion.
For contact information see http://www.weishardt.com




More information about the pve-devel mailing list