Linux shell编程学习笔记42:hdparm命令

2024-01-26 00:04

本文主要是介绍Linux shell编程学习笔记42:hdparm命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ChatGPT 和文心一言哪个更好用?

从智能回复、语言准确性、知识库丰富度等方面比较,两大AI助手哪个更胜一筹?快来和我们分享一下你的看法吧~

0 前言

获取硬盘序列号是信息资产管理和信息安全检测中经常要收集的信息,对于Linux来说,获取硬盘序列号的方法不止一种,比如,我们可以使用上节介绍的lsblk命令来获取硬盘序列号,详见:银河麒麟桌面操作系统中获取硬盘序列号

再如,我们今天学习的hdparm命令也可以用来获取硬盘序列号。

1 hdparm命令的功能、格式

我们可以使用 hdparm --help命令查看 该命令的帮助信息。

purpleEndurer @ bash $ hdparm --help

hdparm - get/set hard disk parameters - version v9.48, 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
 --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)
 --security-help   Display help for ATA security commands
 --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)

1.1 hdparm 命令功能

获取或设置硬盘参数。

hdparm 源自 hard disk parameter。

1.2  hdparm 命令格式

hdparm [选项] [设备……]

注意:选项在前,设备在后。 

选项说明

选项描述
-a [分区数]获取/设置读取文件时,预先存入块区的分区数
-A禁用/启用驱动器读取文件时的快取功能(0/1)
-b获取/设置总线状态(0==关闭,1==打开,2==三态)
-B

设置高级电源管理APM设置(1-255)

要禁用APM,可以将值设置为255。

-c获取/设置IDE 32位 IO设置。32位可以通过PCI或VLB总线传输输入。
-C检查驱动器电源模式状态,标志-S,-Y,-y和-Z用于以熟练的方式控制IDE电源技术。
-d获取/设置设备的DMA标志using_dma状态
-D启用/禁用驱动器缺陷管理
-E设置cd/dvd驱动器速度
-f退出时刷新设备的缓冲区缓存,该选项可以与-t-T的一同使用。
-F刷新驱动器写缓存
-g显示驱动器的配置,驱动器的扩展以及设备从驱动器起始点的起始偏移量。
-h显示帮助信息并退出
-H从驱动器读取温度(仅限Hitachi)
-i显示开机时由设备本身所提供的信息(内核驱动的识别信息)
-I

直接显示来自设备的详细信息

比-i反馈的信息更多

-J获取/设置WDC“绿色”驱动器的Western DIgital“Idle3”超时(危险)
-k获取/设置keep_settings_over_reset标志(0/1)
-K设置驱动器keep_features_over_reset标志(0/1)
-L设置驱动器门锁(0/1)(仅限可移动硬盘)
-m

获取/设置驱动器上多个扇区I / O的扇区数。

要禁用此功能,可以将值设置为零。

-M获取/设置声音管理(0-254,128:安静,254:快速)
-n获取/设置ignore-write-errors标志(0/1)
-N获取/设置最大可见扇区数(HPA)(非常危险)
-p在IDE接口芯片组上设置PIO模式(0,1,2,3,4,...)
-P设置驱动器内部快取的分区数
-q悄悄地更改下一个设置(在执行后续的参数时,不在屏幕上显示任何信息)
-Q获取/设置DMA queue_depth(如果支持)
-r获取/设置设备只读标志(设置危险)
-R获取/设置设定硬盘进入省电模式前的等待时间
-s在待机标志中设置通电(0/1)(危险)
-S设置驱动器进入省电模式前的等待时间。
-t执行设备读取计时,从而获取硬盘的读取速度
-T执行缓存读取计时,从而获取硬盘的缓存读取速度
-u

获取/设置unmaskirq标志(0/1)

该标志设定了在硬盘存取时,是否允许其他中断要求同时执行

