【LPIC・Linux】HDDの状況を確認するためのhdparmコマンド

  • URLをコピーしました!
目次

はじめに

こんにちは。ネットワークエンジニアの「だいまる」です。

最近はLPIC Level2の資格取得に向け、日々勉強している毎日になります。

そんな今回はアウトプットの一環として「hdparm」について、まとめたいと思います。

hdparmコマンドとは?

hdparmコマンドとは、「ハードディスクに関するパラメータの取得や設定変更を行うコマンド」になります。

個人的にはほとんど使ったことがないコマンドになるので、どのような状況で使うのか?気になります。

コマンドの書式は以下の通りとなります。

hdparm [オプション] (ハードディスクデバイス野指定)
オプション詳細
-iハードディスクの詳細情報を取得
-Iハードディスクから直接詳細情報を取得
-c[0|1]32bit I/OのOFF(0)/ ON(1)
-d[0|1]DMAモードのOFF(0)/ ON(1)
-tBuffer Cacheオフで処理速度を測定
-TBuffer Cacheのみで処理速度を測定
-w[0|1]ライトキャッシュのOFF(0)/ ON(1)

コマンドの書式を理解したところで実機での動作を確認してみます。

hdparmコマンドがないと言われた場合は?

今回の実機での確認はDebian OSを利用しているため、「apt install hdparm」でインストールすることができます。

他のOSの場合、「yum」など他のコマンドでインストールする場合もあるため、各自のOSに適した方法でインストールしてみてください。

マウントしたハードディスクを確認してみよう

オプション表の「-i」を利用し、ハードディスクの情報を出力してみよう。

daimaru@raspi-test:~ $ sudo hdparm -i /mnt/hdd1

/mnt/hdd1:
 HDIO_GET_IDENTITY failed: Inappropriate ioctl for device

コマンドを叩いたらエラーが出力されました。

このエラーはなぜ起こるのか?

理由は「hdparmはSATA/SCSIに関する設定や状態確認を行うコマンドではないため」です。

今回、raspi-testに接続したハードディスクは「TOSHIBA MQ01ABD100」になります。

このハードディスクは「SATA形式」のため、エラーが出力されたのです。

SATA形式の確認には「sdparm」というコマンドになるようです。(後日勉強して記事作成)

プログリット(PROGRIT)

直接ハードディスクから詳細情報を出力する「-I」

直接ハードディスクから詳細情報を出力する以下のコマンドであれば、確認することができるようです。

daimaru@raspi-test:~ $ sudo hdparm -I /dev/sda1

/dev/sda1:

ATA device, with non-removable media
	Model Number:       TOSHIBA MQ01ABD100
	Serial Number:      XXXXXXXXX
	Firmware Revision:  AX1A1U
	Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6
Standards:
	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  = 8192 KBytes
	Form Factor: 2.5 inch
	Nominal Media Rotation Rate: 5400
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 = 16
	Advanced power management level: 254
	DMA: sdma0 sdma1 sdma2 mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
	     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
	    	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
	   *	IDLE_IMMEDIATE with UNLOAD
	   *	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)
	   *	Native Command Queueing (NCQ)
	   *	Host-initiated interface power management
	   *	Phy event counters
	   *	Idle-Unload when NCQ is active
	   *	DMA Setup Auto-Activate optimization
	    	Device-initiated interface power management
	   *	Software settings preservation
	   *	SMART Command Transport (SCT) feature set
	   *	SCT Write Same (AC2)
	   *	SCT Error Recovery Control (AC3)
	   *	SCT Features Control (AC4)
	   *	SCT Data Tables (AC5)
Security:
	Master password revision code = 65534
		supported
	not	enabled
	not	locked
	not	frozen
	not	expired: security count
		supported: enhanced erase
	224min for SECURITY ERASE UNIT. 224min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5000039731d84c89
	NAA		: 5
	IEEE OUI	: 000039
	Unique ID	: XXXXX
Checksum: correct

上記の結果の通り、DMAやWrite Cache、PIO等の状態や稼働状況を確認することができます。

試しに処理速度を実測してみよう

詳細な状態をハードディスクから直接確認できたので、次は「読み込み/処理速度」を確認してみましょう。

