[pve-devel] kvm disk template implementation ideas

Alexandre DERUMIER aderumier at odiso.com
Wed Aug 22 09:49:25 CEST 2012

one feature that really miss on proxmox currently is disk templates for kvm machines.
I'm currently doing it with custom scripts, but I would like to add clean implementation in proxmox in the coming months(I think users should be happy too :)

I don't know if you have already thinked about it, but here some ideas:

template feature with image copy from source (file storage, .raw files) to destination.
for each storage module, add an export and import sub.

import is used to import existing template in the target storage

file,nfs: cp /var/lib/vz/template/qemu/template1.raw  /mnt/myimage.raw
lvm :  dd if=/var/lib/vz/template/qemu/template1.raw of=/dev/lvm/..
iscsi : dd if=/var/lib/vz/template/qemu/template1.raw of=/dev/sd 
rbd :  rbd import /var/lib/vz/template/qemu/template1.raw  myrbdimage
sheepdog: cat /var/lib/vz/template/qemu/template1.raw | collie vdi write mysheepimage
libiscsi,nexenta : LD_PRELOAD=./bin/ld_iscsi.so dd if=/var/lib/vz/template/qemu/template1.raw of=iscsi:// 

export is used to export a disk to the template storage, for creating new templates 

file,nfs: cp /mnt/myimage.raw /var/lib/vz/template/qemu/template1.raw  
lvm :  dd if=/dev/lvm/.. of=/var/lib/vz/template/qemu/template1.raw
iscsi : dd if=/dev/sd of=/var/lib/vz/template/qemu/template1.raw
rbd :  rbd export myrbdimage /var/lib/vz/template/qemu/template1.raw  
sheepdog: collie vdi read mysheepimage > /var/lib/vz/template/qemu/template1.raw
libiscsi,nexenta : LD_PRELOAD=./bin/ld_iscsi.so dd if=iscsi:// of=/var/lib/vz/template/qemu/template1.raw 

then add some kind of 
qm exportdisk <vmid> <disk> <target>        : qm exportdisk vmid virtio0 /var/lib/vz/template/qemu/template1.raw
qm importdisk <vmid> <disk> <source>        : qm importdisk vmid virtio0 /var/lib/vz/template/qemu/template1.raw

or maybe can we integrate this in vzdump/vzrestore. 
So we could also make backup/restore for all storages.
I never look in vzdump code, so I don't know how it's work

template feature with image cloning
for storage which support it, add a template feature based on image snapshot/instant cloning.
currently nexenta,sheepdog and rbd(soon), lvm??? support it.

I don't know really how to implement this, as we need to see difference between vm disk and templates disk.
(And we can't have a template directory).
we can't rename volume rbd,sheepdog so maybe can we allow snapshot named "template-..."

for this features, we need to add storage sub:

snapshot_create, clone, disktemplate_list (like vdisk_list)

rbd:  snap create --snap template-template1 vm-id-disk-1
sheepdog:  collie vdi snapshot -s template-template1 vm-id-disk-1
nexenta : nexenta api snap vm-id-disk-1 at template-template1

disktemplate_list (return list of templates(snapshots) and associated disk
sheepdog : collie vdi list
rbd : problem : can't easilly list all templates, without calling "rbd snap ls image1" for each image
nexenta: nexenta api to list templates

another solution is to maintain a list of snapshots in a text file or somewhere else, but we don't like that in proxmox.


rbd: coming soon
sheepdog:  collie vdi clone -s template-template1 vm-id-disk-1 mytargetimage
nexenta : nexenta clone api vm-id-disk-1 at template-template1 mytargetimage

then add some kind of 
qm clonedisk <vmid> <disk> <template>        : qm clonedisk vmid virtio0 template-template1

What do you think about it ? Don't hesitate to comments.

More information about the pve-devel mailing list