当值设置为1时,它用于获取/设置驱动器的中断 - 取消屏蔽标志,然后驱动程序可以取消屏蔽磁盘中断处理中发生的其他干预。

此选项可能导致巨大的文件系统损坏(非常危险)

-U已过时
-v使用默认值;与IDE驱动器的-acdgkmur相同
-V显示程序版本并立即退出
-w执行设备重置(危险)
-W

获取/设置驱动器写入缓存标志(0/1)

每个盘都有读取缓存和写入缓存,有时我们关闭磁盘写入缓存的效率高于开启磁盘写入缓存的效率,那当然选择前者了。

-x已过时
-X设置IDExfer模式(危险)
-y

将驱动器置于待机模式

它强制IDE驱动器立即进入低功耗待机模式,通常会导致它停止运转。可以使用-C标志检查当前的电源模式状态。

-Y

将驱动器置于睡眠状态

这会强制驱动器加压以中断进入低功耗睡眠模式,以便完全关闭它,这里可以在-C标志的帮助下检测当前的电源模式状态。

-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使用max-size段下载固件(极其危险)
--fwdownload-mode7使用单段下载固件(极其危险)
--fwdownload-modee使用模式E下载固件(最小尺寸段)(极其危险)
--fwdownload-modee-max使用模式E下载固件(最大大小段)(极其危险)
--idle-immediate立即空闲驱动器
--idle-unload立即空闲并卸载磁头
--Istdin读取将stdin中的数据识别为ASCII十六进制
--Istdout将标识数据写入stdout为ASCII十六进制
--make-bad-sector故意直接在媒体上腐败一个部门(非常危险)
--offset与-t一起使用,以从驱动器开始的给定偏移量(以GiB为单位)开始计时
--prefer-ata12尽可能使用12字节(而不是16字节)SAT命令
--read-sector直接从媒体读取和转储(十六进制)扇区
--repair-sector--write-sector选项的别名(非常危险)
--security-help显示ATA安全命令的帮助
--trim-sector-ranges告诉SSD固件丢弃不需要的数据扇区:lba:count
--trim-sector-ranges-stdin与上述相同,但从stdin读取
--verbose显示某些命令的额外诊断
--write-sector直接在介质上修复/覆盖(可能是坏的)扇区(非常危险)

如果使用命令时没用指定选项, 则默认选项为:acdgkmnru。 

2 hdparm命令使用实例

2.1 hdparm 设备:显示设备的基础信息

例 查看 设备 /dev/sdb 的基础信息:

purpleEndurer @ bash ~ $ hdparm /dev/sdb
/dev/sdb: Permission denied
purpleEndurer @ bash ~ $ sudo hdparm /dev/sdb


/dev/sdb:
 multcount     =  0 (off)  
 IO_support    =  1 (32-bit) 
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 121601/255/63, sectors = 1953525168, start = 0

当前帐户权限不够,不能直接执行hdparm命令。

只好使用sudo命令来执行。

命令返回的信息包括:

  • multcount     =  0 (off)            :一次读取的扇区数
  •  IO_support    =  1 (32-bit)     :IO模式为32位
  •  readonly      =  0 (off)            :只读标志为0,不处于只读状态
  •  readahead     = 256 (on)       :读取文件时,预先存入块区的分区数为256
  •  geometry      = 121601/255/63, sectors = 1953525168, start = 0 : geometry = 柱面数/ 磁头数/扇区数, sectors = 总扇区数, start = 起始扇区数

2.2 hdparm -a 设备:只查看设备的预先存入块区信息

例:只查看 设备 /dev/sdb 的预先存入块区信息。

 purpleEndurer @ bash ~ $ sudo hdparm -a /dev/sdb

/dev/sdb:
 readahead     = 256 (on)
purpleEndurer @ bash ~ $ 

 

如果我们输入的命令是 sudo hdparm /dev/sdb -a

purpleEndurer @ bash ~ $ sudo hdparm /dev/sdb -a

