代替カーネルでの予測可能なネットワークインターフェイス名の使用


12

ほとんど常に、私はUbuntuカーネルPPAからのカーネル、またはUbuntuカーネル構成を使用して自分でコンパイルしたカーネルを使用しています。

問題は、ストックカーネルを使用している場合、デフォルトで予測可能なネットワークインターフェイス名(つまり "p4p1")を使用しているようですが、別のカーネルを使用している場合は、古い方法(つまり "eth0")を使用しているようです。

この質問にはあまり関係がありませんが、テストコンピューターでハードディスクの障害が発生し、Ubuntu Server 14.04.2の新規インストールを実行しています。

カーネル間の違いを判断できませんでした。カーネル構成パラメーターを疑っていますが、どれを特定できませんでした。

私の質問:予測可能なネットワークインターフェイス名をすべてのカーネルで一貫して機能させるにはどうすればよいですか?

追記:どこかで、予測可能なネットワークインターフェイス名を無効にしてこれをgrubに追加しました。

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"

だから、私は反対が役立つかもしれないと思った:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1 biosdevname=1"

しかし、違いはありませんでした。実際、設定に関係なく、非ストックカーネルでbiosdevnameを使用することはできません。また/etc/udev/rules.d/70-persistent-net.rules、の設定に関係なく、ストックカーネルにファイルを生成させることはできません(ただし、これは私が望むものではありません)net.ifnames。私が持っている場合net.ifnames=1、少なくとも非在庫カーネルは正しくない/etc/udev/rules.d/70-persistent-net.rulesファイルを生成しません。

からの抜粋/var/log/udev
ストックカーネル:

KERNEL[9.216730] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
IFINDEX=2
INTERFACE=p4p1
SEQNUM=1945
SUBSYSTEM=net
...
UDEV  [9.241073] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/p4p1
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=p4p1

Ubuntu PPAカーネル4.1RC5から:

KERNEL[10.772566] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
...
UDEV  [11.185866] add      /devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0 (net)
ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/net/eth0
ID_BUS=pci
ID_MODEL_FROM_DATABASE=P8P67 and other motherboards
ID_MODEL_ID=0x8168
ID_NET_NAME_MAC=enxf46d04652d8e
ID_NET_NAME_PATH=enp3s0
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Co., Ltd.
ID_VENDOR_ID=0x10ec
IFINDEX=2
INTERFACE=eth0
SEQNUM=1962
SUBSYSTEM=net
USEC_INITIALIZED=3227

注:/etc/udev/rules.d/70-persistent-net.rulesファイルの作成を許可し、適切なデバイス名が得られるように編集して、この問題を一時的に回避しました。最終的には、ファイルを削除したいと思います。

回答:


33

次の3つを区別する必要があります。

  • 予測可能なインターフェース名
  • biosdevname
  • 70-persistent.rules udevルール

これらのソリューションのいずれかを使用することを選択しますが、2または3を同時に使用しません。(実際には、1つを優先して、他をマスクすることができます)

現在の状況の良い紹介は、ubuntu devメーリングリストの投稿です。

予測可能なインターフェース名

予測可能なインターフェイス名は、v197以降で生成されたudevdです/lib/udev/rules.d/80-net-setup-link.rules

systemdはデフォルトで新しい予測可能なインターフェース名を使用します。ただし、上流のsystemdを除いて、Ubuntuでは、次のコマンドを使用してオプトインする必要があります。net.ifnames=1

これは、カーネルのバージョンは関係ありません、あなたが実行されていることを。ただし、カーネルコマンドラインを使用して/etc/default/grub、次のようにgrub構成を変更して構成する必要があります。

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

そして走る

sudo update-grub

14.04または14.10では、systemdがなければ、以下の注記で説明するように、70-persitent-net.rulesを削除するだけで十分です。

Biosdevname

biosdevnameは、systemdの予測可能なインターフェース名と同様の問題を解決するためのデルの試みです。これは、ubuntuサーバーのデフォルトです。パッケージをインストールすることでそれを持つことができますbiosdevname

sudo apt-get install biosdevname

注意

これを無効にするには、grub configのカーネルコマンドラインを使用します。

GRUB_CMDLINE_LINUX_DEFAULT="biosdevname=0"

そして走る

sudo update-grub

または単にパッケージをアンインストールします。

sudo apt-get purge biosdevname
sudo update-initramfs -u

udevルール

これはUbuntuデスクトップのデフォルトです。udevのルールは、/lib/udev/rules.d/75-persistent-net-generator.rules最初のブートカスタムルールの間に作成されます/etc/udev/rules.d/70-persistent-net.rulesあなたのインターフェイスのための永続的な名前を得るためにあなたのインターフェイスのMACアドレスを持ちます。

注意

すでにudevルールを使用している場合は、削除/etc/udev/rules.d/70-persistent-net.rulesして、実行する必要がある起動ごとに再生成されないようにする必要があります。

sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules

その後、systemdを使用する場合は、上記のように、予測可能なインターフェース名をオプトインする必要があります。


1
ご回答有難うございます。私のコンピュータはデスクトップ版ではなくサーバー版です。違いに対処するために、回答の編集を送信します(biosdevnameはデフォルトでインストールされていたため、grubで特に無効にする必要があります)。私の考えの誤りは、あなたが与えたリンクで説明されているように、net.ifnames=1biosdevname=0で異なるインターフェース名を期待していたということでしたが、古いeth0とeth1を取得しました。とにかく、/etc/udev/rules.d/70-persistent-net.rules/etc/network/interfacesは適切なインターフェイス名を反映するように編集した後、(なしで)現在すべてのカーネルで動作します。
Doug Smythies、2015年

私はubuntu 15.10デスクトップを使用していますが、udevがデフォルトではなくなったと思います。ネットワークデバイスの名前はwlp4s0およびenp0s31f6で、ファイル/etc/udev/rules.d/70-persistent-net.rules/lib/udev/rules.d/75-persistent-net-generator.rulesは存在しません。
Jonathan Hartley

Ubuntu 16.04(具体的にはsystemd 220-7)では、この75-persistent-net-generator.rulesファイルは非推奨になりましたnet.ifnames
200_成功

4
  1. Ubuntu Server 16.04LTSでは、実行したのは次のとおりです。

    ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
    
  2. 次に、ファイルを作成します

    sudo vi /etc/systemd/network/10-internet.link
    

    以下を追加します

    [Match]
    Path=pci-0000:(your device mac address)
    
    [Link]
    Name=eth0 (or whatever you want to name it)
    

    :wq ファイルを保存する

  3. 次に再起動して/etc/network/interfacesファイルを調整します。次に再起動します

これが誰かを助けることを願っています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.