Linux でハードディスク情報取得及びハードディスク・パフォーマンスの計測

Linux でハードディスク情報取得とパフォーマンス計測を行う


Linux マシンのハードディスクの情報を調べたり、ディスクのパフォーマンスを調べたい場合には hdparm あるいは sdparm コマンド、あるいは smartctl コマンドを使用すると、様々な情報を得ることが出来ます。

コマンドラインで実行できますので遠隔地に存在するサーバーでも問題なく調査することが出来ます。もしお使いのハードディスクが SCSI であれば sdparm を使う必要があります。




パッケージのインストール

Ubuntu をお使いなら次のようにして hdparm と sdparm パッケージをインストールします。
$ sudo apt install hdparm sdparm smartmontools
CentOS をお使いであれば次のようにしてインストールします。
$ 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


他のマシンのパフォーマンスと比較しながら上述のコマンドを使うと非常に効果的です。