如何在Linux中检查磁盘是SSD(固态硬盘)还是HDD(机械硬盘)

时间:2020-03-21 11:44:25  来源:igfitidea点击:

最近购买了一台预装有Linux的新笔记本电脑,不确定所安装的磁盘是SSD(固态硬盘)还是普通的HDD(机械硬盘)。
本简短教程将教我们如何在Linux操作系统中查找磁盘是SSD还是HDD。

查找磁盘在Linux中是SSD还是HDD

从内核版本2.6.29开始,Linux操作系统可以自动检测SSD。
有几种方法可以确定磁盘是SSD还是HDD。
其中我给出了7种方法。

方法1-检查磁盘是否旋转

我们可能已经知道,传统的硬盘驱动器(HDD)将数据存储在称为盘片的圆盘上。
当光盘旋转时,移动的读/写头将访问数据。
磁盘旋转(旋转)的速度越快,硬盘的工作速度就越快。

另一方面,固态驱动器(SDD)是现代存储技术,是将数据存储在即时可访问的闪存芯片上的更快类型的磁盘驱动器。
与传统的HDD不同,SSD没有任何活动部件,SSD不旋转。

因此,要查找已安装的磁盘是固态硬盘还是普通硬盘,只需使用以下命令检查磁盘是否旋转:

$cat /sys/block/sda/queue/rotational

如果输出为1,则磁盘为HDD。
如果输出为0(零),则磁盘为SDD。
因为,SSD不会旋转。
因此,如果系统中装有SSD,则输出应为零。

每个驱动器在/sys/class/block /位置都有一个目录。
因此,我们也可以检查其他驱动器的详细信息。

$cat /sys/block/sdb/queue/rotational
$cat /sys/block/sdc/queue/rotational

说明:

如果我们在KVM来宾虚拟机上,则驱动器号为vda。
结果将因我们在虚拟机期间选择的总线类型而异。
例如,如果我们选择SATA作为虚拟磁盘的总线类型,我们将看到以下输出:

$cat /sys/block/vda/queue/rotational 
1

方法2-使用lsblk命令

lsblk命令读取sysfs文件系统和udev db来收集有关所有可用或者指定的块设备的信息。
lsblk命令是util-linux软件包的一部分,并且已随大多数Linux发行版预先安装。

万一lsblk命令不可用,只需使用发行版的软件包管理器安装util-linux软件包。

例如,在基于Arch的系统上,可以使用以下命令进行安装:

$sudo pacman -S util-linux

在基于Debian的系统上:

$sudo apt install util-linux

在基于RPM的系统上:

$sudo yum install util-linux

在openSUSE上:

$sudo zypper install util-linux

现在,使用以下命令查找磁盘是SSD还是HDD:

$lsblk -d -o name,rota

输出示例:

NAME   ROTA
loop0     1
loop1     1
loop2     1
loop3     1
loop4     1
loop5     1
loop6     1
loop7     1
loop8     1
loop9     1
loop10    1
loop11    1
loop12    1
loop13    1
loop14    1
loop15    1
loop16    1
loop17    1
loop18    1
loop19    1
loop20    1
sda       1
sr0       1

在此,“旋转”是指旋转装置。
如果我们在上述输出中得到的rota值为1,则该磁盘为HDD。
如果值为0(零),则磁盘为SSD。

方法3-使用SMART监视工具

查找磁盘是SSD还是HDD的另一种方法是使用smartctl命令。
smartctl是S.M.A.R.T监视工具包的一部分,用于控制和监视S.M.A.R.T.已启用的ATA和SCSI硬盘驱动器。

要在Arch Linux及其变体上安装SMART监视工具,请运行:

$sudo pacman -S install smartmontools

在Debian,Ubuntu上:

$sudo apt install smartmontools

在RHEL上,CentOS:

$sudo yum install smartmontools

在openSUSE上:

$sudo zypper install smartmontools

安装smartmontools软件包后,运行以下命令以查找磁盘是SSD还是HDD:

$sudo smartctl -a /dev/sda | grep 'Rotation Rate'

如果磁盘是SSD,则将显示以下输出。

Rotation Rate:    Solid State Device

如果磁盘是HDD,我们将获得以下输出:

Rotation Rate: 5400 rpm

方法4-使用dmesg + Google

这不是查找磁盘类型的直接方法。
在这种方法中,我们使用dmesg命令查找磁盘型号,然后在Google详细信息中查找磁盘是SSD还是HDD。

$dmesg | grep -i -e scsi -e ata

我们将看到磁盘型号名称以及所有其他详细信息。

