Linux下如何确认磁盘是否为SSD
简介
There are different types of disk drives available among which most used are Hard drive (HDD) and Solid State Drive (SSD). Starting from the Kernel version 2.6.29, SSD is automatically detected by Linux systems.
HDD : Hard Disk Drive, 机械硬盘
SSD : Solid State Drive,固态硬盘
首先学习一下 HDD 和 SSD 工作原理的区别:
HDD机械硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。
磁头沿盘片半径方向运动,盘片以每分钟几千转的高速旋转,这样磁头就可以定位在盘片的指定位置上进行数据读写。
信息通过离磁性表面很近的磁头,由电磁流改变极性的方式,被电磁流写到磁盘上,并可以通过相反的方式读取。
而SSD固态硬盘,内部构造则相对简单,固态硬盘内主体其实就是一块PCB板,组成部件分为:主控芯片、闪存芯片、固件算法。
SSD,在主控的指挥下,通过电学信号的传输完成对闪存芯片的读写操作;
所以,SSD的读写过程依靠的是电学信号,不需要旋转磁盘。
电学信号比物理机械运作快多了,因此固态硬盘的运行速度远胜机械硬盘。
而磁盘的旋转情况,可以通过查看 rotational
来获知结果。
因此可以通过查看 rotational
来判断 Linux 磁盘是 HDD 还是 SSD 。
比如对于 sda
这个设备,可以通过 cat /sys/block/sda/queue/rotational
得到结果:
1 :表示磁盘可旋转, 是 HDD ;
0 :表示磁盘不可以旋转 , 是 SSD 。
JBOD
JBOD(just a bunch of disks,简单磁盘捆绑),官方术语称之为“Spanning”,仅仅是表面上将多个驱动器合并成一个大的逻辑磁盘(类似lvm的pv)
原理:数据的存放机制是由第一颗硬盘开始依序往后存放,即操作系统看到的是一个大硬盘(由许多小硬盘组成的)。但如果硬盘损毁,则该颗硬盘上的所有数据将无法救回。若第一颗硬盘损坏,通常无法作救援(因为大部分文件系统将磁盘分割表(partition table)存在磁盘前端,即第一颗),失去磁盘分割表即失去一切数据,若遭遇磁盘阵列数据或硬盘出错的状况,危险程度较RAID 0更剧。它的好处是不会像RAID 0,每次访问都要读写全部硬盘。但在部分的JBOD数据恢复实践中,可以恢复未损毁之硬盘上的数据。同时,因为每次读写操作只作用于单一硬盘,JBOD的传输速率与I/O表现均与单颗硬盘无异。
方法
方法1:通过查看/sys/block/sda/queue/rotational
通过cat /sys/block/sda/queue/rotational
进行查看,返回0即为SSD;返回1 则表示磁盘可旋转,即为HDD。
查看所有磁盘:
1 | grep ^ /sys/block/sd*/queue/rotational |
前提:如果是直通盘,即JBOD模式,方法则正确
方法2:通过lsblk查看
通过lsblk -d -o name,rota
进行查看,ROTA列返回0即为SSD;返回1即为HDD。
前提:如果是直通盘,即JBOD模式,方法则正确
方法5:smartctl(万能方法、推荐)
1 2 3 4 5 6 7 8 9 10 11 | -- 查询 yum install -y smartmontools smartctl -a /dev/sda | grep 'Rotation Rate' -- HDD If the disk is HDD, the output will be as: Rotation Rate: 5400 rpm -- SSD If the disk is SSD, output will look like: Rotation Rate: Solid State Device |
方法4:通过lsscsi查看
lsscsi - list SCSI devices (or hosts) and their attributes
lsscsi 主要命令参数介绍:
-s 显示容量大小。
-c 用全称显示默认的信息。
-d 显示设备主,次设备号。
-g 显示对应的sg设备名。
-H 显示主机控制器列表,-Hl,-Hlv。
-l 显示相关属性,-ll,-lll=-L。
-v 显示设备属性所在目录。
-x 以16进制显示lun号。
-p 输出DIF,DIX 保护类型。
-P 输出有效的保护模式信息。
-i 显示udev相关的属性
-w 显示WWN
-t 显示相应传输信息(ATA,FC,SBP,ISCSI,SPI,SAS,SATA,USB)
HDD:
1 2 3 | :~> lsscsi [2:1:0:0] disk HP LOGICAL VOLUME 4.02 /dev/sda 12 |
SSD :
1 2 3 | :~> lsscsi [0:0:0:0] disk ATA INTEL SSDSC2BB08 D201 /dev/sda 12 |
方法5:通过fdisk查看
可以通过fdisk命令查看,参数-l表示列出磁盘详情。在输出结果中,以Disk开头的行表示磁盘简介,下面是一些详细参数,我们可以试着在这些参数中寻找一些HDD特有的关键字,比如:”heads”(磁头),”track”(磁道)和”cylinders”(柱面)。
下面分别是HDD和SSD的输出结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 [pythontab@pyhontab.com ~]$ sudo fdisk -l 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 Disk identifier: 0xad91c214 ...... |
方法6:dd或sysbench磁盘读写测试
使用sysbench测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | sysbench fileio --file-num=1 --file-total-size=10G --file-test-mode=rndrw prepare sysbench fileio --file-num=1 --file-total-size=10G --file-test-mode=rndrw run sysbench fileio --file-num=1 --file-total-size=10G --file-test-mode=rndrw cleanup -- HDD 10737418240 bytes written in 52.62 seconds (194.60 MiB/sec). Throughput: read, MiB/s: 2.64 written, MiB/s: 1.76 10737418240 bytes written in 53.26 seconds (192.27 MiB/sec). Throughput: read, MiB/s: 69.33 written, MiB/s: 46.22 -- SSD 10737418240 bytes written in 7.21 seconds (1420.17 MiB/sec). Throughput: read, MiB/s: 225.20 written, MiB/s: 150.13 10737418240 bytes written in 4.70 seconds (2179.32 MiB/sec). Throughput: read, MiB/s: 272.99 written, MiB/s: 181.99 |
使用dd生成文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | dd if=/dev/zero of=/tmp/tmpfile bs=1M count=10240 -- HDD [root@HF-Server80 tmp]# dd if=/dev/zero of=/tmp/tmpfile bs=1M count=10240 10240+0 records in 10240+0 records out 10737418240 bytes (11 GB) copied, 51.0785 s, 210 MB/s [root@localhost bin]# dd if=/dev/zero of=/tmp/tmpfile bs=1M count=10240 10240+0 records in 10240+0 records out 10737418240 bytes (11 GB) copied, 10.6654 s, 1.0 GB/s -- SSD [root@lhrxxt tmp]# dd if=/dev/zero of=/tmp/tmpfile bs=1M count=10240 10240+0 records in 10240+0 records out 10737418240 bytes (11 GB) copied, 4.56714 s, 2.4 GB/s [root@hdw1 tmp]# dd if=/dev/zero of=/tmp/tmpfile bs=1M count=10240 10240+0 records in 10240+0 records out 10737418240 bytes (11 GB) copied, 6.33138 s, 1.7 GB/s |
实例
HDD
1 2 3 4 5 6 7 8 9 10 11 | [root@lhrxxt ~]# lsblk -d -o name,rota NAME ROTA sdb 1 sdc 1 sda 1 [root@lhrxxt ~]# grep ^ /sys/block/sd*/queue/rotational /sys/block/sda/queue/rotational:1 /sys/block/sdb/queue/rotational:1 /sys/block/sdc/queue/rotational:1 [root@lhrxxt ~]# smartctl -a /dev/sda | grep 'Rotation Rate' [root@lhrxxt ~]# |
SSD
1 2 3 4 5 6 7 8 9 10 11 | [root@hdw1 ~]# grep ^ /sys/block/sd*/queue/rotational /sys/block/sda/queue/rotational:0 /sys/block/sdb/queue/rotational:0 [root@hdw1 ~]# lsblk -d -o name,rota NAME ROTA sda 0 sdb 0 sr0 1 [root@hdw1 ~]# smartctl -a /dev/sda | grep 'Rotation Rate' Rotation Rate: Solid State Device [root@hdw1 ~]# |
区分是否U盘
命令1:cat /sys/block/sda/removable
解析:removable就是可移除的意思,用上面的命令进行查看该文件。如果是0就代表不可移除,说明不是U盘;如果等于1就说明可以移除,是U盘。
1 2 3 | [root@lhrdocker ~]# grep ^ /sys/block/sd*/removable /sys/block/sda/removable:0 /sys/block/sdb/removable:0 |
命令2:readlink /sys/block/sda | grep -q "usb"
readlink 是查找链接指向的文件,可以用这个指令去查看/sys/block/目录下的设备,返回的结果中就有表示接口类型的字段。上面这条指令就是查找USB接口类型的硬盘,也就是U盘。
总结
1、我的笔记本电脑都是ssd盘,安装了WSL2,在WSL2上检查却是HDD的格式。
2、