c - 如何识别硬盘使用的协议(protocol)?

标签 c linux hard-drive sata

我有一个应用程序需要从硬盘读取信息,比如串行模型等。

当然,驱动器是 SAS、SATA 还是 FC 驱动器很重要。

有没有一种可靠的方法可以识别连接的驱动器使用的协议(protocol)?通过操作系统命令或检查一些日志或查询设备?

我不想使用 sysfs 结构。我想知道操作系统如何知道它是 ATA、SCSI 还是任何类型的磁盘。

最佳答案

正如您在对 user3588161 的回答 的评论中提到的,您将 SATA 和 SAS 磁盘连接到同一个 SAS Controller ,所以我建议使用 smartctl命令!

smartctl 命令在 Linux 和类 Unix 操作系统下充当 SMART 磁盘的控制和监视实用程序。键入以下命令以获取有关/dev/sda(SATA 磁盘)的信息:

# smartctl -d ata -a -i /dev/sda

对于 SAS 磁盘,使用以下语法之一:

# smartctl -d scsi --all /dev/sgX
# smartctl -d scsi --all /dev/sg1
# smartctl -d scsi --all /dev/sg1 -H

我想所有的信息都以某种方式与这个位置相关:-

/sys/class/scsi_device/?:?:?:?/device/model

我建议您也尝试这样做以检查它呈现的输出。

cat /sys/class/scsi_device/0\:0\:0\:0/device/{model,vendor}

(零旁边的反斜杠用于转义特殊字符 :。)

此外,我建议您访问这两个链接,以获取更多信息或详细信息,例如示例输出等:-

Find Out Hard Disk Specs

To Check Disk behind Adaptec RAID Controllers

关于c - 如何识别硬盘使用的协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25185410/

相关文章:

c++ - 使用 ncurses 和 C++ 输出一个漂亮的 "block"字符?

c - 如何为函数内部的结构分配动态内存槽,可以从程序中的任何位置访问该结构

c - 如何在 Linux 中使用 chdir 功能?

c# - 使用 c# 如何提取有关本地计算机上存在的硬盘驱动器的信息

java - 基于磁盘的列表实现

c - 位掩码操作 : what does the following code mean in C?

c - 如何将系统日志输出发送到标准输出?

c - Unix 域套接字传递文件描述符 - sendmsg : Transport endpoint is not connected

linux - 尝试在 linux ubuntu 18.04 LTS 上安装 docker 存储库时出错

performance - 优化查询以减少 i/o 压力是否有意义?