hdparm 命令 - 关闭磁盘写缓存

最近需要测试数据库的性能,需要关闭磁盘的写缓存,因此记录下 hdparm 命令的使用方法。

Linux下的hdparm(英文全称:hard disk parameters)命令,主要用来查看硬盘的相关信息或对硬盘进行测速、优化、修改硬盘相关参数设定。它提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数。

若没有安装hdparm ,可以通过sudo yum install hdparm 来安装。

其对应的参数如下:

复制代码
hdparm  [options] ...[device]...
hdparm  [参数]...[设备]...

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
 --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)
 --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)

选项说明:

复制代码
-a<快取分区>:设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定;
-A<0或1>:启动或关闭读取文件时的快取功能;
-c<I/O模式>:设定IDE32位I/O模式;
-C:检测IDE硬盘的电源管理模式;
-d<0或1>:设定磁盘的DMA模式;
-f:将内存缓冲区的数据写入硬盘,并清除缓冲区;
-g:显示硬盘的磁轨,磁头,磁区等参数;
-h:显示帮助;
-i:显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供;
-I:直接读取硬盘所提供的硬件规格信息;
-k<0或1>:重设硬盘时,保留-dmu参数的设定;
-K<0或1>:重设硬盘时,保留-APSWXZ参数的设定;
-m<磁区数>:设定硬盘多重分区存取的分区数;
-n<0或1>:忽略硬盘写入时所发生的错误;
-p<PIO模式>:设定硬盘的PIO模式;
-P<磁区数>:设定硬盘内部快取的分区数;
-q:在执行后续的参数时,不在屏幕上显示任何信息;
-r<0或1>:设定硬盘的读写模式;
-S<时间>:设定硬盘进入省电模式前的等待时间;
-t;评估硬盘的读取效率;
-T:评估硬盘缓存的读取速度;
-u<0或1>:在硬盘存取时,允许其他中断要求同时执行;
-v:显示硬盘的相关设定;
-w<0或1>:设定硬盘的写入快取;
-X<传输模式>:设定硬盘的传输模式;
-y:使IDE硬盘进入省电模式;
-Y:使IDE硬盘进入睡眠模式;
-Z:关闭某些Seagate硬盘的自动省电功能。

用来查看硬盘的相关信息或对硬盘进行测速、优化、修改硬盘相关参数设定。

用法如下:

显示硬盘的相关设置

复制代码
# hdparm /dev/vda

/dev/vda:
 HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device
 readonly      =  0 (off)
 readahead     = 8192 (on)
 geometry      = 104025/16/63, sectors = 104857600, start = 0
显示硬盘的柱面、磁头、扇区数
复制代码
# hdparm -g /dev/vda

/dev/vda:
 geometry      = 104025/16/63, sectors = 104857600, start = 0
 
 #其中:
geometry = 104025[柱面数]/16[磁头数]/63[扇区数], sectors = 104857600[总扇区数], start = 0[起始扇区数]
评估硬盘的读取效率
复制代码
# hdparm -t /dev/vda

/dev/vda:
 Timing buffered disk reads: 290 MB in  3.15 seconds =  92.08 MB/sec
评估硬盘缓存的读取速度
复制代码
# hdparm -T /dev/vda

/dev/vda:
 Timing cached reads:   20508 MB in  2.00 seconds = 10267.18 MB/sec
检测硬盘的电源管理模式
复制代码
# hdparm -C /dev/vda

/dev/vda:
 drive state is:  unknown
查看并设置硬盘多重扇区存取的扇区数,以增进硬盘的存取效率
复制代码
#查看
# hdparm -m /dev/vda

#设置
# hdparm -m 8 /dev/vda
读取硬盘所提供的硬件规格信息
复制代码
#hdparm -I /dev/vda

将内存缓冲区的数据写入硬盘,并清空缓冲区

复制代码
# hdparm -f /dev/vda

查看当前硬盘写Cache状态:

复制代码
hdparm -W /dev/sda

关闭硬盘的写Cache

复制代码
hdparm -W 0 /dev/sda

打开硬盘的写Cache

复制代码
hdparm -W 1 /dev/sda

对于硬盘较多,可以使用linux系统中的for循环结构来快速实现,例:

for dev in a b c d e f g h i g k l m n o..z;do hdparm -W 0(1) /dev/&dev;done。

相关推荐
你的电影很有趣3 小时前
lesson44:Redis 数据库全解析:从数据类型到高级应用
数据库·redis·缓存
kunwen1234 小时前
推理还是训练 || KV缓存和CoT技术
缓存·kv缓存·cot技术
蓝色天空的银码星4 小时前
Spring循环依赖源码调试详解,用两级缓存代替三级缓存
java·spring·缓存
你我约定有三10 小时前
MyBatis--缓存详解
spring boot·缓存·mybatis
天涯海风12 小时前
检索增强生成(RAG) 缓存增强生成(CAG) 生成中检索(RICHES) 知识库增强语言模型(KBLAM)
人工智能·缓存·语言模型
m0_5951998514 小时前
Redis(以Django为例,含具体操作步骤)
数据库·redis·缓存
huisheng_qaq1 天前
【ElasticSearch实用篇-03】QueryDsl高阶用法以及缓存机制
elasticsearch·缓存·nosql·querydsl·score打分机制
卡拉叽里呱啦2 天前
缓存-变更事件捕捉、更新策略、本地缓存和热key问题
分布式·后端·缓存
jakeswang2 天前
应用缓存不止是Redis!——亿级流量系统架构设计系列
redis·分布式·后端·缓存
.Shu.2 天前
Redis zset 渐进式rehash 实现原理、触发条件、执行流程以及数据一致性保障机制【分步源码解析】
数据库·redis·缓存