#硬盘 #磁盘 #SCSI #仪表 #查询 #ATA #SMART

bin+lib hdd

hdd: 查询 ATA 和 SCSI 磁盘的仪表

7 个不稳定版本

使用旧的 Rust 2015

0.10.3 2020 年 6 月 22 日
0.10.2 2020 年 2 月 3 日
0.10.1 2018 年 12 月 25 日
0.10.0 2018 年 4 月 27 日
0.7.0 2017 年 11 月 1 日

#617 in 文件系统

MPL-2.0 许可证

210KB
4.5K SLoC

hdd: 查询 ATA 和 SCSI 磁盘的仪表

文档.

这是一个正在进行中的工作

为什么?

主要是因为我对所有可用的将 SMART 和 SCSI 日志信息放入各种监控系统中的选项都感到失望。

  • 解析 smartctl 输出(通常使用正则表达式)的脚本很慢,丑陋且不可靠。
  • 为了将 smartctl(例如 JSON)支持不同的、编程友好的输出格式,基本需要重写所有散布在源文件中的临时 printf,而且如果你决定放弃实现某些命令行选项而改为完全改变输出格式,这并不会容易多少。(与 smartd 相关的事情只会变得更加复杂。)
  • libatasmart(及其支持的工具)只能与 ATA 设备一起工作,并且仅在 Linux 上,期待从这个库中得到更多是天真。

如何?

先决条件

此 crate 可以在 Rust >= 1.21 上构建。

构建 CLI 工具

git clone https://github.com/vthriller/hdd-rs.git
cd hdd-rs
cargo build --release --features='bin serializable' --bin=hdd
sudo ./target/release/hdd /dev/sda attrs --json

(如果看起来很复杂,请见谅。)

如果您想要用于运行较旧版本 glibc 的远程 GNU/Linux 系统的静态二进制文件,可以构建它

  • 安装 musl 工具链(例如,通过 rustup target add x86_64-unknown-linux-musl),
  • --target x86_64-unknown-linux-musl 添加到 cargo build 行。

在您的代码中使用库

将此放入您的 Cargo.toml

[dependencies]
hdd = "0.10"

支持什么?

平台和传输

  • Linux:ATA¹,SCSI
  • FreeBSD:ATA,SCSI

也支持 SCSI/ATA 转换。

¹ 注意,在 Linux 中,ATA 只通过 SAT 支持,虽然 SG_IO 优雅地为我们模拟了 SATA(以及可能 PATA?)磁盘。

功能

  • 待办事项

待办事项

  • 文档。
  • 测试。
  • 更多测试。
  • 更多的测试:大端系统、旧硬件…
  • rg 'TODO|FIXME|XXX|((?i)WTF)|unimplemented!|\b(unwrap|expect)\b' src sample-scsi/src build.rs
  • 与[插入你的喜欢的包名]的功能相同。
  • 支持RAID怪异设备(LSI、Adaptec、Areca等)和USB桥接器。
  • CLI工具的调试选项(例如smartctl -r ataioctl,2skdump)。
  • 更多设备(smartmontools可以查询NVMe设备)。
  • 更多平台(Windows、macOS、*BSD、Redox…)。

致谢

以下是必提的smartmontools贡献者,他们为这个crate的当前基础打下了基础。

许可证

本crate遵循Mozilla Public License版本2.0的条款进行分发。

依赖项

~4–5.5MB
~111K SLoC