想要判断 Linux 下磁盘是固态硬盘(solid-state drive)还是机械硬盘(hard disk),有多种方法。
方法一,cat /sys/block/{fs_name}/queue/rotational
Linux 可以自动判定硬盘是否是 SSD,从 2.6.29 的内核版本之后,可以通过如下命令查看硬盘是不是 ssd:
cat /sys/block/{fs_name}/queue/rotational
其中,{fs_name} 是你的硬盘设备名称,例如 vda、vdb、sda 等等。
若上述命令返回 1 表示机械硬盘(hard disk),若返回 0,则表示固态硬盘(ssd)。
需要注意的是,如果设备是例如 RAID 这样的逻辑设备,上述命令可能不可用。
示例如下:
[deme@Linux ~]$ cat /sys/block/vdb/queue/rotational
1
[deme@Linux ~]$ grep ^ /sys/block/*/queue/rotational
/sys/block/vda/queue/rotational:1
/sys/block/vdb/queue/rotational:1
方法二,利用 lsblk 命令
使用 lsblk
命令进行判断,该命令属于 util-linux(一个 Linux 标准软件包)的一部分,参数 -d
表示显示设备名称,参数 -o
表示仅显示特定的列。
[deme@Linux ~]$ lsblk -d -o name,rota
NAME ROTA
vda 1
vdb 1
其中 ROTA 表示 rotational device,1 代表是机械硬盘,0 则就是 ssd 了。
方法三,使用 fdisk 命令
使用 fdisk 命令,后面加 -l 选项表示查看磁盘详细信息,如果输出的详细信息中包含机械硬盘中有的 heads(磁头)、track(磁道)、cylinders(柱面)等概念,那表示是该磁盘是 HDD,否则很有可能是 SSD。
下面分别列出了 HDD 和 SSD 的示例:
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00074f7d
Disk /dev/nvme0n1: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
方法四,使用第三方工具 smartctl
smartctl 是管理和监控存储硬件工具 smartmontools 的两个程序工具之一,另一个是 smartd 程序工具,可以通过如下命令查看磁盘信息:
smartctl -a /dev/{fs_name}
示例如下:
[deme@Linux ~]$ smartctl -a /dev/disk1s1
如果看到如下一行信息,表示是固态硬盘(SSD)。
......
Rotation Rate: Solid State Device
......