如何在Linux中检查磁盘是SSD(固态硬盘)还是HDD(机械硬盘)
最近购买了一台预装有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.