Linux系统之hdparm命令的基本使用)
一、hdparm命令介绍
hdparm 是一个用于获取和设置硬盘参数的命令行工具,在Linux系统中广泛使用。它能与IDE、SATA等类型的硬盘进行交互,并提供多种功能,例如查看硬盘信息、测试读写速度、修改硬盘配置等。
二、hdparm命令的使用帮助
2.1 hdparm命令的help帮助
本次实践在Rocky Linux 9.4 系统中,我们在命令行终端中,使用
-h
选项查询hdparm命令的基本帮助信息。
[root@RockyLinux-server001 ~]# hdparm -h
hdparm - get/set hard disk parameters - version v9.62, by Mark Lord.
Usage: hdparm [options] [device ...]
Options:
-a Get/set fs readahead
-A Get/set the drive look-ahead flag (0/1)
-b Get/set bus state (0 == off, 1 == on, 2 == tristate)
-B Set Advanced Power Management setting (1-255)
-c Get/set IDE 32-bit IO setting
-C Check drive power mode status
-d Get/set using_dma flag
-D Enable/disable drive defect management
-E Set cd/dvd drive speed
-f Flush buffer cache for device on exit
-F Flush drive write cache
-g Display drive geometry
-h Display terse usage information
-H Read temperature from drive (Hitachi only)
-i Display drive identification
-I Detailed/current information directly from drive
-J Get/set Western DIgital "Idle3" timeout for a WDC "Green" drive (DANGEROUS)
-k Get/set keep_settings_over_reset flag (0/1)
-K Set drive keep_features_over_reset flag (0/1)
-L Set drive doorlock (0/1) (removable harddisks only)
-m Get/set multiple sector count
-M Get/set acoustic management (0-254, 128: quiet, 254: fast)
-n Get/set ignore-write-errors flag (0/1)
-N Get/set max visible number of sectors (HPA) (VERY DANGEROUS)
-p Set PIO mode on IDE interface chipset (0,1,2,3,4,...)
-P Set drive prefetch count
-q Change next setting quietly
-Q Get/set DMA queue_depth (if supported)
-r Get/set device readonly flag (DANGEROUS to set)
-R Get/set device write-read-verify flag
-s Set power-up in standby flag (0/1) (DANGEROUS)
-S Set standby (spindown) timeout
-t Perform device read timings
-T Perform cache read timings
-u Get/set unmaskirq flag (0/1)
-U Obsolete
-v Use defaults; same as -acdgkmur for IDE drives
-V Display program version and exit immediately
-w Perform device reset (DANGEROUS)
-W Get/set drive write-caching flag (0/1)
-x Obsolete
-X Set IDE xfer mode (DANGEROUS)
-y Put drive in standby mode
-Y Put drive to sleep
-z Re-read partition table
-Z Disable Seagate auto-powersaving mode
--dco-freeze Freeze/lock current device configuration until next power cycle
--dco-identify Read/dump device configuration identify data
--dco-restore Reset device configuration back to factory defaults
--dco-setmax Use DCO to set maximum addressable sectors
--direct Use O_DIRECT to bypass page cache for timings
--drq-hsm-error Crash system with a "stuck DRQ" error (VERY DANGEROUS)
--fallocate Create a file without writing data to disk
--fibmap Show device extents (and fragmentation) for a file
--fwdownload Download firmware file to drive (EXTREMELY DANGEROUS)
--fwdownload-mode3 Download firmware using min-size segments (EXTREMELY DANGEROUS)
--fwdownload-mode3-max Download firmware using max-size segments (EXTREMELY DANGEROUS)
--fwdownload-mode7 Download firmware using a single segment (EXTREMELY DANGEROUS)
--fwdownload-modee Download firmware using mode E (min-size segments) (EXTREMELY DANGEROUS)
--fwdownload-modee-max Download firmware using mode E (max-size segments) (EXTREMELY DANGEROUS)
--idle-immediate Idle drive immediately
--idle-unload Idle immediately and unload heads
--Iraw filename Write raw binary identify data to the specfied file
--Istdin Read identify data from stdin as ASCII hex
--Istdout Write identify data to stdout as ASCII hex
--make-bad-sector Deliberately corrupt a sector directly on the media (VERY DANGEROUS)
--offset use with -t, to begin timings at given offset (in GiB) from start of drive
--prefer-ata12 Use 12-byte (instead of 16-byte) SAT commands when possible
--read-sector Read and dump (in hex) a sector directly from the media
--repair-sector Alias for the --write-sector option (VERY DANGEROUS)
--sanitize-antifreeze-lock Block sanitize-freeze-lock command until next power cycle
--sanitize-block-erase Start block erase operation
--sanitize-crypto-scramble Change the internal encryption keys that used for used data
--sanitize-freeze-lock Lock drive's sanitize features until next power cycle
--sanitize-overwrite PATTERN Overwrite the internal media with constant PATTERN
--sanitize-status Show sanitize status information
--security-help Display help for ATA security commands
--set-sector-size Change logical sector size of drive
--trim-sector-ranges Tell SSD firmware to discard unneeded data sectors: lba:count ..
--trim-sector-ranges-stdin Same as above, but reads lba:count pairs from stdin
--verbose Display extra diagnostics from some commands
--write-sector Repair/overwrite a (possibly bad) sector directly on the media (VERY DANGEROUS)
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
的值可以在某些工作负载下优化硬盘的响应时间和吞吐量。
[root@server ~]# hdparm /dev/sda
/dev/sda:
multcount = 1 (on)
readonly = 0 (off)
readahead = 256 (on)
geometry = 14593/255/63, sectors = 234441648, start = 0
参数 | 值 | 解释 |
---|---|---|
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选项,获取并显示硬盘的详细硬件信息,包括其能力、配置和规格。通过这些信息可以了解硬盘的支持功能、性能特点以及安全性等多方面内容。
[root@server ~]# hdparm -I /dev/sda
/dev/sda:
ATA device, with non-removable media
Model Number: KINGSTON SV300S37A120G
Serial Number: 50026B786301A47A
Firmware Revision: 608ABBF0
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0
Standards:
Used: unknown (minor revision code 0x0110)
Supported: 8 7 6 5
Likely used: 8
Configuration:
Logical max current
cylinders 16383 16383
heads 16 16
sectors/track 63 63
--
CHS current addressable sectors: 16514064
LBA user addressable sectors: 234441648
LBA48 user addressable sectors: 234441648
Logical Sector size: 512 bytes
Physical Sector size: 512 bytes
Logical Sector-0 offset: 0 bytes
device size with M = 1024*1024: 114473 MBytes
device size with M = 1000*1000: 120034 MBytes (120 GB)
cache/buffer size = unknown
Nominal Media Rotation Rate: Solid State Device
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, with device specific minimum
R/W multiple sector transfer: Max = 1 Current = 1
Advanced power management level: 254
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5 udma6
Cycle time: min=120ns recommended=120ns
PIO: pio0 pio1 pio2 pio3 pio4
Cycle time: no flow control=120ns IORDY flow control=120ns
Commands/features:
Enabled Supported:
* SMART feature set
Security Mode feature set
* Power Management feature set
* Write cache
Look-ahead
* Host Protected Area feature set
* WRITE_BUFFER command
* READ_BUFFER command
* NOP cmd
* DOWNLOAD_MICROCODE
* Advanced Power Management feature set
Power-Up In Standby feature set
* SET_FEATURES required to spinup after power up
SET_MAX security extension
* 48-bit Address feature set
* Mandatory FLUSH_CACHE
* FLUSH_CACHE_EXT
* SMART error logging
* SMART self-test
* General Purpose Logging feature set
* WRITE_{
DMA|MULTIPLE}_FUA_EXT
* 64-bit World wide name
* IDLE_IMMEDIATE with UNLOAD
Write-Read-Verify feature set
* {
READ,WRITE}_DMA_EXT_GPL commands
* Segmented DOWNLOAD_MICROCODE
unknown 119[6]
* Gen1 signaling speed (1.5Gb/s)
* Gen2 signaling speed (3.0Gb/s)
* Gen3 signaling speed (6.0Gb/s)
* Native Command Queueing (NCQ)
* Phy event counters
* NCQ priority information
* unknown 76[15]
DMA Setup Auto-Activate optimization
Device-initiated interface power management
Software settings preservation
* SMART Command Transport (SCT) feature set
* SCT Write Same (AC2)
* SCT Data Tables (AC5)
* reserved 69[3]
* DOWNLOAD MICROCODE DMA command
* SET MAX SETPASSWORD/UNLOCK DMA commands
* WRITE BUFFER DMA command
* READ BUFFER DMA command
* Data Set Management TRIM supported (limit 1 block)
Security:
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 50026b786301a47a
NAA : 5
IEEE OUI : 0026b7
Unique ID : 86301a47a
Checksum: correct
- 硬盘基本信息
参数 | 值 |
---|---|
模型编号 | 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 检测硬盘的电源管理模式
检测硬盘的电源管理模式:
[root@RockyLinux-server001 ~]# hdparm -C /dev/sda
/dev/sda:
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
drive state is: standby [省电模式]
3.4 测试硬盘读取速度
要测试硬盘的非缓存读取性能(即直接从磁盘读取数据的速度),可以使用 -t 选项。如果想要同时测试缓存读取性能,可以加上 -T 选项:
[root@server ~]# hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads: 10402 MB in 2.00 seconds = 5207.48 MB/sec
Timing buffered disk reads: 108 MB in 3.03 seconds = 35.70 MB/sec
测试类型 | 传输量 | 时间 | 平均速度 |
---|---|---|---|
缓存读取测试 (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)的扇区数来实现。这允许硬盘一次性读写多个连续的扇区,从而提升性能。
查询当前设置
sudo hdparm -m /dev/sda
设置新的多重扇区数
假设想要设置8个扇区作为一个单元进行读写操作:
sudo hdparm -m 8 /dev/sda
注意: 应根据实际情况调整扇区数值,并非所有硬盘都支持修改此参数,且不同的硬盘最佳值可能不同。
4.2 硬盘坏道修复方法
检查硬盘自检结果
首先,我们需要确保硬盘支持SMART功能,并查看是否有任何已知的问题或错误记录。
sudo smartctl -l selftest /dev/sda
卸载受影响的分区
在尝试修复之前,请先卸载所有与该磁盘关联的分区,以避免数据损坏的风险。
sudo umount /dev/sda*
执行坏块扫描并标记不可用的扇区
最后一步是运行 badblocks
工具来查找并标记坏道,防止它们被文件系统使用。
sudo badblocks -v /dev/sda > bad-sectors.log
警告:
badblocks
工具不能真正“修复”物理坏道;它只能检测到这些坏道并将它们标记为不可用。对于严重的硬件故障,应该考虑更换磁盘。
提示: 如果需要将找到的坏道信息整合进现有的文件系统中,可以结合
fsck
使用。例如,对于ext4文件系统,可以使用如下命令:sudo fsck.ext4 -l bad-sectors.log /dev/sdaX
其中
/dev/sdaX
是具体的分区名称。
请根据自己的具体环境和需求调整上述命令中的设备名 (/dev/sda
) 和其他参数。此外,在执行任何可能导致数据丢失的操作前,请务必做好重要数据的备份工作。
四、总结
-
谨慎修改硬盘参数:更改硬盘的配置参数可能会对系统稳定性和数据安全性造成影响,因此在调整设置之前请确保了解其含义。
-
备份重要数据:在执行任何可能影响硬盘性能或结构的命令前,请先备份所有重要数据以防万一。
-
查阅官方文档:对于不熟悉的选项或功能,应查阅
hdparm
的官方文档或手册页(man page),以获取准确的帮助信息。 -
避免在生产环境中随意测试:不要在生产环境或含有关键业务数据的服务器上随意尝试未经验证的
hdparm
命令,以免引发意外问题。 -
注意权限要求:大多数
hdparm
命令需要超级用户权限才能执行,因此通常需要使用sudo
或者以root用户身份运行。 -
监控系统响应:在调整硬盘参数后,密切监控系统的响应情况,确保没有负面效应,并根据实际情况进行必要的调整。
-
考虑硬件兼容性:不同的硬盘型号可能支持不同的特性集,在使用特定功能前确认您的硬盘是否支持该功能。