On disks that support hardware encryption standard OPAL2 Blivet can now create LUKS HW-OPAL devices to utilize the hardware encryption support.
- Support for creating Stratis Pools encrypted with Clevis/Tang
- Support for adding new block devices to existing Stratis Pools
- Automatic PV grow support
Encrypted Stratis Pools can now be created with Clevis/Tang or TPM2 configured.
New block devices can now be added to existing Stratis Pools using the ActionAddMember action.
LVM PVs can now be automatically grown to the size of the underlying block device with ActionResizeFormat using the new grow_to_fill property.
Blivet now supports managing the /etc/fstab entries. This can be done either automatically when changing devices (filesystems) or manually via the newly added fstab module.
Filesystem management and operations are now done using the libblockdev FS plugin instead of running the filesystem-specific tools directly. Support for some older/unused filesystems (HFS, JFS, ReiserFS) has been removed.
Filesystem that support online shrink and/or grow can now be resized when mounted. The default behaviour is still to try to unmount the filesystem first. This can be controlled with the flags.allow_online_fs_resize flag.
Latest major release of the libblockdev library is now required for blivet.
- NVMe and NVMe over Fabrics support
- Discoverable partition IDs support
- DMRAID support removed
- `Removed`_
Basic support for NVMe and NVMe oF devices was added in this release. These devices will now be correctly identified as either NVMeNamespaceDevice or NVMeFabricsNamespaceDevice.
Blivet now support discoverable partitions specification to set well known GPT partition GUIDs based on the selected mount point.
Support for DMRAID devices was removed in this release. BIOS RAID devices are now support by mdadm.
- DMRaidArrayDevice
- flags.noiswmd and flags.dmraid
- LVM writecache support
- Support for enabling/disabling compression/deduplication for existing LVM VDO volumes
- Test suite improvements
Blivet can now create LVM writecache devices and attach them to existing LVM volumes as well as create new LVM volumes with with write cache attached to them.
Deduplication and compression can be now enabled or disabled on existing LVM VDO volumes.
The blivet test suite has been split into two separate test suites: unit tests that don't require root privileges and don't use real storage devices and "storage" tests that use either loop devices or virtual scsi devices for testing.
- Stratis support
- LVM cache pools support
- LVM device file support
- Device rename support
- NPIV-enabled zFCP devices support
Blivet can now create Stratis pools and filesystems. This also includes devicefactory support for Stratis devices and support for creating and unlocking encrypted Stratis pools.
Blivet can now create LVM cache pools and attach them to existing logical volumes.
Blivet now supports the new LVM device file used for device filtering.
Blivet now can rename devices (LVM Volume Groups and Logical Volumes) using the ActionConfigureDevice action.
Blivet now supports zFCP NPIV (N_Port ID virtualization) devices. The kernel module will detect the WWPNs and LUNs and bring all the devices up automatically. This means the user doesn't have to provide the WWPN and LUN IDs.
Blivet can now create LVM VDO Pools and Volumes. This also includes devicefactory support for deduplicated and compressed volumes using LVM VDO.
- Localization Platform Change
- XFS Grow Support
- Better Handling of Unknown Device Mapper Devices
- F2FS Support
- `Removed`_
- DMDevice.slave, LoopDevice.slave, LUKSDevice.slave
- blivet.errors.NoSlavesError
- blivet.udev.device_name_blacklist
Localization platform has been changed from Zanata to Weblate.
XFS format can now be resized by Blivet.
Unknown/unsupported Device Mapper devices are now added to the devicetree and no longer causes errors during populate.
Blivet can now create F2FS filesystem.
- DMDevice.slave, LoopDevice.slave, LUKSDevice.slave
- blivet.errors.NoSlavesError
- blivet.udev.device_name_blacklist
- Alignment to Minimal I/O Size
- LVMPhysicalVolume Resizable
- LUKS2
- Removed
** blivet.errors.UnknownSourceDeviceError
Newly created devices smaller than min I/O size are now automatically aligned up.
LVM Physical Volume format can now be resized by Blivet.
LUKS2 is now used as default encryption if not specified otherwise.
blivet.errors.UnknownSourceDeviceError
- LUKS2
- NVDIMM
Blivet now supports creating and unlocking LUKS2 volumes.
Blivet now supports managing NVDIMM devices. Configuration of the devices themselves can be done prior to using ndvimms in sector mode as you would use any other disk-like devices in blivet.
- Python 2&3 Compatibility
- Configuration Actions
- Streamlined DeviceFactory Reconfiguration
- New Upstream Location
- DeviceFactory Defaults to LVM
- DBus Interface
- HBA RAID Info
- DiskDevice.wwn
- `Removed`_
** udev.device_is_realdisk * `Moved`_ ** Encrypted Volume Data
Blivet can now run using python-2.7.x or python-3.5.x. The six
python
module is used as a compatibility layer.
Setting arbitrary attributes of devices and their formatting can now be
accomplished using configuration actions (ActionConfigureDevice
,
ActionConfigureFormat
). Previously, the only way to do this was by making
ad-hoc changes that were not properly accounted for.
When passing a device to a DeviceFactory
constructor to reconfigure that
device, blivet will now obtain the factory defaults from that device. This
saves the caller from having to pass all arguments explicitly to maintain the
initial settings for that device.
Blivet has moved to https://github.com/storaged-project/blivet, along with libblockdev, libbytesize, and blivet-gui.
Blivet.factory_device
and devicefactory.get_device_factory
both
default to configuring LVM. Previously there was no default type.
An experimental DBus interface has been added. It contains functionality
related to examining the current configuration, removing devices, and
configuring new devices using blivet's DeviceFactory
.
Blivet now uses libstoragemgmt's python module (lsm
) to provide some
basic information about HBA RAID volumes as properties of DiskDevice
.
An attribute (wwn
) has been added to DiskDevice
to convey World Wide
Number for disks.
udev.device_is_realdisk
Encrypted Volume Data has moved to a singleton and is no longer passed around
as arguments to DeviceTree
or related classes.
- Device Tags
All Device
subclasses now have a tags
attribute which is prepopulated
with predefined tags describing the drive(s) a device resides on. The available
tags are defined in blivet.devices.lib.Tags
.
LVM thin pools and cached LVs can now be created from separate data/metadata LVs.
Devices built on disklabels which are either corrupt or otherwise
not supported by parted are now correctly recognized and included
in the DeviceTree
. This means that users can now properly remove
all devices from such disks.
- MD chunk size
Chunk size can now be specified when instantiating blivet.devices.MDRaidArrayDevice
.
- PEP8 compatibility
- LVM RAID
- Thread safety
- Handling of external storage events
- LUKS resize
- A single class for all LVs
- Revamped code to populate the device tree
- Changed Size implementation
- API Stability
- `Removed`_
- `Moved`_
The following were deprecated and have been removed.
DeviceTree.get_devices_by_serial
(use a list comprehension)For example, this:
devs = devicetree.get_devices_by_serial(serial)
could be accomplished like this:
devs = [d for d in devicetree.devices if d.serial == serial]
DeviceTree.get_devices_by_type
(use a list comprehension)DeviceTree.get_devices_by_instance
(use a list comprehension)BTRFSVolumeDevice.create_subvolumes
MDRaidArrayDevice.devices
(useMDRaidArrayDevice.members
)MDBiosRaidArrayDevice.devices
(useMDBiosRaidArrayDevice.members
)
DeviceTree.register_action
(useDeviceTree.actions.add
)DeviceTree.cancel_action
(useDeviceTree.actions.remove
)DeviceTree.find_actions
(useDeviceTree.actions.find
)DeviceTree.prune_actions
(useDeviceTree.actions.prune
)DeviceTree.sort_actions
(useDeviceTree.actions.sort
)DeviceTree.process_actions
(useDeviceTree.actions.process
)DeviceTree.get_children
(useDevice.children
)
A complete public API specification can be found in the documentation,
which is available in the source tree at doc/api.rst
and doc/api/
.
Beginning with version 2.0.0 the blivet project will be using semantic versioning -- actually, we will be using a variation developed by the OpenStack project which incorporates support for Python PEP440: http://docs.openstack.org/developer/pbr/semver.html
Blivet now supports resize of block devices encrypted using LUKS, including
the Blivet.resize_device
method.
Blivet now has the ability to listen for uevents on block devices and adjust to
externally-initiated changes. Event handling is not enabled by default. For an
example of how to enable this feature, see examples/uevents.py
. Most of the
code related to event handling is in the new blivet.events
package. The
main pieces are blivet.events.manager.event_manager
(an instance of
blivet.events.manager.UdevEventManager
), blivet.events.manager.Event
,
and blivet.events.handler.EventHandlerMixin
(a mixin class that augments
DeviceTree
).
In order to be better prepared for supporting things like lvconvert, Blivet
now represents all LVs with a single class (keeping the name
LVMLogicalVolumeDevice
).
In order to create LVs of various types, different values of the seg_type
parameter need to be passed. For example, to create a thin pool, thin-pool
segment type needs to be specified (optionally together with the
thin-pool-specific parameters like metadata_size
) . The same applies to thin
LVs and the thin
segment type. To create a snapshot LV, one needs to specify
the origin
LV or set the vorigin
flag to True
. Internal LVs require
parent_lv
and int_type
specifying the type of the internal LV.
To determine the type of some LV, the newly added is_thin_lv
,
is_thin_pool
, is_snapshot_lv
and is_internal_lv
properties can be
used.
To avoid having a single gigantic class with hundreds of lines of code, the
LVMLogicalVolumeDevice
class makes use of iheritance and "merges" together
the LVMLogicalVolumeBase
class and mixins for specific types of LVs (thin
pool, thin LV,...) adding the type-specific methods and properties as well as
type-specific implementations of various methods. The @type_specific
decorator makes sure that the right implementation of a method is called
whenever there is a type-specific one (for example thin pools are created in a
different way than good old linear LVs).
The code that is common to all LVs lives in the LVMLogicalVolumeBase
class
together with properties that are required by this code. Type-specific code
lives in the particular mixin classes and the generic/fallback implementations
live in the (ultimate) LVMLogicalVolumeDevice
class' methods decorated with
the @type_specific
decorator.
Instances of blivet.device.Device
now have a list of their direct
descendants: Device.children
. Accordingly, DeviceTree.get_children
has
been removed.
Blivet now uses a global reentrant lock to ensure thread-safety within the
Blivet
, DeviceTree
, Device
, and DeviceFormat
classes.
Blivet now recognizes and supports creation of new non-linear LVs. The segment
type is properly reported in the seg_type
attribute of the
LVMLogicalVolumeDevice
objects and the seg_type
constructor parameter
can be used to create new LVs with specific segment types. Please note that only
the linear (default), striped, mirror and raidX segment types are
supported so far. Also the LVMLogicalVolumeDevice
class now inherits from
the RaidDevice
mixin.
Added properties:
LVMLogicalVolumeDevice
is_raid_lv
,mirrored
data_vg_space_used
,metadata_vg_space_used
- space used by the data/metadata part of the LV in its VG taking the RAID level (i.e. the number of mirrors) into account
LVMPhysicalVolume
free
- free space in the PV (for all existing and non-existing PVs)
Removed properties:
LVMLogicalVolumeDevice
copies
blivet.populator.Populator
has been rewritten to improve maintainability.
Most of the code that does type-specific handling for devices or formatting has
been moved into individual helper classes under blivet.populator.helpers
.
The populator class itself has been rewritten as a mixin
(blivet.populator.PopulatorMixin
) that augments DeviceTree
.
All code in blivet now conforms to
PEP8. As a result, all non-class
names in the camelCase
style have been renamed to the
lower_case_with_underscores
style. This applies to methods within classes,
but not to the names of the classes themselves -- they still use CamelCase
.
The Size
class now inherits from the bytesize.Size
class provided by the
libbytesize library. There should be no difference in behaviour except for
potential speed-up and the human_readable()
method having different
parameters. It now accepts the min_unit
, max_places
and xlate
parameters described in the documentation.