LVM VDO support¶
Support for creating LVM VDO devices has been added in Blivet 3.4.
These devices are similar to LVM thinly provisioned volumes, but there are some special steps and limitations when creating these devices which this document describes.
LVM VDO in Blivet¶
LVM VDO devices are represented by two LVMLogicalVolumeDevice
devices:
VDO Pool logical volume with type ‘lvmvdopool’
VDO logical volume with type ‘lvmvdolv’ which is the child of the VDO Pool device
Existing LVM VDO setup in Blivet:
- existing 20 GiB disk vdb (265) with existing msdos disklabel
- existing 20 GiB partition vdb1 (275) with existing lvmpv
- existing 20 GiB lvmvg data (284)
- existing 10 GiB lvmvdopool data-vdopool (288)
existing 50 GiB lvmvdolv data-vdolv (295)
When creating LVM VDO setup using Blivet these two devices must be created together as these are created by a single LVM command.
It currently isn’t possible to create additional VDO logical volumes in the pool. It is however possible to create multiple VDO pools in a single volume group.
Deduplication and compression are properties of the VDO pool. Size specified for the VDO pool volume will be used as the “physical” size for the pool and size specified for the VDO logical volume will be used as the “virtual” size for the VDO volume.
When creating format, it must be created on the VDO logical volume. For filesystems with discard
support, no discard option will be automatically added when calling the mkfs
command
(e.g. -K
for mkfs.xfs
).
Example for creating a 80 GiB VDO pool with 400 GiB VDO logical volume with an ext4 format with both deduplication and compression enabled:
- pool = b.new_lv(size=Size(“80GiB”), parents=[vg], name=”vdopool”, vdo_pool=True,
deduplication=True, compression=True)
b.create_device(pool)
- lv = b.new_lv(size=Size(“400GiB”), parents=[pool], name=”vdolv”, vdo_lv=True,
fmt_type=”ext4”)
b.create_device(lv)
When removing existing LVM VDO devices, both devices must be removed from the devicetree and the VDO
logical volume must be removed first (recursive_remove
can be used to automate these two steps).
Managing of existing LVM VDO devices is currently not supported.
LVM VDO in Devicefactory¶
For the top-down specified creation using device factories a new LVMVDOFactory
factory has been
added. Factory device in this case is the VDO logical volume and is again automatically created
together with the VDO pool.
Example of creating a new LVM VDO setup using the devicefactory
module:
- factory = blivet.devicefactory.LVMVDOFactory(b, size=Size(“5 GiB”), virtual_size=Size(“50 GiB”),
disks=disks, fstype=”xfs”, container_name=”data”, pool_name=”myvdopool”, compression=True, deduplication=True)
factory.configure() factory.device
- LVMLogicalVolumeDevice instance (0x7f14d17422b0) –
name = data-00 status = False id = 528 children = [] parents = [‘non-existent 5 GiB lvmvdopool data-myvdopool (519)’] …
size
in this case sets the pool (physical) size, the VDO logical volume size can be specified
with virtual_size
(if not specified it will be same as the pool size). Name for the VDO volume
can be specified using the name
keyword argument. pool_name
argument is optional and
a unique name will be generated if omitted. Both compression
and deduplication
default to
True
(enabled) if not specified.
This factory can create only a single VDO logical volume in a single VDO pool but additional VDO pools can be added by repeating the steps to create the first one.