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

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


评论

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

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

如何检查我的Ubuntu是否放置在SSD上?

#1 楼

Linux自动检测SSD,并且从2.6.29内核版本开始,您可以使用以下命令验证sda

1用于硬盘,0用于SSD。

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

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

评论


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

– PythoNic
2014年7月23日在10:55



@totor最好在其他帖子上添加此评论。我不知道他/她的内核版本:)

– PythoNic
2014年9月4日13:21在

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

–永恒
16年6月30日在16:18

在虚拟服务器上,您可能需要获取/ sys / block / vda / queue / rotational

–单线程
16年11月8日在21:45

@Ferrybig只有NVME格式的SSD,而不是HDD(除非您从NVME插槽到普通SATA电缆确实有一些奇怪的分线适配器)。但不能确定,即使是通过NVME的SATA SSD在Linux上也可以显示为NVME,也可以显示为普通的sdX。

– Marki555
19/12/3在9:20

#2 楼

使用lsblkutil-linux软件包的一部分):

lsblk -d -o name,rota


NAME ROTA
sda     0
sdb     0
sdc     1


其中ROTA表示rotational device(如果为true,则为1;如果为false,则为0

评论


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

– dma_k
15年10月20日在10:45

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

–用户
16年5月13日在16:30

实际上,我正在研究各种方法,因为某些USB控制器没有告诉驱动器实际上是非旋转的(例如USB闪存),并且Linux中没有办法说出真相。归根结底,我通过在/etc/udev/rules.d/90-non-rotational.rules中创建显式规则来解决此问题:ACTION ==“ add | change”,SUBSYSTEMS ==“ usb”,ENV {ID_SERIAL} ==“ SanDisk_Ultra_Fit _ *-0:0”,ATTR {队列/旋转} =“ 0”,ATTR {队列/调度器} =“截止日期”

– dma_k
16年6月8日在18:01

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

–tuk0z
16 Sep 14 '20:45



这对我来说效果最好,但其中包括冗余/不需要的循环设备(例如,由于Ubuntu快照)。略有改进是:lsblk -d -e 7 -o名称,ROTA,DISC-MAX,MODEL,其中不包括回路设备+添加了型号名称(制造商)和磁盘容量。

–arielf
20 Jan 28'在16:01



#3 楼

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

sudo smartctl -a /dev/sdb

如果看到这样的行,

Rotation Rate: Solid State Device

那将是SSD驱动器。

#4 楼

我需要在VPS上执行此操作,但没有提供的解决方案对我有用。 / how-do-i-verify-my-hosting-provider-gave-me-sssds / 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


和HDD

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


评论


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

–the_nuts
16年4月10日在10:48

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

–itoctopus
16-6-10下午4:57

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

–trr
16年8月16日在1:40



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

– qqibrow
18-10-3在20:46

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

–vidarlo
19年2月9日在22:45

#5 楼

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

评论


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

–ron
18年8月16日在17:50

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

–有动力
18/12/28在5:03

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

–ron
19年1月3日在22:29

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

–ron
19年1月3日在22:33



#6 楼

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

评论


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

–马特
13年2月21日在9:41

#7 楼

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

sg_vpd --page=bdc /dev/sda


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

评论


+1。很好,但是在我的机器上运行(老化并且很快将要更换),WD Greens说没有报告中等旋转速度。 hdparm和smartmonctl表示相同。我想WD不想说。

–cas
16年8月4日在13:41

sg_vpd -i可能更有用,至少它可以提供驱动器上的供应商信息。不能对团队进行突袭。

–戴尔
19年1月11日在16:30

#8 楼

在您的Linux终端中键入以下内容:

cat /proc/scsi/scsi


像我的一样:

$ cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST1000LM024 HN-M Rev: 0004
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: SAMSUNG SSD PM83 Rev: 3D1Q
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: HL-DT-ST Model: DVD+-RW GT80N    Rev: A103
  Type:   CD-ROM                           ANSI  SCSI revision: 05


您可以看到的型号您的硬盘驱动器是SSD还是HHD。

评论


这似乎仅显示ATA / SCSI块设备,而其他诸如NVMe SSD则不显示。

–arielf
20年1月27日在22:36

如果磁盘位于RAID控制器后面,则只会看到RAID控制器,例如Vendor:LSI Model:SMC3108 Rev:4.27

–ron
20年1月28日在22:01

#9 楼

find /sys/block/* -maxdepth 1 -exec echo {} \; -exec grep '0' {}/queue/rotational \; | grep -B1 '^0' | grep '^/' | sed 's/^.*\///g'


这将搜索所有块设备,并检查其是否为旋转式(1);如果不是(0),则为ssd。

仅显示标记为ssd的光盘。

评论


阿久特| grep -v'loop'dans la commande倒入忽略者文件“块设备”,例如:对于$ {sind / sys / block / *中的SsDrive,-maxdepth 1 -exec echo {} \; -exec grep'0'{} /队列/旋转\; | grep -v'loop'| grep -B1'^ 0'| grep'^ /'| sed's /^.*\/// g');确实找到/ dev / -name $ SsDrive [0-9];完成

–user515185
20 Jan 28 '21:50



昨天翻译后,我注意到您以前回滚了尝试的翻译。请注意,本网站上的答案应为英文。谢谢!

– Jeff Schaller♦
20年1月30日在17:56

新增| grep -v在命令行上“循环”以忘记循环(虚拟块设备),例如:对于$ {sind / sys / block / *中的SsDrive -maxdepth 1 -exec echo {} \; -exec grep'0'{ } / queue / rotational \; | grep -v'loop'| grep -B1'^ 0'| grep'^ /'| sed's /^.*\/// g');确实找到/ dev / -name $ SsDrive [0-9];完成

–user515185
20 Jan 30'21:20