Am 15.03.2013 um 07:07 hat Wenchao Xia geschrieben: > δΊ 2013-3-13 20:40, Stefan Hajnoczi ει: > >The same applies for VMDK where one .vmdk can reference multiple extent > >files. > > > I'd like to confirm: This means a block device can have multiple > images at top level, but one image can still have only one backing > image at most? If my understanding is correct,following should be the > case: > > 1 device hda have two active images: a.qcow2 and b.qcow2(maybe vmdk > format now, just an example) > 2 a.qcow2 file's backing file will be a_base0.qcow2, never a_base0.qcow2 > and a_base1.qcow2.
I don't think this describes exactly what happens. Each qemu block device refers to one BlockDriverState, let's say top.vmdk for the top level image. This may refer to a backing file, backing.vmdk for example. Now top.vmdk nd back.vmdk could both be split images, and the former refers to its extents top_0.vmdk and top_1.vmdk, which contain the actual data of the image, and the latter may refer to backing_0.vmdk, backing_1.vmdk and backing_2.vmdk. So this can happen in any position in the BlockDriverState graph. > Since ImageInfo already have key 'backing-filename', which stands for > the information got in this image, not from the backing image, > add a new key 'bakcing-image' for recursive linking: > > { 'type': 'ImageInfo', > 'data': {'filename': 'str', 'format': 'str', '*dirty-flag': 'bool', > '*actual-size': 'int', 'virtual-size': 'int', > '*cluster-size': 'int', '*encrypted': 'bool', > '*backing-filename': 'str', '*full-backing-filename': 'str', > '*backing-filename-format': 'str', > '*backing-image": 'ImageInfo', > '*snapshots': ['SnapshotInfo'] } } > > Then insert ImageInfo into BlockDeviceInfo, with key 'images', since > 'file' is already used which may break compatibility if we change it. > 'images' uses an array for the case when multiple images exist in > top level, not for backing chain. > > { 'type': 'BlockDeviceInfo', > 'data': { 'file': 'str', 'ro': 'bool', 'drv': 'str', > '*backing_file': 'str', 'backing_file_depth': 'int', > 'encrypted': 'bool', 'encryption_key_missing': 'bool', > 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int', > 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int', > 'images': ['ImageInfo']} }} Yes, I think this is what Stefan meant (at least it looks like what I was thinking of). Kevin