2.4.2 |
|
---|
#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