Linux でハードディスク情報取得とパフォーマンス計測を行う
Linux マシンのハードディスクの情報を調べたり、ディスクのパフォーマンスを調べたい場合には hdparm あるいは sdparm コマンド、あるいは smartctl コマンドを使用すると、様々な情報を得ることが出来ます。
コマンドラインで実行できますので遠隔地に存在するサーバーでも問題なく調査することが出来ます。もしお使いのハードディスクが SCSI であれば sdparm を使う必要があります。
パッケージのインストール
Ubuntu をお使いなら次のようにして hdparm と sdparm パッケージをインストールします。$ sudo apt install hdparm sdparm smartmontoolsCentOS をお使いであれば次のようにしてインストールします。
$ sudo yum install -y hdparm sdparm smartmontools
ハードディスク情報の取得
インストールが完了したらまず調べたいディスク情報を予め調査しておきます。以下は私の Ubuntu マシンの情報です。$ df -h Filesystem Size Used Avail Use% Mounted on udev 3.9G 3.9G 0 100% /dev tmpfs 786M 48M 738M 7% /run /dev/sda2 909G 203G 660G 24% / tmpfs 3.9G 20M 3.9G 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/sda1 487M 1.5M 485M 1% /boot/efi tmpfs 786M 176K 786M 1% /run/user/1000
上記の中で調査したいディスクパーティションは /dev/sda1 と /dev/sda2 です。ここでは /dev/sda1 を使って調査しましょう。
$ sudo hdparm -I /dev/sda1 /dev/sda1: ATA device, with non-removable media Model Number: TOSHIBA DT01ACA100 Serial Number: 83JE41KNS Firmware Revision: MS2OA7C0 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 0x0029) Supported: 9 8 7 6 5 Likely used: 9 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 = 23652 KBytes (type=DualPortCache) 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 = 16 Advanced power management level: disabled 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 * WRITE_BUFFER command * READ_BUFFER command * NOP cmd * DOWNLOAD_MICROCODE Advanced Power Management feature set * 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 * 64-bit World wide name * 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 * SMART Command Transport (SCT) feature set * SCT Write Same (AC2) * SCT Error Recovery Control (AC3) * SCT Features Control (AC4) * SCT Data Tables (AC5) * reserved 69[3] Security: Master password revision code = 65534 supported not enabled not locked frozen not expired: security count supported: enhanced erase 160min for SECURITY ERASE UNIT. 162min for ENHANCED SECURITY ERASE UNIT. Logical Unit WWN Device Identifier: 5000039ff6f03e8a NAA : 5 IEEE OUI : 000039 Unique ID : ff6f03e8a Checksum: correct
hdparm コマンドほど詳細な情報は得られませんが、smartctl コマンドでも以下のようにハードディスクの情報を取得することが出来ます。
$ sudo smartctl -i -n standby /dev/sda smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.10.0-35-generic] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Toshiba 3.5" DT01ACA... Desktop HDD Device Model: TOSHIBA DT01ACA100 Serial Number: 83JE41KNS LU WWN Device Id: 5 000039 ff6f03e8a Firmware Version: MS2OA7C0 User Capacity: 1,000,204,886,016 bytes [1.00 TB] Sector Sizes: 512 bytes logical, 4096 bytes physical Rotation Rate: 7200 rpm Form Factor: 3.5 inches Device is: In smartctl database [for details use: -P show] ATA Version is: ACS-2, ATA8-ACS T13/1699-D revision 4 SATA Version is: SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s) Local Time is: Tue Sep 19 01:41:43 2017 MDT SMART support is: Available - device has SMART capability. SMART support is: Enabled Power mode is: ACTIVE or IDLE
ハードディスク・パフォーマンスの計測
では今度はハードディスクのパフォーマンスの計測を行ってみましょう。"-T" オプションはディスク・キャッシュからの読み込みの速度を計測し、"-t" オプションはキャッシュがない状態からディスクのバッファキャッシュを通してディスクからデータを読み出す速度を計測するものです。これらのコマンドはタイミングによって速度が変わってきますので何度か実行する必要があります。
ここでは3回づつコマンドを実行しています。
ディスク・キャッシュからの読み込みの速度を計測
$ sudo hdparm -T /dev/sda1 /dev/sda1: Timing cached reads: 19956 MB in 2.00 seconds = 9986.17 MB/sec $ sudo hdparm -T /dev/sda1 /dev/sda1: Timing cached reads: 20710 MB in 2.00 seconds = 10364.15 MB/sec $ sudo hdparm -T /dev/sda1 /dev/sda1: Timing cached reads: 20862 MB in 2.00 seconds = 10439.97 MB/sec
キャッシュがない状態からディスクのバッファキャッシュを通してディスクからデータを読み出す速度を計測
$ sudo hdparm -t /dev/sda1 /dev/sda1: Timing buffered disk reads: 486 MB in 2.62 seconds = 185.67 MB/sec $ sudo hdparm -t /dev/sda1 /dev/sda1: Timing buffered disk reads: 486 MB in 2.64 seconds = 183.94 MB/sec $ sudo hdparm -t /dev/sda1 /dev/sda1: Timing buffered disk reads: 486 MB in 2.64 seconds = 183.94 MB/sec
前述の2つを同時に実行
$ sudo hdparm -Tt /dev/sda1 /dev/sda1: Timing cached reads: 22592 MB in 2.00 seconds = 11306.49 MB/sec Timing buffered disk reads: 486 MB in 2.62 seconds = 185.19 MB/secなお以下のようにディスクデバイスが device-mapper で管理されていても問題なく計測可能です。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_hogehoge-lv_root 12G 5.7G 5.1G 53% / tmpfs 939M 0 939M 0% /dev/shm /dev/sda1 477M 147M 305M 33% /boot /dev/sdb1 32G 48M 30G 1% /var/jcibackup $ sudo hdparm -Tt /dev/mapper/vg_hogehoge-lv_root /dev/mapper/vg_hogehoge-lv_root: Timing cached reads: 12882 MB in 1.99 seconds = 6462.51 MB/sec Timing buffered disk reads: 326 MB in 3.01 seconds = 108.13 MB/sec
しかしサーバーが VMWare ESXi 上のゲストサーバーとして動作している場合にはハードディスクの情報が読み込めないようです。
$ sudo hdparm -I /dev/mapper/vg_hogehoge-lv_root /dev/mapper/vg_hogehoge-lv_root: HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device
他のマシンのパフォーマンスと比較しながら上述のコマンドを使うと非常に効果的です。