sg3_utils:强大的SCSI命令工具集
项目介绍
sg3_utils是一个开源的工具包,最初设计用于向使用SCSI命令集的存储设备发送单个SCSI命令。该工具包分为三类:
- sg_raw:用户提供CDB(Command Descriptor Block),并可选地指定数据输入和输出缓冲区的大小。
- 单命令工具:大多数工具发送一个SCSI命令,名称以"sg_"开头,后跟命令名称。例如,
sg_inq发送SCSI INQUIRY命令。 - 复制类型工具:如
sg_dd、sgp_dd和sgm_dd,基于Unix的dd命令功能和命令行语法,可用于验证两个存储设备是否包含相同的数据。
平台支持
这些工具主要在Linux上编写,支持从Linux内核2.4到当前系列6。虽然第三类工具仅在Linux上实现,但第一和第二类工具已移植到Android、FreeBSD、NetBSD、Solaris和Windows等多个平台。Windows版本使用Cygwin或MinGW(加上Msys)构建环境。
核心技术架构
共享库设计
许多这些工具共享大量代码(例如SCSI错误消息),通过名为libsgutils的库避免了大量重复(可能容易出错)的代码。不同的发行版对库和包的命名有不同的策略,因此这个包有时被称为"sg3-utils"(即下划线变成连字符)。
多命令集支持
SCSI命令集不是唯一广泛使用的存储命令集,还有ATA和NVMe命令集。SCSI命令集可以将SCSI命令转换为ATA命令(称为SAT:SCSI到ATA转换)。SAT包括一个ATA PASS-THROUGH SCSI命令,sg_sat_*工具(有四个)是使用SAT的示例。
NVMe命令集相对较新。sg_inq工具在底层设备是SCSI设备时发送SCSI INQUIRY命令,如果底层设备是NVMe控制器或命名空间,则发送NVMe Admin Identify命令并解码响应。
JSON输出支持
借鉴smartmontools项目,JSON正逐步添加到那些解码大量存储设备提供的(元)数据的工具中。人类可读的输出仍然是默认设置,'--json'选项将输出更改为JSON。'--json'选项本身接受一个可选参数,该参数是一个字符串,其中每个字符打开(或关闭,如果前面有'-')JSON输出的某些属性。
JSON的一个困难是其整数表示是有符号的,大小为64位,并以十进制呈现,如果需要则带前导负号。然而存储元数据倾向于对较大的值(例如逻辑块地址)使用十六进制。这个问题通过'h'参数解决,它将十进制呈现的数字更改为具有两个名称-值对的JSON子对象。
完整文档体系
手册页是工具文档的主要方法。该包安装的所有工具和脚本都有一个手册页。examples、testing和utils目录中的工具不会安装,也没有手册页。几乎所有工具都有运行时帮助,通常使用'-h'短选项或'--help'长选项调用。
有一个名为"sg3_utils"的总体手册页。所有手册页都放在第8章中,该章节用于系统管理命令/工具。
实际应用场景
存储设备管理
通过发送SCSI命令,管理员可以查询设备信息、执行诊断操作等。
数据验证与复制
使用sg_dd等工具,可以验证两个存储设备的数据一致性,或执行数据复制操作。
跨平台兼容性
支持多种操作系统和存储命令集,确保在不同环境下的兼容性和灵活性。
项目特色
- 多功能性:提供多种工具,涵盖从单个SCSI命令发送到复杂的数据复制操作
- 跨平台支持:不仅限于Linux,还支持Android、FreeBSD、NetBSD、Solaris和Windows等多个平台
- 强大的库支持:通过libsgutils库,减少代码重复,提高工具的可维护性和稳定性
- 详细的文档:提供全面的manpages和HTML文档,帮助用户快速上手和深入理解工具的使用
快速开始
要使用sg3_utils,首先需要克隆仓库:
git clone https://gitcode.com/gh_mirrors/sg/sg3_utils
然后按照标准的构建流程进行编译和安装:
cd sg3_utils
./bootstrap
./configure
make
sudo make install
实用示例
项目中提供了丰富的示例代码,位于examples目录中:
scsi_inquiry.c:基本的SCSI查询命令示例sg_simple1.c到sg_simple5.c:简单命令使用演示sg_persist_tst.sh:持久化命令测试脚本
这些示例代码展示了如何使用sg3_utils的各种功能,从基本的命令发送到复杂的设备管理操作。
sg3_utils为存储专业人士提供了强大而灵活的工具集。无论你是系统管理员、存储工程师还是开发人员,sg3_utils都能为你提供强大的支持。立即开始使用这个功能丰富的SCSI命令工具集,提升你的存储设备管理效率。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



