2.4.2 2021年6月24日

#38 in #block-device

自定义许可

1MB
24K SLoC

stratisd

一个管理块设备池以创建灵活文件系统的守护进程。

背景

Stratis(包括stratisd以及stratis-cli),通过整合现有技术层提供ZFS/Btrfs风格的功能:Linux的devicemapper子系统,以及XFS文件系统。stratisd管理一组块设备,并导出D-Bus API。Stratis-cli的stratis提供了一个命令行工具,该工具本身使用D-Bus API与stratisd进行通信。

网站

请参阅https://stratis-storage.github.io/

参与其中

沟通渠道

如果您有任何问题,请随时在邮件列表或IRC上提问! 😃

邮件列表

开发邮件列表:[email protected],-- 订阅这里

IRC

irc.freenode.net #stratis-storage。

开发者

Stratisd是用Rust编写的,这有助于实现小型、正确且无需携带大型语言运行时。

问题跟踪和开发

Stratisd开发使用GitHub问题跟踪,新开发通过GitHub拉取请求(PR)进行。如果需要,也可以通过邮件列表发送补丁或错误报告。

开发环境搭建

开发工具链

stratisd可以使用多种Rust工具链版本进行构建。推荐的开发工具链通常跟踪Rust稳定版本,尽管可能略有滞后。stratisd保证能够在其最低支持的工具链上构建,这可能比推荐的开发工具链落后几个小版本。

贡献者应尽可能使用推荐的开发工具链,因为CI使用该版本的Rust检查器和格式化工具。可以通过检查项目的CI配置文件来确定推荐的开发工具链版本。

构建

Stratisd 需要Rust和Cargo来构建。这些可能可以通过您发行版的包管理器获得。如果没有,可以使用Rustup来安装和更新Rust工具链。一旦工具链和其他依赖项就绪,运行make build来构建,然后以root用户身份运行stratisd可执行文件。

构建测试

Makefile提供了一个目标build-tests,允许在不运行任何测试的情况下编译测试,方便开发者使用。

次要依赖项

Stratis ci仓库包含一个脚本dependencies_fedora.sh,该脚本在Fedora上安装stratisd及其CLI的所有开发依赖项。

格式化

Stratisd使用rustfmt来强制执行Rust文件的一致格式。PR必须在CI中通过fmt任务才能合并。运行make fmt确保您的更改在提交pull request之前符合预期的格式。编译器不同版本中的格式略有不同;请确保使用当前的开发版本。

代码审查

Stratisd使用clippy来检测Rust代码审查。PR必须在CI中通过clippy任务才能合并。要检查代码审查,运行make clippy。代码审查在不同版本的编译器中略有不同;请确保使用当前的开发版本。

配置

Stratisd以root身份运行,并需要访问D-Bus系统总线。因此,为了正常工作,必须存在一个D-Bus conf文件以授予访问权限,这可以通过发行版打包安装;或者手动通过将stratisd.conf复制到/etc/dbus-1/system.d/来完成。

设置日志级别

可以使用命令行选项--log-level来设置stratisd的日志级别。此选项仅设置stratisd组件的级别。

要更精细地控制任何stratisd组件或依赖项的日志级别,请使用RUST_LOG环境变量。有关RUST_LOG的使用,请参阅env_logger包的文档。

测试

Stratisd有两种测试方式。第一种方式使用Rust测试基础设施,并具有更多访问stratisd内部的能力。第二种方式使用stratisd的D-Bus接口。

使用Rust测试基础设施的测试

Stratisd包含两种测试模式

  • 安全单元测试,可以在不影响您的存储配置的情况下运行
  • 不安全单元测试,可能在执行过程中创建和销毁设备

要运行安全单元测试

$ make test

关于不安全单元测试的描述、必要的设置步骤和如何运行它们,请参阅tests/README.md

通过D-Bus与stratisd交互的测试

关于基于D-Bus的测试的描述,请参阅tests/client-dbus/README.rst

允许的缺陷

stratisd有一些缺陷;我们打算在适当的时候解决这些问题。

我们选择不修复一个bug。这是一个D-Bus层的bug,如果调用D-Bus方法时传递的参数不符合方法预期签名,将允许某些D-Bus值的错误反序列化。有关此bug的详细信息,请参阅GitHub问题。如果调用方法的情况允许此bug暴露,则stratisd的行为是未定义的。

许可协议

MPL 2.0。所有贡献保留原始作者的版权,但必须根据MPL 2.0许可才能合并。

依赖项

~16–32MB
~503K SLoC