Intel® Ethernet Server Adapter I350-T4をUbuntu14.04で使おうとしたら「The NVM Checksum Is Not Valid」と出てドライバがロードされない

クアッドポートのNICカードがお買い得だったので2枚刺ししたのに認識されなくて泣きそうになった。

対象のNICはこちら。

インテル® イーサネット・サーバー・アダプター I350 製品ファミリー

今回はこのうちのクアッドポートの「I350-T4」を贅沢に2枚さして(内蔵NIC2ポート)とあわせて10ポートなサーバを作ろうとしたのです。

動作環境

動作環境は以下の通り。

・Ubuntu

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.2 LTS"

・Linux kernel

$ uname -a
Linux nm1 3.16.0-30-generic #40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

・ Intel(R) Gigabit Ethernet Network Driver

$ modinfo igb | grep version
version:        5.2.13-k
srcversion:     C3003450663A2AF158B91CD
vermagic:       3.16.0-30-generic SMP mod_unload modversions

Ubuntu 14.04.2 LTS Serverをインストールした時の状態。

ドライバがロードされない

ifconfigでインタフェースが出てこないので、dmesgを見たらこんなメッセージをドライバが吐いている。

$ dmesg | grep igb | grep Valid
[  164.061803] igb 0000:01:00.0: The NVM Checksum Is Not Valid
[  164.109753] igb 0000:01:00.1: The NVM Checksum Is Not Valid
[  164.157715] igb 0000:01:00.2: The NVM Checksum Is Not Valid
[  164.205672] igb 0000:01:00.3: The NVM Checksum Is Not Valid
[  164.253631] igb 0000:02:00.0: The NVM Checksum Is Not Valid
[  164.301587] igb 0000:02:00.1: The NVM Checksum Is Not Valid
[  164.349546] igb 0000:02:00.2: The NVM Checksum Is Not Valid
[  164.397515] igb 0000:02:00.3: The NVM Checksum Is Not Valid

エラーメッセージで検索してみると…

意味:NVMのチェックサム異常を検出しました。
対処:アダプター故障と考えられます。アダプターを交換してください。

な、なんだと… 6枚も買っちゃったじゃん…

ということで対策を探してみる。

対策

其の一:ドライバを修正する

ドライバロード時にNVMのチェックサムを判定しているところを外せば、その後は普通に使えるらしい。

Fix Intel I350 igb driver “NVM Checksum Is Not Valid” error on Linux

$ wget http://downloadmirror.intel.com/13663/eng/igb-5.3.2.tar.gz
$ tar xvf igb-5.3.2.tar.gz
$ cd igb-5.3.2/src
$ vi igb_main.c

以下をコメントアウト。

--- igb_main.c.org 2015-05-27 06:59:51.000000000 +0900
+++ igb_main.c     2015-07-22 15:32:37.392705769 +0900
@@ -2795,12 +2795,14 @@
        e1000_reset_hw(hw);

        /* make sure the NVM is good */
+/*
        if (e1000_validate_nvm_checksum(hw) < 0) {
                dev_err(pci_dev_to_dev(pdev),
                        "The NVM Checksum Is Not Valid\n");
                err = -EIO;
                goto err_eeprom;
        }
+*/

        /* copy the MAC address out of the NVM */
        if (e1000_read_mac_addr(hw))
$ sudo modprobe -r igb
$ sudo make install
$ sudo modprobe igb
$ sudo update-initramfs -u

これで、無事ドライバはロードされて認識はされる。でも、カーネルを更新の度にこの作業をするのは面倒くさい。

其のニ:NVMのチェックサムを正しい値に修正する

そもそもNVMのチェックサムの値が(何故か)正しくないのが原因なので、それを正しい値にすればドライバロード時にNVMのチェックサムエラーにならないはずだ。

NVM(EEPROM)のチェックサムを修正する方法は以下の2通り考えられる。

  1. Intel純正ツールを使って何かしらEEPROMの内容を更新する
  2. 修正済ドライバでロードした後に”ethtool -E”でEEPROMの内容を更新する

今回は純正ツールを使う方法を試す。

純正ツールも色々あるんだけど、使い方が簡単だったこちらを使う。

サポート > ダウンロード・センター Administrative Tools for Intel® Network Adapters

$ wget http://downloadmirror.intel.com/4237/eng/PROADMIN.tar.gz
$ tar xvf PROADMIN.tar.gz
$ cd TOOLS/IOUtil/Linux64e/
$ chmod 755 ioutil64e

引数なしで実行するとIntel制のNIC一覧が表示される。

$ sudo ./ioutil64e
IOUtil v1.25.1.3 - Intel(R) Network IO Mode Enable/Disable Utility
Copyright (C) 2015 by Intel (R) Corporation. All rights reserved.

Driverless Mode

Usage:
    Run with no arguments to list adapters and usage.
    /NIC=X  Adapter to modify
    /ALL    Modify all adapters
    /E      Enable IO mode
    /D      Disable IO mode

