如何知道磁盘是SSD还是HDD


193

我想知道磁盘是固态驱动器还是硬盘。

lshw未安装。我这样做yum install lshw,它说没有名为lshw的软件包。我不知道哪个版本的http://pkgs.repoforge.org/lshw/适用于我的CentOS。

我在网上搜索,没有任何内容可以解释如何知道驱动器是SSD还是HDD。我应该先格式化它们吗?

结果fdisk -l

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

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          14      103424   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              14         536     4194304   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             536       14594   112921600   83  Linux

Disk /dev/sdc: 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: 0x00000000


Disk /dev/sdb: 128.0 GB, 128035676160 bytes
255 heads, 63 sectors/track, 15566 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: 0x00000000


Disk /dev/sdd: 480.1 GB, 480103981056 bytes
255 heads, 63 sectors/track, 58369 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: 0x00000000

1
如果这确实是SSD,则可能需要重新格式化以将擦除块与分区对齐。
symcbean 2013年

SATA(串行ATA)是指驱动器的连接类型,并不意味着它是硬盘驱动器(HDD)。SSD可以同时是SATA,因此建议对标题进行编辑。
SpellingD

Answers:


309

Linux自动检测SSD,并且由于内核版本2.6.29,您可以sda使用以下命令进行验证:

cat /sys/block/sda/queue/rotational

您应该获得1硬盘和0SSD。

如果磁盘是由硬件(例如RAID控制器)仿真的逻辑设备,则可能无法正常工作。

有关更多信息,请参见此答案 ...


2
在Stackoverflow上,有人发现此系统信息无效。
PythoNic 2014年

@Totor我有两个磁盘,如何找出哪个是ssd?
user11498 2014年

2
@ user11498替换sdasdb,看看哪个是SSD ...
Totor

3
@Totor在“混合”驱动器中您是正确的。但是,双驱动器混合驱动器显示为两个单独的驱动器,其中SSHD(固态混合驱动器)显示为单个驱动器。因此,SSHD的旋转数为
1。– Terrance

6
在虚拟服务器上,您可能需要提取/sys/block/vda/queue/rotational
MonoThreaded,2016年

90

带有lsblkutil-linux包装的一部分):

lsblk -d -o名称,旋转
NAME ROTA
sda     0
sdb     0
sdc     1

哪里ROTA意味着rotational device1如果为true,0如果为false)


1
该实用程序似乎报告与中相同的信息/sys/block/.../rotational
dma_k 2015年

@dma_k毫不奇怪,考虑到似乎使用了那个。自己尝试:strace lsblk -d -o name,rota /dev/sda 2>&1 | grep --context=3 --color rotational
CVn

5
实际上,我正在研究各种方法,因为某些USB控制器没有告诉驱动器实际上是非旋转的(例如USB闪存),并且Linux中没有办法说出真相。归根结底,我通过在以下位置创建显式规则来解决该问题/etc/udev/rules.d/90-non-rotational.rulesACTION=="add|change", SUBSYSTEMS=="usb", ENV{ID_SERIAL}=="SanDisk_Ultra_Fit_*-0:0", ATTR{queue/rotational}="0", ATTR{queue/scheduler}="deadline"
dma_k

lsblk我所有的旧SATA旋转硬盘(ASROCK mobo)都报告为“ 0”。« 一些USB控制器不会告诉您驱动器实际上是非旋转的(例如USB闪存) »@dma_k这是真的,并且比USB有线外部旋转硬盘IMHA 的其他方法更好。
tuk0z

50

使用smartctl(通过安装进行安装smartmontools)来检索供应商信息,

sudo smartctl -a /dev/sdb

如果看到这样的一行,

Rotation Rate: Solid State Device

那将是一个SSD驱动器。


5
找不到smartctl命令
IgorGanapolsky '16

7
smartctl是软件包smartmontools的一部分
trr

27

我需要在VPS上执行此操作,但没有提供的解决方案对我有用,

这个答案确实有用

https://serverfault.com/questions/551453/how-do-i-verify-that-my-hosting-provider-gave-me-ssds/551495#551495

因此,这是关于从驱动器读取随机数据并评估时间。

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

这是我的SSD结果

real    0m1.375s
user    0m0.285s
sys     0m0.944s

和硬盘

real    0m14.249s
user    0m0.752s
sys     0m6.284s

我有一个非SSD,RAID10,我的结果是:实际0m1.351s-用户:0m0.307s-sys:0m0.560s
the_nuts

1
这是一个很好的答案,并且确实可以全面使用。问题是某些HDD速度非常快,结果可能类似于SSD。尽管如此,这个答案还是一个很好的指标。
itoctopus

1
在没有SSD的VPS上,此结果类似于您的SSD示例。我相信这可能会被“混合”(SSD缓存的HDD)设置愚弄。
trr

对我不起作用。我发现SSD和HDD产生相似的结果。
qqibrow

在VPS硬件上进行了虚拟化。您无法真正确定文件是存储在HDD上,被缓存还是存储在SSD上。
vidarlo

12

其他答案已经告诉您如何以多种方式获取此信息,包括/proc。但是,如果存在任何虚拟化方式(例如具有多层的混合SAN阵列),或者Linux机器是虚拟机(Linux可能会将磁盘报告为基本SCSI旋转磁盘),则您必须期望所有这些机制都存在,而不管硬件到底是什么)


这可能是更重要的响应之一……而且在BIOS或EFI / UEFI中,可能需要将SATA控制器模式设置为AHCI,然后还将BIOS中每个磁盘标记为SSD。我在家用PC上的华擎主板就是这样,不记得我在工作的服务器主板(超微)上是否有类似的东西,但是我没有在工作中使用SSD。
罗恩

@ron-将SATA控制器模式设置为AHCI是什么意思?如果设备是否为SSD,它将如何影响准确报告的能力?
动机

查找AHCI与IDE,第一次Web搜索中的措辞:IDE被认为适合普通计算机用户,并且与其他技术(尤其是较旧的设备)最兼容。但是,它缺乏支持新技术... AHCI提供了标准的系统设计人员和开发人员可以用它来配置,检测或程序SATA / AHCI适配器。*
罗恩

这是BIOS中的基本设置,在“存储”下的某个位置,可以选择IDE,AHCI,还可以根据RAID的型号/型号/年份来选择主板。在IDE基本上过时并且标准成为AHCI之后,SSD就问世了。例如,今天在计算机上安装Windows95时,它无法识别任何硬件...处于IDE模式肯定不会帮助与SSD通讯,但准确性不高,而仅仅是能够与基于AHCI协议的SATA控制器进行通信。
罗恩

9

检查cat /proc/scsi/scsi。在那里,您应该看到磁盘的确切型号。那么您只需在模型上搜索以找到有关它的信息。


1
dmesg将包含相同的信息。dmesg | grep -i -e scsi -e ata
马特

3

这是旧文章,但我想分享另一种方法,但我偶然发现了它:

sg_vpd --page=bdc /dev/sda

此命令获取块设备特性的重要产品数据。对于旋转磁头磁盘,输出将包括:标称转速:7200 rpm对于SSD,它将包括:非旋转介质(例如固态)


+1。不错,但可以在我的WD格林斯说(已老化且即将被替换)上运行Medium rotation rate is not reportedhdparmsmartmonctl说的一样。我想WD不想说。
cas

sg_vpd -i可能更有用,至少它可以提供驱动器上的供应商信息。对突袭无效,
戴尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.