Stratis 3.0.0 includes many internal improvements, bug fixes, and user-visible changes.
- Email: firstname.lastname@example.org, email@example.com, firstname.lastname@example.org
- Targeted release: Fedora Linux 36
- Last updated: 2021-11-17
- FESCo issue: #2691
- Tracker bug: #2023360
- Release notes tracker: #768
stratisd 3.0.0 includes a number of significant internal improvements and a few bug fixes.
In stratisd 3.0.0 the D-Bus API has undergone a revision and the prior
interfaces are all removed. The
FetchProperties interfaces that
were supported by all objects have been removed. The values that were
previously obtainable via the
are now conventional D-Bus properties. The possible values of error codes
returned by the D-Bus methods have been reduced to 0 and 1, with the usual
stratisd bug fixes:
--promptoption was not passed to
stratis-fstab-setup script; this prevented the user from entering the
password necessary to unlock an encrypted pool during boot. This is
no longer the case.
stratisdwas not immediately updating the devicemapper device stack when
a cache was initialized with the result that the cache was not immediately put in use. This is no longer the case.
stratisdwas not immediately updating the Clevis encryption info associated
with a pool on a command to bind an encrypted pool with Clevis. This problem has been corrected.
stratisdwas sending an incorrect D-Bus signal on a pool name change; this
has been fixed.
- Previously, when stratisd-min, which runs during boot before D-Bus functionality is available, gave way to stratisd when the D-Bus had been set up, it was possible for inconsistencies to arise if the Stratis engine was performing an operation which required invoking a distinct executable. The executable might be terminated during its execution, and stratisd-min would take the action appropriate to the command failure before exiting. Now, systemd is instructed to send a kill signal only to stratisd-min and not to any of stratisd-min's child processes when shutting down stratisd-min.
- Previously, if the same device was specified using two different paths when creating or extending a pool the different paths would be interpreted as two different devices and an error would be returned when stratisd attempted to initialize the device a second time. Now, the different paths are canonicalized eagerly, and converted into a single canonical representation of the device, stratisd initializes the device only once, and no error is returned.
- Previously, stratisd did not report all existing object paths in the result of a D-Bus Introspect() call. This was due to a bug in version 0.9.1 and previous of stratisd's dbus-tree dependency. stratisd now requires dbus-tree 0.9.2, so all nodes are reported.
- Previously, stratisd relied entirely on udev information when deciding whether a storage device was not in use by another application and could safely be overwritten with Stratis metadata. Now it performs a supplementary check using libblkid and exits with an error if libblkid reports that the device is in use.
- Handling of errors returned by internal methods is improved; a chaining
mechanism has been introduced and the error chains can be scrutinized programatically to identify expected scenarios like rollback failures.
- A set of states indicating that a pool has reduced capability have been
added internally and are published on the D-Bus. A pool's capability is reduced on an error being returned internally which contains, somewhere in its chain, the appropriate identifying error variant.
- The code used to roll back failed encryption operations on a list of
pool devices has been refactored and generalized. It is now capable of returning an error that can be used to identify a restricted pool capability due to a rollback failure.
stratisduses sha-256 instead of sha-1 for Clevis-related encryption
operations to conform with Clevis's own usage.
stratisdexits more elegantly and less frequently if it encounters an
error during execution of the distinct tasks that are assigned to the individual threads that it manages internally.
- In preparation for edition 2021 of the Rust language,
has been updated to conform entirely to edition 2018 recommendations.
Users of the Stratis CLI may observe the following changes:
- It is now possible to set the filesystem logical size when creating a
- It is possible to rebind a pool using a Clevis tang server or with a key
in the kernel keyring.
- Filesystem and pool list output have been extended and improved. The pool
listing includes an
Alerts column. Currently this column is used to indicate
whether the pool is in a restricted operation mode. A new subcommand,
stratis pool explain, which provides a fuller explanation of the codes
displayed in the
Alerts column has been added. The filesystem listing
now displays a filesystem's logical size.
- With encrypted pools it was previously possible for the display of block
device paths to change format if
stratisd was restarted after an encrypted
pool had been created. Now the display of the block device paths is consistent
Benefits to Fedora
Users of Fedora will now benefit from Stratis 2.3.0 by:
- Having the ability to set the filesystem size at create time
- Changing the passphrase or NBDE server using the rebind option
- Proposal owners:
- Update existing stratis-cli package to specify new release
- Update existing stratisd package to specify new release
- Other developers: N/A
- Release engineering: Self Contained
- Policies guidelines: N/A
- Trademark approval: N/A
- Users of the CLI will not be impacted
- Developers that consume stratisd's D-Bus API will need to review the most recent changes make appropriate adjustments
How To Test
- To test setting filesystem size:
* Create a Stratis pool, either encrypted or not. * Create a Stratis filesystem on the pool, specifying a filesystem size: > stratis fs create <poolname> new-filesystem --size 256GiB * Verify that the size was set correctly: > stratis fs list <poolname> Verify the size of new-filesystem is 256 GiB by checking the first item in the size triple in the "Size" column.
- To test rebinding with a key in the kernel keyring:
* Create an encrypted pool, specifying a key in the kernel keyring: > stratis key set old-key > stratis pool create <poolname> --key-desc old-key <blockdevs> * Add an additional key to the kernel keyring, entering the value at the command-line: > stratis key set new-key --capture-key * Rebind the pool using the new key: > stratis pool rebind keyring <poolname> new-key * Verify that the pool has been rebound to the new keyring by rebooting your machine: * Reboot, make sure that stratisd is running. * Remove the old key from the kernel keyring, using stratis: > stratis key unset old-key * Verify that the old key is gone, by listing all the keys: > stratis key list * Unlock all the pools using the keyring: > stratis pool unlock keyring * Verify that the rebound pool is unlocked by listing the pools and verifying that it appears in the pool listing: > stratis pool list
Other than the changes mentioned above the user experience will be the same.
- Contingency mechanism:
- Contingency deadline: N/A
- Blocks release? No
- Blocks product? No
- Developers blog draft is here:
- Changelog for stratisd
- Changelog for stratis-cli
Includes recent version of Stratis