A daemon that manages a pool of block devices to create flexible filesystems.
March 8 2018: Stratis 0.5 released. See release notes for details.
Stratis (which includes stratisd
as well as stratis-cli),
provides ZFS/Btrfs-style features by integrating layers of existing technology:
Linux's devicemapper subsystem, and the XFS filesystem. stratisd
manages
collections of block devices, and exports a D-Bus API. Stratis-cli's stratis
provides a command-line tool which itself uses the D-Bus API to communicate
with stratisd
.
https://stratis-storage.github.io/ currently has links to the main internal design doc, the D-Bus API Reference manual, and some coding style guidelines.
If you have questions, please don't hesitate to ask them, either on the mailing list or IRC! 😃
Development mailing list: stratis-devel@lists.fedorahosted.org, -- subscribe here.
irc.freenode.net #stratis-storage.
Stratisd is written in Rust, which helps the implementation be small, correct, and avoid requiring shipping with a large language runtime.
Stratisd development uses GitHub issue tracking, and new development occurs via GitHub pull requests (PRs).
Stratisd runs as root, and requires access to the D-Bus system bus. Thus in
order to work properly, a D-Bus conf file must exist to grant access, either
installed by distribution packaging; or manually, by copying stratisd.conf
to /etc/dbus-1/system.d/
.
Stratisd requires Rust 1.26+ and Cargo to build. These may be available via your distribution's package manager. If not, Rustup is available to install and update the Rust toolchain.
Stratisd makes use of rustfmt
to enforce consistent formatting in Rust files.
PRs must pass the fmt
task in the CI in order to be merged. The fmt
task currently uses rustfmt-preview (pinned to 0.4.1).
The rust library dbus-rs has an external dependency on the C dbus library dbus development library. Please check with your distributions package manager to locate the needed package.
The files needed to build dbus-rs include, but are not limited to:
/usr/include/dbus-1.0/dbus/dbus*.h
/usr/lib64/libdbus-1.so
/usr/lib64/pkgconfig/dbus-1.pc
Also, the rust library libudev-sys has an dependency on the C libudev library. Please check with your distributions package manager to locate the needed package (e.g libudev-dev for Debian-based, systemd-devel for Fedora RPM-based Linux distributions).
At least, you need to include:
/usr/lib64/pkgconfig/libudev.pc
Once toolchain and other dependencies are in place, run cargo build
to build, and then run the
stratisd
executable in ./target/debug/
as root. Pass the --help
option
for more information on additional developer options.
To reformat all files to ensure proper formatting, run cargo fmt
to ensure
your changes conform to the expected formatting before submitting a pull request.
Stratisd incorporates two testing modalities:
- safe unit tests, which can be run without affecting your storage configuration
- unsafe unit tests, which may create and destroy devices during execution
To run the safe unit tests:
$ make test
For a description of the unsafe unit tests, necessary setup steps, and how to run them, see tests/README.md
.
MPL 2.0. All contributions retain ownership by their original author, but must also be licensed under the MPL 2.0 to be merged.