web-dev-qa-db-ja.com

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

ほとんど常に、 buntu kernel 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ファイルの作成を許可し、適切なデバイス名に合わせて編集することにより、この問題を一時的に回避しました。最終的には、ファイルを削除したいと思います。

10
Doug Smythies

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

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

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

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

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

予測可能なインターフェース名devd v197が/lib/udev/rules.d/80-net-setup-link.rulesで生成されて以来のもの

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

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

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=1"

そして走る

Sudo update-grub

14.04または14.10では、systemdを使用せずに、70-persitent-net.rulesを削除するだけで十分です(以下の注で説明します)。

Biosdevname

biosdevnameは、systemdの予測可能なインターフェイス名と同様の問題を解決しようとするデルの試みです。 ubuntu serverのデフォルトです。パッケージ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 desktopのデフォルトです。 dev rule /lib/udev/rules.d/75-persistent-net-generator.rulesは、最初の起動時にインターフェイスのMACアドレスを使用してカスタムルール/etc/udev/rules.d/70-persistent-net.rulesを作成し、インターフェイスの永続的な名前を取得します。

注意

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

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

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

30
solsTiCe
  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ファイルを調整します。再起動します

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

3
Jadey1412