Stay Safe!!

今から始めるインフラエンジニア〜Linuxコマンド編①〜ハードウェア確認に便利なニクいヤツら

みなさまこんにちは。じょんのび情報局のhokuです。
今回はいつもの今からはじめるインフラエンジニアLinuxコマンド編その①として、最近お世話になった便利なコマンド群のご紹介。

今から始めるインフラエンジニア〜Linuxコマンド編①〜ハードウェア確認に便利なニクいヤツら

最近はdockerやらcloudやらであまりハードウェアを意識するエンジニアは少なくなってきたかもしれませんが、それでも物理サーバはどこかに存在し、誰かが構築しています。
そんなエンジニアにあなたが該当した場合、新米エンジニアであればきっと助けてくれるだろう便利コマンドをご紹介します。

ネットワーク状態を一発で確認する:ethtool

まずご紹介するのはethtoolコマンド。
お恥ずかしい話これまであまり使ったことはなく、ネットワーク設定といえばあまり気にせず直接viで編集することが多かったのですが、昨今のサーバハードウェアのハイスペック化により1台に搭載されるNICの数がまぁ増えてしまったのと、RHEL7からのNetwrokManagerの登場によりインターフェイスの命名も変わってしまったことから、GUIでの設定に逃げるという愚行を招いてしまっていました。
これではイケナイと思い直して最近またCLIに戻したのですがそんな中でとても活躍してくれたのがこのコマンドでした。

前置きが長くなりましたが、ethtoolコマンドは、「サーバのどのネットワークポートにネットワークケーブルが接続されているのか」を確認するコマンドです。

たくさんネットワークポートを持っているサーバ(これは仮想マシンの仮想NICでも同じです)があっても、すべてのネットワークポートがネットワークに接続されているとは限りません。
Linux上ではネットワークポートの設定をONにしていても、ネットワークに接続されていなければ(物理的にケーブルが刺さっている、あるいは仮想NICが接続状態となっている)ネットワークには繋がりません。逆も然りで、ネットワークポートの設定を行っていなければ、ネットワークがつながっていてもネットワークには繋がりません。
そんな悩みをコマンド一発で解決してくれます。

百聞は一見にしかず、ですので早速コマンド例とコマンド結果をご紹介いたします。構文は以下です。

# ethtool [DEVICE]

実際に実行してみます。

# ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
        Advertised auto-negotiation: No
        Speed: 100Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: off
        Supports Wake-on: puag
        Wake-on: g
        Link detected: yes

Link detectedyesであればケーブル接続済み、noであればケーブル未接続を表します。
これでOSからケーブル接続状態が識別できるようになりました。あとは、nmcliでネットワーク設定を行って完了です。
複数ポートが有る場合は、少し手間ですが、それぞれのデバイスに対してethtoolを実行することで全ポートの情報が取得できます。

ethtoolsのその他の情報

ethtoolsではその他にもスピードやOS起動時にNICが有効になるかが判別できます。OSセットアップを行う際の良いパートナーとなってくれるので、お悩みの方はご利用してみてはいかがでしょうか。

なお、Toolがインストールされていない場合、以下でインストールされ利用可能になります。

# yum install ethtool

ハードウェア情報を取得する:lshw

次にlshwのご紹介。
各種ハードウェア情報はそれぞれのデバイスからそのファームウェアを通じてBIOSに渡されます。
OSはBIOSが持つその情報を読みこみ認識しますが、例えばメモリの差し込みが甘く実はOSが認識できていない、などといった事象が起きたりします。
そういった問題が起きていないかを確認するために起動後には一度実施しておきたいハードウェア情報取得のコマンドがlshwです。

こちらも前置きはこのあたりで実際に実行してみましょう。

# lshw
xxxx.xxxx.jp
    description: Computer
    product: KVM
    vendor: Red Hat
    width: 64 bits
    capabilities: smbios-2.4 dmi-2.4 smp vsyscall32
    configuration: boot=normal uuid=F488DDE8-B0E7-496F-BE8D-8DA077D824D3
  *-core
       description: Motherboard
       physical id: 0
     *-firmware
          description: BIOS
          vendor: xxxx
          physical id: 0
          version: x.x.x
          date: 01/01/xxxx
          size: 96KiB
     *-cpu:0
          description: CPU
          product: Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
          vendor: Intel Corp.
          vendor_id: GenuineIntel
          physical id: 401
          bus info: cpu@0
          slot: CPU 1
          size: 2GHz
          capacity: 2GHz
          width: 64 bits
          capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx x86-64 constant_tsc arch_perfmon rep_good nopl eagerfpu pni ssse3 cx16 hypervisor lahf_lm
     *-cpu:1
          description: CPU
          product: Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
          vendor: Intel Corp.
          vendor_id: GenuineIntel
          physical id: 402
          bus info: cpu@1
  :
  :
 ~snip~
  :
  :

かなり長い情報が返りますので、上記は一部のみを表記しています。
(一部情報はセキュリティの観点からマスクしています。)
確認したいデバイスが決まっている場合は、classオプションで特定デバイスのみの確認をすることも可能です。
以下はメモリを指定した場合。

# lshw -class memory
  *-firmware
       description: BIOS
       vendor: xxxx
       physical id: 0
       version: x.x.x
       date: 01/01/xxxx
       size: 96KiB
  *-memory
       description: System Memory
       physical id: 1000
       size: 1GiB
       capacity: 1GiB
       capabilities: ecc
       configuration: errordetection=multi-bit-ecc
     *-bank
          description: DIMM RAM
          physical id: 0
          slot: DIMM 0
          size: 1GiB
          width: 64 bits

最近はBMCからハードウェア情報を確認したりもできるので、そこまで必要とされなくなったかもしれませんが、いちいちBMCにアクセスしなくてもOSからコマンド確認が行なえます。

lshwのその他の情報

cpuに関してのみ、lshwと似た、lscpuというコマンドがあります。cpu情報のみでしたら、こちらのコマンドのほうが、よりわかりやすく、詳しい情報を出力してくれるので試してみるのもありかと思います。

また、dmidecodeというlshwと同様にハードウェア情報を出力してくれるコマンドもあります。出力が微妙に違うので、お好みでの使い分けになりそうです。

なお、Toolがインストールされていない場合、以下でインストールされ利用可能になります。

# yum install lshw

備忘録も兼ねて投稿しましたが、少しでもみなさんのLinuxライフに役立つことができれば嬉しいです。