NIC B/D/F    Ven-Dev   MAC          IO  Branding string
=== ======== ========= ============ === =======================================
 1) 00/25/00 8086-153A ------------ NA  Can not initialize
 2) 01/00/00 8086-1521 A0369FA14730 DIS Intel(R) Ethernet Server Adapter I350-T
 3) 01/00/01 8086-1521 A0369FA14731 DIS Intel(R) Ethernet Server Adapter I350-T
 4) 01/00/02 8086-1521 A0369FA14732 DIS Intel(R) Ethernet Server Adapter I350-T
 5) 01/00/03 8086-1521 A0369FA14733 DIS Intel(R) Ethernet Server Adapter I350-T
 6) 02/00/00 8086-1521 A0369FA146D4 DIS Intel(R) Ethernet Server Adapter I350-T
 7) 02/00/01 8086-1521 A0369FA146D5 DIS Intel(R) Ethernet Server Adapter I350-T
 8) 02/00/02 8086-1521 A0369FA146D6 DIS Intel(R) Ethernet Server Adapter I350-T
 9) 02/00/03 8086-1521 A0369FA146D7 DIS Intel(R) Ethernet Server Adapter I350-T
10) 04/00/00 8086-1533 901B0E107635 ENA Intel(R) I210 Gigabit Network Connectio

今回、ドライバがロードされないのは「Intel(R) Ethernet Server Adapter I350-T」というもの。クアッドポートのNIC2枚なので計8個が表示されている。

これを何かしら設定変更すればチェックサムが更新されるはずので何故か無効化されているIOモードを有効化する。

$ sudo ./ioutil64e /ALL /E
IOUtil v1.25.1.3 - Intel(R) Network IO Mode Enable/Disable Utility
Copyright (C) 2015 by Intel (R) Corporation. All rights reserved.

Driverless Mode


    Adapter  1: IO is not supported. No action.
    Adapter  2: IO is enabled. Reboot is required.
    Adapter  3: IO is enabled. Reboot is required.
    Adapter  4: IO is enabled. Reboot is required.
    Adapter  5: IO is enabled. Reboot is required.
    Adapter  6: IO is enabled. Reboot is required.
    Adapter  7: IO is enabled. Reboot is required.
    Adapter  8: IO is enabled. Reboot is required.
    Adapter  9: IO is enabled. Reboot is required.
    Adapter 10: IO is enabled. Reboot is required.

All operations completed.

有効化されたか確認。

$ sudo ./ioutil64e
IOUtil v1.25.1.3 - Intel(R) Network IO Mode Enable/Disable Utility
Copyright (C) 2015 by Intel (R) Corporation. All rights reserved.

Driverless Mode

Usage:
    Run with no arguments to list adapters and usage.
    /NIC=X  Adapter to modify
    /ALL    Modify all adapters
    /E      Enable IO mode
    /D      Disable IO mode

NIC B/D/F    Ven-Dev   MAC          IO  Branding string
=== ======== ========= ============ === =======================================
 1) 00/25/00 8086-153A ------------ NA  Can not initialize
 2) 01/00/00 8086-1521 A0369FA14730 ENA Intel(R) Ethernet Server Adapter I350-T
 3) 01/00/01 8086-1521 A0369FA14731 ENA Intel(R) Ethernet Server Adapter I350-T
 4) 01/00/02 8086-1521 A0369FA14732 ENA Intel(R) Ethernet Server Adapter I350-T
 5) 01/00/03 8086-1521 A0369FA14733 ENA Intel(R) Ethernet Server Adapter I350-T
 6) 02/00/00 8086-1521 A0369FA146D4 ENA Intel(R) Ethernet Server Adapter I350-T
 7) 02/00/01 8086-1521 A0369FA146D5 ENA Intel(R) Ethernet Server Adapter I350-T
 8) 02/00/02 8086-1521 A0369FA146D6 ENA Intel(R) Ethernet Server Adapter I350-T
 9) 02/00/03 8086-1521 A0369FA146D7 ENA Intel(R) Ethernet Server Adapter I350-T
10) 04/00/00 8086-1533 901B0E107635 ENA Intel(R) I210 Gigabit Network Connectio

IOモードが有効化された状態になっているのできっとチェックサムが更新されているに違いない。
ドライバを再ロードしてみる。

$ sudo modprobe -r igb
$ sudo modprobe igb

認識された。

$ dmesg | grep igb | grep Intel
[  391.160452] igb 0000:01:00.0: Intel(R) Gigabit Ethernet Network Connection
[  391.256363] igb 0000:01:00.1: Intel(R) Gigabit Ethernet Network Connection
[  391.352259] igb 0000:01:00.2: Intel(R) Gigabit Ethernet Network Connection
[  391.448218] igb 0000:01:00.3: Intel(R) Gigabit Ethernet Network Connection
[  391.552177] igb 0000:02:00.0: Intel(R) Gigabit Ethernet Network Connection
[  391.647959] igb 0000:02:00.1: Intel(R) Gigabit Ethernet Network Connection
[  391.743959] igb 0000:02:00.2: Intel(R) Gigabit Ethernet Network Connection
[  391.839760] igb 0000:02:00.3: Intel(R) Gigabit Ethernet Network Connection

EEPROMを更新したのでリブートしても認識されるしドライバを修正する必要もない。もし、IOモードが有効だとまずい場合は同じツールで再度無効化しても問題はないと思う。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*