Make sure disk filters are applied even if populate fails.
Reset the devicetree before tearing everything down in _cleanUp.
Remove duplicate portion of lvm config string.
Add docstrings for BTRFSVolumeDevice and BTRFSSubVolumeDevice.
Add backend functions for creating and managing snapshots.
Add optional kwarg to force removal of a logical volume.

Old-style snapshots and their origins are always activated and deactivated
together, which makes it impossible to directly manipulate the status of
such snapshots. This can lead to lvm asking if you're sure you want to
remove an active snapshot which, of course, you are.
Add ignore_skip keyword arg to lvactivate.

Thin snapshots are marked to be skipped at activation time by default, so
this extra argument is required to activate them.
Add Device classes for snapshots.
Use LVMSnapshotDevice when populating the devicetree.
Drop special accounting for snapshot space usage in VG.

Snapshots are now represented by devices, so the space accounting is
handled the same as for other LVs.
Detect existing btrfs snapshots.
Some devices have immutable formatting.

It is not a good idea to try to reformat a snapshot or a btrfs subvolume.
Special treatment for getting parted device for old-style lvm snapshots.

The device at the obvious path shows the same size as the origin, which
is not necessarily the size of the snapshot. This special device with
"-cow" appended to it seems to show the correct size.
Add tests for snapshots.
Add support for read-only btrfs snapshots.
Add a property indicating whether a device is directly accessible.

Directly accessible means there are no layers of abstraction/indirection
between the device and a user. An example of a non-direct device is an LVM
PV that is part of a VG. An example of a direct device is a partition that
contains swap space.

It used to be the case that direct was equivalent to isleaf, but no more.
Actual leaf devices, all btrfs subvolumes (including the top-level), and
snapshot source/origin devices can all be accessed directly by users.
Skip device name validation for some device types.

Partition and loop devices' names are set by parted or losetup, so there's
no need to validate the symbolic names blivet uses. Similarly, btrfs volume
names are only used within blivet so there is no need to validate them.