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 显示硬盘运行参数

显示或配置硬盘的某些运行时参数,如读取提前量、多块读写等。此命令输出反映了硬盘当前的一些运行时参数和特性,这些设置可以影响硬盘的性能和操作方式。例如,调整readaheadmultcount的值可以在某些工作负载下优化硬盘的响应时间和吞吐量。

[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) 和其他参数。此外,在执行任何可能导致数据丢失的操作前,请务必做好重要数据的备份工作。

四、总结

  1. 谨慎修改硬盘参数:更改硬盘的配置参数可能会对系统稳定性和数据安全性造成影响,因此在调整设置之前请确保了解其含义。

  2. 备份重要数据:在执行任何可能影响硬盘性能或结构的命令前,请先备份所有重要数据以防万一。

  3. 查阅官方文档:对于不熟悉的选项或功能,应查阅hdparm的官方文档或手册页(man page),以获取准确的帮助信息。

  4. 避免在生产环境中随意测试:不要在生产环境或含有关键业务数据的服务器上随意尝试未经验证的hdparm命令,以免引发意外问题。

  5. 注意权限要求:大多数hdparm命令需要超级用户权限才能执行,因此通常需要使用sudo或者以root用户身份运行。

  6. 监控系统响应:在调整硬盘参数后,密切监控系统的响应情况,确保没有负面效应,并根据实际情况进行必要的调整。

  7. 考虑硬件兼容性:不同的硬盘型号可能支持不同的特性集,在使用特定功能前确认您的硬盘是否支持该功能。