如何判断磁盘是 SSD 还是 HDD
磁盘速度越来越称为限制系统性能的重要因素,目前家用计算机中的磁盘一般分两类,SSD 和 HDD,且两类磁盘的读写速度相差巨大。 那么在 Linux 下要如何判断磁盘是 SSD 还是 HDD 的呢?
我们知道,传统的 HDD 磁盘与 SSD 很大一个不同就在于传统的 HDD 磁盘是通过磁盘旋转来将磁头转到指定磁道上来实现读写的,而SSD将数据存储在可即使访问的闪存芯片上的。 因此只要直到了磁盘是否需要旋转就能区分磁盘为 SSD 还是 HDD 了。
解决方案一:使用 lsblk 命令
涉及到的命令:lsblk,本部分以 archlinux 系统为例
安装
lsblk 命令是属于 util-linux
包中,一般在大多数的 Linux 发行版中都会预先安装。 若未预安装则需要手工进行安装,在 Archlinux 中运行下面命令安装:
sudo pacman -S util-linux --noconfirm
解决方案
lsblk 命令会读取 sysfs
文件系统和 udev
配置来获取块设备(磁盘就是一种块设备)的信息。我们可以通过下面命令来查看磁盘是否会旋转:
lsblk -d -o name,rota
这里 -d
选项是 --nodeps
的缩写,表示只输出磁盘信息,而不输出磁盘上分区的信息。 -o
选项是 --output
的缩写,可以用来指定输出的列,我们这里只让它输出磁盘名和是否旋转
该命令在我电脑上运行的结果如下:
NAME ROTA sda 0 sdb 1
也就是说,我这台机上装了两块磁盘,其中 sda
是 SSD
磁盘, sdb
是 HDD
磁盘。
解决方案二:借助 /sys
涉及到的命令:bash,本部分以 archlinux 系统为例
安装
无需安装
解决方案
事实上 lsblk
命令正是读取 /sys
中的文件内容来给出某个磁盘是否旋转的信息来的。 你可以通过 strace lsblk -d -o name,rota
来进行验证,其输出中会包含类似这样的输出:
..... 省略 ..... openat(AT_FDCWD, "/sys/block/sdb/dev", O_RDONLY|O_CLOEXEC) = 5 fstat(5, {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0 read(5, "8:16\n", 4096) = 5 close(5) = 0 ..... 省略 ..... openat(AT_FDCWD, "/sys/block/sda/dev", O_RDONLY|O_CLOEXEC) = 5 fstat(5, {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0 read(5, "8:0\n", 4096) = 4 close(5) = 0 ..... 省略 ..... openat(AT_FDCWD, "/sys/dev/block/8:16", O_RDONLY|O_CLOEXEC) = 3 openat(3, "queue/rotational", O_RDONLY|O_CLOEXEC) = 4 read(4, "1\n", 8191) = 2 read(4, "", 8189) = 0 close(4) = 0 close(3) = 0 openat(AT_FDCWD, "/sys/dev/block/8:0", O_RDONLY|O_CLOEXEC) = 3 openat(3, "queue/rotational", O_RDONLY|O_CLOEXEC) = 4 read(4, "0\n", 8191) = 2 read(4, "", 8189) = 0 close(4) = 0 close(3) = 0
因此,我们也可以按照这一过程,自己从 /sys
中获取信息。比如,我们要查看 sda
是否为SSD磁盘可以这样操作
DISKID=$(cat /sys/block/sda/dev) cat /sys/dev/block/${DISKID}/queue/rotational
0
不过,由于 /sys/block/sda
和 /sys/dev/block/$(cat /sys/block/sda/dev)
指向的是同一个目录,所以其实上面的操作可以简化为:
cat /sys/block/sda/queue/rotational
0
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论