Linux系统之hdparm命令的基本使用
一、hdparm命令介绍
hdparm 是一个用于获取和设置硬盘参数的命令行工具,在Linux系统中广泛使用。它能与IDE、SATA等类型的硬盘进行交互,并提供多种功能,例如查看硬盘信息、测试读写速度、修改硬盘配置等。
二、hdparm命令的使用帮助
2.1 hdparm命令的help帮助
本次实践在Rocky Linux 9.4 系统中,我们在命令行终端中,使用
-h
选项查询hdparm命令的基本帮助信息。
2.2 hdparm命令帮助解释
用法:
hdparm [选项] [设备 ...]
选项:
选项 | 描述 |
---|---|
-a |
获取/设置文件系统读取预读值 |
-A |
获取/设置磁盘前瞻标志 (0/1) |
-b |
获取/设置总线状态 (0 == 关闭, 1 == 开启, 2 == 三态) |
-B |
设置高级电源管理配置 (1-255) |
-c |
获取/设置IDE 32位IO配置 |
-C |
检查磁盘电源模式状态 |
-d |
获取/设置使用DMA标志 |
-D |
启用/禁用磁盘缺陷管理 |
-E |
设置光驱速度 |
-f |
退出时刷新设备的缓冲区缓存 |
-F |
刷新磁盘写入缓存 |
-g |
显示磁盘几何结构 |
-h |
显示简短的使用信息 |
-H |
从磁盘读取温度 (仅适用于日立磁盘) |
-i |
显示磁盘识别信息 |
-I |
直接从磁盘获取详细/当前信息 |
-J |
获取/设置西部数据“Green”系列硬盘的Idle3超时时间 (危险) |
-k |
获取/设置保持设置在复位后的标志 (0/1) |
-K |
设置磁盘保持特性在复位后的标志 (0/1) |
-L |
设置磁盘门锁 (0/1) (仅限可移动硬盘) |
-m |
获取/设置多扇区计数 |
-M |
获取/设置声学管理 (0-254, 128: 安静, 254: 快速) |
-n |
获取/设置忽略写入错误标志 (0/1) |
-N |
获取/设置最大可见扇区数量 (HPA) (非常危险) |
-p |
在IDE接口芯片组上设置PIO模式 (0,1,2,3,4,…) |
-P |
设置磁盘预取计数 |
-q |
静默更改下一个设置 |
-Q |
获取/设置DMA队列深度 (如果支持的话) |
-r |
获取/设置设备只读标志 (设置为只读有风险) |
-R |
获取/设置设备写读验证标志 |
-s |
设置开机进入待机标志 (0/1) (危险) |
-S |
设置待机(自旋降速)超时 |
-t |
执行设备读取计时 |
-T |
执行缓存读取计时 |
-u |
获取/设置不屏蔽IRQ标志 (0/1) |
-U |
已废弃 |
-v |
使用默认设置;对于IDE磁盘等同于-acdgkmur |
-V |
显示程序版本并立即退出 |
-w |
执行设备重置 (危险) |
-W |
获取/设置磁盘写缓存标志 (0/1) |
-x |
已废弃 |
-X |
设置IDE传输模式 (危险) |
-y |
将磁盘置于待机模式 |
-Y |
将磁盘置于睡眠模式 |
-z |
重新读取分区表 |
-Z |
禁用希捷自动省电模式 |
- 高级选项:
选项 | 描述 |
---|---|
--dco-freeze |
冻结/锁定当前设备配置直到下次重启 |
--dco-identify |
读取/转储设备配置识别数据 |
--dco-restore |
将设备配置重置为出厂默认 |
--dco-setmax |
使用DCO设置最大可寻址扇区 |
--direct |
使用O_DIRECT绕过页面缓存进行计时 |
--drq-hsm-error |
使系统崩溃出现"卡住的DRQ"错误 (非常危险) |
--fallocate |
创建一个文件而不将数据写入磁盘 |
--fibmap |
显示文件的设备范围(及碎片) |
--fwdownload |
下载固件文件到磁盘 (极其危险) |
--fwdownload-mode3 |
使用最小尺寸段下载固件 (极其危险) |
--fwdownload-mode3-max |
使用最大尺寸段下载固件 (极其危险) |
--fwdownload-mode7 |
使用单个段下载固件 (极其危险) |
--fwdownload-modee |
使用模式E (最小尺寸段)下载固件 (极其危险) |
--fwdownload-modee-max |
使用模式E (最大尺寸段)下载固件 (极其危险) |
--idle-immediate |
立即闲置磁盘 |
--idle-unload |
立即闲置并卸载磁头 |
--Iraw filename |
将原始二进制识别数据写入指定文件 |
--Istdin |
从标准输入读取ASCII十六进制的识别数据 |
--Istdout |
将ASCII十六进制的识别数据写入标准输出 |
--make-bad-sector |
故意破坏媒体上的一个扇区 (非常危险) |
--offset |
与-t一起使用,在给定偏移量处开始计时 (以GiB为单位) |
--prefer-ata12 |
尽可能使用12字节(而非16字节)SAT命令 |
--read-sector |
从媒体直接读取并以十六进制转储一个扇区 |
--repair-sector |
–write-sector选项的别名 (非常危险) |
--sanitize-antifreeze-lock |
阻止直到下一次重启前的擦除冻结锁定命令 |
--sanitize-block-erase |
开始块擦除操作 |
--sanitize-crypto-scramble |
更改用于数据加密的内部密钥 |
--sanitize-freeze-lock |
锁定直到下一次重启前的磁盘擦除功能 |
--sanitize-overwrite PATTERN |
用常量模式覆盖内部媒体 |
--sanitize-status |
显示擦除状态信息 |
--security-help |
显示ATA安全命令帮助 |
--set-sector-size |
改变磁盘逻辑扇区大小 |
--trim-sector-ranges |
告知SSD固件丢弃不需要的数据扇区: lba:count … |
--trim-sector-ranges-stdin |
同上,但从标准输入读取lba:count对 |
--verbose |
显示某些命令的额外诊断信息 |
--write-sector |
修复/覆盖媒体上的一个(可能是坏的)扇区 (非常危险) |
三、hdparm命令的基本使用
3.1 显示硬盘运行参数
显示或配置硬盘的某些运行时参数,如读取提前量、多块读写等。此命令输出反映了硬盘当前的一些运行时参数和特性,这些设置可以影响硬盘的性能和操作方式。例如,调整
readahead
和multcount
的值可以在某些工作负载下优化硬盘的响应时间和吞吐量。
参数 | 值 | 解释 |
---|---|---|
multcount | 1 (on) | 多块读写功能已开启,设置为一次传输1个扇区。这可以提高连续读写操作的效率。 |
readonly | 0 (off) | 硬盘不是只读模式,允许进行写入操作。 |
readahead | 256 (on) | 读取提前量设置为256个扇区,即当一个请求被发出时,系统会预读256个扇区的数据到缓存中,以提高读取速度。 |
geometry | 14593/255/63, sectors = 234441648, start = 0 | 硬盘的几何结构是14593个磁道/柱面、255个磁头、63个扇区/磁道;总共有234,441,648个扇区,起始扇区编号为0。 |
3.2 显示硬盘详细信息
使用-I选项,获取并显示硬盘的详细硬件信息,包括其能力、配置和规格。通过这些信息可以了解硬盘的支持功能、性能特点以及安全性等多方面内容。
- 硬盘基本信息
参数 | 值 |
---|---|
模型编号 | KINGSTON SV300S37A120G |
序列号 | 50026B786301A47A |
固件版本 | 608ABBF0 |
传输协议 | Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0 |
- 标准支持
参数 | 值 |
---|---|
使用标准 | 未知 (次要修订代码 0x0110) |
支持的标准 | 8, 7, 6, 5 |
可能使用的标准 | 8 |
- 配置信息
参数 | 最大值 | 当前值 |
---|---|---|
圆柱数(Cylinders) | 16383 | 16383 |
磁头数(Heads) | 16 | 16 |
扇区/磁道(Sectors/Track) | 63 | 63 |
CHS当前可寻址扇区数 | 16514064 | - |
LBA用户可寻址扇区数 | - | 234441648 |
LBA48用户可寻址扇区数 | - | 234441648 |
逻辑扇区大小 | - | 512 字节 |
物理扇区大小 | - | 512 字节 |
扇区0偏移量 | - | 0 字节 |
设备容量(M = 1024*1024) | - | 114473 MB |
设备容量(M = 1000*1000) | - | 120034 MB (120 GB) |
缓存/缓冲区大小 | - | 未知 |
名义介质旋转速率 | Solid State Device |
- 功能能力
功能 | 支持情况 |
---|---|
LBA | 支持 |
IORDY(can be disabled) | 支持 |
队列深度 | 32 |
多扇区读写转移最大值 | 1 |
多扇区读写转移当前值 | 1 |
高级电源管理级别 | 254 |
DMA | mdma0, mdma1, mdma2, udma0, udma1, udma2, udma3, udma4, *udma5, udma6 |
PIO | pio0, pio1, pio2, pio3, pio4 |
- 命令/特性
特性 | 是否启用 | 支持情况 |
---|---|---|
SMART特性集 | 是 | 支持 |
安全模式特性集 | 否 | 支持 |
电源管理特性集 | 是 | 支持 |
写缓存 | 是 | 支持 |
Look-ahead | 否 | 支持 |
主机保护区域特性集 | 是 | 支持 |
WRITE_BUFFER命令 | 是 | 支持 |
READ_BUFFER命令 | 是 | 支持 |
NOP命令 | 是 | 支持 |
下载微码 | 是 | 支持 |
高级电源管理特性集 | 是 | 支持 |
上电时待机特性集 | 否 | 支持 |
SET_FEATURES需要上电后自旋 | 是 | 支持 |
SET_MAX安全扩展 | 否 | 支持 |
48位地址特性集 | 是 | 支持 |
强制FLUSH_CACHE | 是 | 支持 |
FLUSH_CACHE_EXT | 是 | 支持 |
SMART错误日志 | 是 | 支持 |
SMART自检 | 是 | 支持 |
通用目的日志特性集 | 是 | 支持 |
WRITE_DMA_FUA_EXT/GPL | 是 | 支持 |
64位全球唯一名称 | 是 | 支持 |
IDLE_IMMEDIATE带UNLOAD | 是 | 支持 |
写-读验证特性集 | 否 | 支持 |
分段下载微码 | 是 | 支持 |
Gen1信号速度(1.5Gb/s) | 是 | 支持 |
Gen2信号速度(3.0Gb/s) | 是 | 支持 |
Gen3信号速度(6.0Gb/s) | 是 | 支持 |
原生命令队列(NCQ) | 是 | 支持 |
物理事件计数器 | 是 | 支持 |
NCQ优先级信息 | 是 | 支持 |
DMA设置自动激活优化 | 否 | 支持 |
设备发起的接口电源管理 | 否 | 支持 |
软件设置保存 | 是 | 支持 |
SMART命令传输(SCT)特性集 | 是 | 支持 |
SCT Write Same (AC2) | 是 | 支持 |
SCT Data Tables (AC5) | 是 | 支持 |
DOWNLOAD MICROCODE DMA命令 | 是 | 支持 |
SET MAX SETPASSWORD/UNLOCK DMA命令 | 是 | 支持 |
WRITE BUFFER DMA命令 | 是 | 支持 |
READ BUFFER DMA命令 | 是 | 支持 |
数据集管理TRIM支持 | 是 | 支持 |
- 安全信息
参数 | 值 |
---|---|
主密码修订代码 | 65534 |
支持增强擦除 | 是 |
SECURITY ERASE UNIT时间 | 2分钟 |
ENHANCED SECURITY ERASE UNIT时间 | 2分钟 |
- WWN设备标识符
参数 | 值 |
---|---|
NAA | 5 |
IEEE OUI | 0026b7 |
唯一ID | 86301a47a |
- 校验和
参数 | 值 |
---|---|
校验和 | 正确 |
3.3 检测硬盘的电源管理模式
检测硬盘的电源管理模式:
3.4 测试硬盘读取速度
要测试硬盘的非缓存读取性能(即直接从磁盘读取数据的速度),可以使用 -t 选项。如果想要同时测试缓存读取性能,可以加上 -T 选项:
测试类型 | 传输量 | 时间 | 平均速度 |
---|---|---|---|
缓存读取测试 (Cached Reads) | 10402 MB | 2.00 秒 | 5207.48 MB/秒 |
带缓冲的磁盘读取测试 (Buffered Disk Reads) | 108 MB | 3.03 秒 | 35.70 MB/秒 |
解释
:
缓存读取测试 (Cached Reads): 这个测试测量的是操作系统或硬盘控制器的缓存(即内存中的高速缓存)的读取速度。由于数据是从缓存中读取的,因此这个速度通常非常快,反映了系统缓存或内存的速度,而不是实际硬盘介质的速度。
带缓冲的磁盘读取测试 (Buffered Disk Reads): 这个测试测量的是从硬盘介质直接读取数据的速度,使用了操作系统级别的读取缓冲。这个速度更能反映硬盘的实际读取性能。
四、 其他操作
4.1设置硬盘多重扇区存取的扇区数
为了增进硬盘的存取效率,可以通过设置多重扇区存取(multi-sector I/O)的扇区数来实现。这允许硬盘一次性读写多个连续的扇区,从而提升性能。
查询当前设置
设置新的多重扇区数
假设想要设置8个扇区作为一个单元进行读写操作:
注意: 应根据实际情况调整扇区数值,并非所有硬盘都支持修改此参数,且不同的硬盘最佳值可能不同。
4.2 硬盘坏道修复方法
检查硬盘自检结果
首先,我们需要确保硬盘支持SMART功能,并查看是否有任何已知的问题或错误记录。
卸载受影响的分区
在尝试修复之前,请先卸载所有与该磁盘关联的分区,以避免数据损坏的风险。
执行坏块扫描并标记不可用的扇区
最后一步是运行 badblocks
工具来查找并标记坏道,防止它们被文件系统使用。
警告:
badblocks
工具不能真正“修复”物理坏道;它只能检测到这些坏道并将它们标记为不可用。对于严重的硬件故障,应该考虑更换磁盘。
提示: 如果需要将找到的坏道信息整合进现有的文件系统中,可以结合
fsck
使用。例如,对于ext4文件系统,可以使用如下命令:
其中
/dev/sdaX
是具体的分区名称。
请根据自己的具体环境和需求调整上述命令中的设备名 (/dev/sda
) 和其他参数。此外,在执行任何可能导致数据丢失的操作前,请务必做好重要数据的备份工作。
四、总结
谨慎修改硬盘参数:更改硬盘的配置参数可能会对系统稳定性和数据安全性造成影响,因此在调整设置之前请确保了解其含义。
备份重要数据:在执行任何可能影响硬盘性能或结构的命令前,请先备份所有重要数据以防万一。
查阅官方文档:对于不熟悉的选项或功能,应查阅
hdparm
的官方文档或手册页(man page),以获取准确的帮助信息。避免在生产环境中随意测试:不要在生产环境或含有关键业务数据的服务器上随意尝试未经验证的
hdparm
命令,以免引发意外问题。注意权限要求:大多数
hdparm
命令需要超级用户权限才能执行,因此通常需要使用sudo
或者以root用户身份运行。监控系统响应:在调整硬盘参数后,密切监控系统的响应情况,确保没有负面效应,并根据实际情况进行必要的调整。
考虑硬件兼容性:不同的硬盘型号可能支持不同的特性集,在使用特定功能前确认您的硬盘是否支持该功能。