/dev/sdb:
 multcount     =  0 (off)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 121601/255/63, sectors = 1953525168, start = 0
 

由于命令中 设备 /dev/sdb 和 选项-a的顺序不对,hdparm不采纳指定的参数,显示结果与命令hdparm /dev/sdb 相同。

2.3  hdparm -A 设备:查看设备读取文件时的快取功能

例 查看 设备 /dev/sdb 的读取文件时的快取功能信息: 

purpleEndurer @ bash ~ $ sudo hdparm -A /dev/sdb

/dev/sdb:
 look-ahead    =  1 (on)
purpleEndurer @ bash ~ $ 

2.4 hdparm -B 设备:显示设备高级电源管理设置

例 查看 设备 /dev/sdb 的高级电源管理设置信息

purpleEndurer @ bash ~ $ sudo hdparm -B /dev/sdb

/dev/sdb:
 APM_level = 254
purpleEndurer @ bash ~ $ 

2.4 hdparm -C 设备:显示设备的电源管理模式

purpleEndurer @ bash ~ $ sudo hdparm -C /dev/sdb

/dev/sdb:
 drive state is:  active/idle
purpleEndurer @ bash ~ $ 

 2.5 hdparm -i 设备:显示设备的硬件规格信息

例: 显示 设备 /dev/sdb 的硬件规格信息。

purpleEndurer @ bash ~ $ sudo hdparm -i /dev/sdb

/dev/sdb:

 Model=ST1000DM010-2EP102, FwRev=CC46, SerialNo=W9APF1CX
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
 BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=1953525168
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: unknown setting WriteCache=enabled
 Drive conforms to: unknown:  ATA/ATAPI-4,5,6,7

 * signifies the current active mode

purpleEndurer @ bash ~ $ 

命令返回信息中的SerialNo 就是硬盘序列号。

2.6 hdparm -I 设备:直接显示来自设备的详细信息

例: 直接显示来自 设备 /dev/sdb 的详细信息。

purpleEndurer @ bash ~ $ sudo hdparm -I  /dev/sdb

/dev/sdb:

ATA device, with non-removable media
Model Number:       ST1000DM010-2EP102                      
Serial Number:      W9APF1CX
Firmware Revision:  CC46    
Transport:          Serial, SATA Rev 3.0
Standards:
Used: unknown (minor revision code 0x0029) 
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:  268435455
LBA48  user addressable sectors: 1953525168
Logical  Sector size:                   512 bytes
Physical Sector size:                  4096 bytes
Logical Sector-0 offset:                  0 bytes
device size with M = 1024*1024:      953869 MBytes
device size with M = 1000*1000:     1000204 MBytes (1000 GB)
cache/buffer size  = unknown
Form Factor: 3.5 inch
Nominal Media Rotation Rate: 7200
Capabilities:
LBA, IORDY(can be disabled)
Queue depth: 32
Standby timer values: spec'd by Standard, no device specific minimum
R/W multiple sector transfer: Max = 16 Current = ?
Advanced power management level: 254
Recommended acoustic management value: 208, current value: 208
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
   * 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
   * Device Configuration Overlay 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
     Write-Read-Verify feature set
   * WRITE_UNCORRECTABLE_EXT command
   * {READ,WRITE}_DMA_EXT_GPL commands
   * Segmented DOWNLOAD_MICROCODE
   * 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
   * READ_LOG_DMA_EXT equivalent to READ_LOG_EXT
   * DMA Setup Auto-Activate optimization
     Device-initiated interface power management
   * Software settings preservation
     unknown 78[7]
   * SMART Command Transport (SCT) feature set
   * SCT Write Same (AC2)
     unknown 206[7]
     unknown 206[12] (vendor specific)