[...]
[ 1.845159] scsi 0:0:0:0: Direct-Access ATA ST9500325AS DEM1 PQ: 0 ANSI: 5
[...]

只是谷歌这个模型来找到磁盘的详细信息。

方法5-使用SCSI详细信息+ Google

与上述方法相同。
我们使用以下命令从/proc目录中检索磁盘模型:

$cat /proc/scsi/scsi

输出示例:

Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST9500325AS      Rev: DEM1
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: PLDS     Model: DVD+-RW DS-8A8SH Rev: KD11
  Type:   CD-ROM                           ANSI  SCSI revision: 05
Host: scsi6 Channel: 00 Id: 00 Lun: 00
  Vendor: Generic- Model: Multi-Card       Rev: 1.00
  Type:   Direct-Access                    ANSI  SCSI revision: 00

然后Google详细信息以了解磁盘是SSD还是HDD。

方法6-使用Sg3-utils

Sg3-utils是使用SCSI命令集的设备实用程序的集合。
该软件包中的每个实用程序都实现一个SCSI命令。

Sg3-utils在Debian和Ubuntu的默认存储库中可用。
要将其安装在系统上,只需运行:

$sudo apt install sg3-utils

现在,通过运行以下命令来检查重要产品数据(VPD),以了解块设备的特性:

$sudo sg_vpd --page=bdc /dev/sda

输出示例:

Block device characteristics VPD page (SBC):
Nominal rotation rate: 5400 rpm
Product type: Not specified
WABEREQ=0
WACEREQ=0
Nominal form factor not reported
ZONED=0
BOCS=0
FUAB=0
VBULS=0

通过输出。
如果输出包含此行“标称转速:5400 rpm”,则为HDD。
对于SSD,我们可能会看到“非旋转介质”。

方法7-基准磁盘访问性能

通过使用以下命令从磁盘读取随机块来查找磁盘是SSD还是HDD:

time for i in `seq 1 1000`; do
    dd bs=4k if=/dev/sda count=1 skip=$(( $RANDOM * 128 )) >/dev/null 2>&1;
done

此命令将从磁盘的前16GB读取1000个随机的4k块。

如果磁盘是SSD,则该操作应在大约一秒钟内完成。
如果磁盘是HDD,则将需要几秒钟才能完成。

这将有助于检查VPS中的磁盘。
如果我们使用的是VPS,并且想检查托管服务提供商是否提供了SSD或者HDD,那么这是一种查找方法!

如果有多个磁盘怎么办?

如果我有两个磁盘,一个是SSD,另一个是HDD,该怎么办?
两个磁盘的大小均相同,并且来自同一制造商。
我不知道我的Linux安装在哪个磁盘上。
在这种情况下,只需使用以下命令查找根文件系统位于哪个磁盘上:

$df/-h

输出示例:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       458G  341G   95G  79% /

或者,使用lshw命令查找有关磁盘的更多详细信息:

$sudo lshw -short -C disk

输出示例:

H/W path                 Device           Class          Description
====================================================================
/0/100/1d/1/1/6/0.0.0    /dev/sdb         disk           Multi-Card
/0/100/1d/1/1/6/0.0.0/0  /dev/sdb         disk           
/0/1/0.0.0               /dev/sda         disk           500GB ST9500325AS
/0/2/0.0.0               /dev/cdrom       disk           DVD+-RW DS-8A8SH

如我们在上面的输出中看到的,我的根文件系统安装在/dev/sda中。
现在,按照上述任何一种方法来查找磁盘是HDD还是SSD。

说明:

在某些新笔记本电脑中,例如Lenovo ideapad s240,我们将看到一个不同的设备名称,例如nvme0n1.
让我们使用命令查看可用块设备的列表:

$ls /sys/block

输出示例:

loop0   loop11  loop14  loop17  loop2   loop3  loop6  loop9
loop1   loop12  loop15  loop18  loop20  loop4  loop7  nvme0n1
loop10  loop13  loop16  loop19  loop21  loop5  loop8

让我们找出根文件系统位于哪个磁盘上:

$df/-h

输出示例:

Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p6  96G   34G   58G   34%  /

从上面的输出中可以看到,没有sda或者sdb。
不要惊慌!这是正常的。
/dev/nvme ...设备名称表示较新的NVMe“磁盘”。
如果磁盘是通过NVM Express端口而不是传统的SATA或者SAS端口连接的,则将看到不同的设备名称,如上面的输出所示。

在此,/dev/nvme0n1等效于/dev/sda。
因此,/dev/nvme0n1p6等效于/dev/sda6.