処理速度の確認には、「Buffer Cacheを含まない処理速度の測定を行う -t オプション」と「Buffer Cacheのみの処理速度を行う -T オプション」があります。

Buffer Cacheとは「ハードディスクからデータを読み込む際に利用されるCacheであり、ブロック単位で処理するCache」になります。

daimaru@raspi-test:~ $ sudo hdparm -t /dev/sda1

/dev/sda1:
 Timing buffered disk reads:  84 MB in  3.01 seconds =  27.87 MB/sec

daimaru@raspi-test:~ $ sudo hdparm -T /dev/sda1

/dev/sda1:
 Timing cached reads:   1444 MB in  2.00 seconds = 722.08 MB/sec

出力結果からも分かる通り、Buffer Cache有無の違いでここまで速度の違いが出てきます。

これを見るとCacheの存在がどれだけありがたいかわかりますね。

DMA/PIOモードとは?

ここでオプションの紹介をした際に出てきた「DMAモード」と「PIOモード」について、説明したいと思います。

DMAモードとは?

DMAモードとは「Direct Memory Access」の略称であり、CPUを介さずにデータ転送を行うモードとなります。

現在のHDD/SSDでは、このモードが一般的に利用されているみたいです。

CPUを介さないため、CPU負荷の軽減や転送速度が向上するメリットがあります。

PIOモードとは?

一方、PIOモードは「Programmed Input/Output」の略称であり、CPUを介しメモリや各デバイスとのデータ転送を行うモードになります。

DMAモードと異なり、CPUを介するため、CPU負荷の増加やデータ転送の速度が低下します。

このモード自体は、昔の規格に合わせたものらしく、現在はほとんど利用されていないらしいです。

APMとは?

最後に電源管理を行う「APM(Advanced Power Management)」について、説明したいと思います。

hdparmコマンドで「APMの設定」を行うことができ、そのオプションは以下の表の通りとなります。

オプション詳細
-BAPM機能を1~255の段階で設定
・255:APM OFF
・128〜254:スピンダウンなし
・1〜127:スピンダウンあり
-Sスタンバイタイムアウトの設定

APM機能の指定により、APM OFF、スピンダウンなし、スピンダウンありの3段階に分かれます。

そもそもの話ですが、この値の大きさが消費電力に比例すると考えていただければ大丈夫です。

また、スピンダウンとは「ディスクの消費電力を減らし、回転速度を遅くすることで音を小さくする動作」です。

この動作により、ハードディスクの寿命が伸びますが、処理速度が遅くなるデメリットもあります。

先ほどの「-I」の出力では、レベルが254になっていることがわかります。

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 = 16
	Advanced power management level: 254
	DMA: sdma0 sdma1 sdma2 mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5
	     Cycle time: min=120ns recommended=120ns
	PIO: pio0 pio1 pio2 pio3 pio4
	     Cycle time: no flow control=120ns  IORDY flow control=120ns

このレベル値を100に変更してみましょう。

daimaru@raspi-test:~ $ sudo hdparm -B 100  /dev/sda1

/dev/sda1:
 setting Advanced Power Management level to 0x64 (100)
SG_IO: bad/missing sense data, sb[]:  70 00 01 00 00 00 00 0a 00 00 00 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 APM_level	= 100

コマンドを入力した段階で変更されていることがわかります。

では、処理速度の実測となります。

daimaru@raspi-test:~ $ sudo hdparm -t /dev/sda1

/dev/sda1:
 Timing buffered disk reads:   2 MB in  3.33 seconds = 614.46 kB/sec
daimaru@raspi-test:~ $ sudo hdparm -T /dev/sda1

/dev/sda1:
 Timing cached reads:   1406 MB in  2.00 seconds = 702.74 MB/sec

上記の結果から、Buffer Cacheがある場合はほとんど変化がないですが、Buffer Cacheがない場合はかなり処理速度が変わってくることがわかります。

ハードディスクの設定管理はトレードオフになることがよくわかりますね。

最後に

今回は、LPIC Level2のために少し深く勉強しているうちの1つ「hdparmコマンド」についてまとめてみました。

次回以降もLPIC Level2の用語について、まとめる予定です。

  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次