よくあるトラブルのためのTIPSを1つ。
例えば、オンボードにEthernetが2port、拡張カードで 2port が搭載されているマシンにLinuxディストロをインストールするケースを考えよう。
この場合、ifconfig -a (等)でOSから見えるオンボードの2 port はそれぞれ eth0とeth1に、拡張ボード側は それぞれ eth2 と eth3 になってほしいと思うのが普通だと思う。
しかし、インストーラに任せておくと、往々にして以下のようなことが起こり、気付かないでいると、
正しく IP address 等を設定したはずなのに疎通がとれず、ハマることになる。
正しく IP address 等を設定したはずなのに疎通がとれず、ハマることになる。
期待 実際
オンボード1port 目 eth0 eth1
オンボード2port 目 eth1 eth3
拡張ボード1port 目 eth2 eth0
拡張ボード2port 目 eth3 eth2
この場合、初期インストール時に udev が検出して ethX 等の名前を割りつけた順番がおかしいので、以下のファイルを直せばよい。
--------------------
認識順序がおかしかったものを手で修正後のサンプル。
[root@host08 ~]# cat /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program, run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single # line, and change only the value of the NAME= key. # PCI device 0x8086:0x105e (e1000e) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:15:17:96:fe:42", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2" ★インストール直後は "eth0" になっていた。 # PCI device 0x14e4:0x165a (tg3) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:22:19:b0:ce:e6", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" ★インストール直後は "eth1" になっていた。
# PCI device 0x8086:0x105e (e1000e) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:15:17:96:fe:43", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3" ★インストール直後は "eth2" になっていた。
# PCI device 0x14e4:0x165a (tg3) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:22:19:b0:ce:e7", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" ★インストール直後は "eth3" になっていた。--------------------
ところで、ここで問題になるのが、オンボードNICに対応するデバイス(ドライバ)がどれなのかを確認する方法。
完璧ではないのだが、私はこんな感じでやっている。
まず、OSから認識されている Ethernet Controller の一覧を調べる。
lspci コマンドを使い、以下のように grep で適当にフィルタする。
----
[root@host08 ~]# lspci | grep Ethernet 01:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5722 Gigabit Ethernet PCI Express 02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5722 Gigabit Ethernet PCI Express 05:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06) 05:00.1 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06) 先頭がバス番号/デバイス番号。----
このケースではオンボード+拡張ボードで合計4portの Ethernet port があり、バス/デバイス番号が若いもの(≒オンボード)は Broadcom のチップ、増設は Intel のチップだということが分かる。
特に、例えばIntel等、同じベンダ製のNICが6portとか付いている場合、へたをするとデバイスドライバが全部一緒になってしまい、判別に困ることになるが、現在OS上で認識されている ethX デバイスが、物理的にどのバス/デバイス番号に対応しているのかは、以下のように ethtool で
調べることができる。
----
[root@host08 ~]# ethtool -i eth0 driver: tg3 ★デバイスドライバ version: 3.124 firmware-version: 5722-v3.08, ASFIPMI v6.02 bus-info: 0000:01:00.0 ★バス番号 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no [root@host08 ~]# ethtool -i eth1 driver: tg3 ★デバイスドライバ version: 3.124 firmware-version: 5722-v3.08, ASFIPMI v6.02 bus-info: 0000:02:00.0 ★バス番号 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no [root@host08 ~]# ethtool -i eth2 driver: e1000e ★デバイスドライバ version: 2.1.4-k firmware-version: 5.6-2 bus-info: 0000:05:00.0 ★バス番号 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no [root@host08 ~]# ethtool -i eth3 driver: e1000e ★デバイスドライバ version: 2.1.4-k firmware-version: 5.6-2 bus-info: 0000:05:00.1 ★バス番号 supports-statistics: yes supports-test: yes supports-eeprom-access: yes supports-register-dump: yes supports-priv-flags: no
----
サーバ系では最近は Intel か Broadcom の2択になることが多いと思うが、ethtool -i の出力の
driver: 欄に表示されたデバイスドライバが、具体的にどんなベンダのデバイス(Ethernet controller)
に対応するのかは、modinfo コマンドで調べることができる。
以下のような感じ。
----[root@host08 ~]# modinfo tg3 filename: /lib/modules/2.6.32-343.el6.x86_64/kernel/drivers/net/tg3.ko firmware: tigon/tg3_tso5.bin firmware: tigon/tg3_tso.bin firmware: tigon/tg3.bin version: 3.124 license: GPL description: Broadcom Tigon3 ethernet driver author: David S. Miller (davem@redhat.com) and Jeff Garzik (jgarzik@pobox.com) srcversion: 554D5ED929C129F90580555 alias: pci:v000010CFd000011A2sv*sd*bc*sc*i* : [snip]----なお、キッティングまで自分で行う場合は、ボード上にMAC addressが書いてあることが多いので、ifconfig -a の出力の中に HWaddr と表示されている MAC address をみて付き合わせるのが一番である。---- ★以下のサンプルの下位3バイトはサンプルとして手で書き換えてある。
余談までに、同じベンダの同じ型番のNIC(=ドライバも同じ)で清一にした場合は、この事象はおきない「はず」…なのだが、例外をご存じの方は教えてほしい…。[root@host08 ~]# ifconfig -a | grep HWaddr eth0 Link encap:Ethernet HWaddr 00:22:19:01:02:10 ←最下位バイト eth1 Link encap:Ethernet HWaddr 00:22:19:01:02:11 ←最下位バイト(上と連番になるはず) eth2 Link encap:Ethernet HWaddr 00:15:17:03:04:20 ←最下位バイト eth3 Link encap:Ethernet HWaddr 00:15:17:03:04:21 ←最下位バイト(上と連番になるはず)----まとめ
表記のようなトラブルが起きた場合、以下のようなコマンドを駆使しておちついて対処しよう。* エディタ (/etc/udev/rules.d/70-persistent-net.rules を編集する) * lspci * ethtool -i * ifconfig -a * modinfo <driver name>特に、「あれ?ちゃんと設定したのに通信できない…」と思った場合は、ifconfig -a をたたいてみて、HWaddress の並びを確認してみよう。サーバ機であって、2port のカードを増設している場合など、MAC address が2枚ずつきれいにそろっていない限り、この事象を疑ってみる価値がある。