Security: 
Master password revision code = 65534
supported
not enabled
not locked
not frozen
not expired: security count
supported: enhanced erase
104min for SECURITY ERASE UNIT. 104min for ENHANCED SECURITY ERASE UNIT. 
Logical Unit WWN Device Identifier: 5000c500d61665e6
NAA : 5
IEEE OUI : 000c50
Unique ID : 0d61665e6
Checksum: correct
purpleEndurer @ bash ~ $ 

命令返回信息中的Serial Number:就是硬盘序列号。

2.7 hdparm -t 设备:执行设备读取计时,从而获取设备的读取速度

例:获取设备 /dev/sdb 的读取速度

purpleEndurer @ bash ~ $ sudo hdparm -t /dev/sdb

/dev/sdb:
 Timing buffered disk reads: 628 MB in  3.01 seconds = 208.75 MB/sec
purpleEndurer @ bash ~ $ 

 

2.8 hdparm -T 设备:执行设备缓存读取计时,从而获取设备的缓存读取速度

例:获取设备 /dev/sdb 的缓存读取速度。

purpleEndurer @ bash ~ $ sudo hdparm -T /dev/sdb

/dev/sdb:
 Timing cached reads:   7340 MB in  2.00 seconds = 3674.62 MB/sec
purpleEndurer @ bash ~ $ 

有些选项比较危险,就不演示了。 

这篇关于Linux shell编程学习笔记42:hdparm命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/645061

相关文章

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

Redis 命令详解与实战案例

《Redis命令详解与实战案例》本文详细介绍了Redis的基础知识、核心数据结构与命令、高级功能与命令、最佳实践与性能优化,以及实战应用场景,通过实战案例,展示了如何使用Redis构建高性能应用系统... 目录Redis 命令详解与实战案例一、Redis 基础介绍二、Redis 核心数据结构与命令1. 字符

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

Linux下屏幕亮度的调节方式

《Linux下屏幕亮度的调节方式》文章介绍了Linux下屏幕亮度调节的几种方法,包括图形界面、手动调节(使用ACPI内核模块)和外接显示屏调节,以及自动调节软件(CaliseRedshift和Reds... 目录1 概述2 手动调节http://www.chinasem.cn2.1 手动屏幕调节2.2 外接显

Linux(centos7)虚拟机没有IP问题及解决方案

《Linux(centos7)虚拟机没有IP问题及解决方案》文章介绍了在CentOS7中配置虚拟机网络并使用Xshell连接虚拟机的步骤,首先,检查并配置网卡ens33的ONBOOT属性为yes,然后... 目录输入查看ZFhrxIP命令:ip addr查看,没有虚拟机IP修改ens33配置文件重启网络Xh

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进

交换机救命命令手册! 思科交换机排障命令汇总指南

《交换机救命命令手册!思科交换机排障命令汇总指南》在交换机配置与故障排查过程中,总会遇到那些“关键时刻靠得住的命令”,今天我们就来分享一份思科双实战命令手册... 目录1. 基础系统诊断2. 接口与链路诊断3. L2切换排障4. L3路由与转发5. 高级调试与日志6. 性能与QoS7. 安全与DHCP8.

故障定位快人一步! 华为交换机排障命令汇总

《故障定位快人一步!华为交换机排障命令汇总》在使用华为交换机进行故障排查时,首先需要了解交换机的当前状态,通过执行基础命令,可以迅速获取到交换机的系统信息、接口状态以及配置情况等关键数据,为后续的故... 目录基础系统诊断接口与链路诊断L2切换排障L3路由与转发高级调试与日志性能、安全与扩展IT人无数次实战

linux ssh如何实现增加访问端口

《linuxssh如何实现增加访问端口》Linux中SSH默认使用22端口,为了增强安全性或满足特定需求,可以通过修改SSH配置来增加或更改SSH访问端口,具体步骤包括修改SSH配置文件、增加或修改... 目录1. 修改 SSH 配置文件2. 增加或修改端口3. 保存并退出编辑器4. 更新防火墙规则使用uf