手元の環境では、OSのバージョンが上がったときにKVMを使用して実ディスク(仮想でない実際のディスク)にOSをインストールしているのだが、インストール後、KVMの中でOSを起動すると問題なく通信ができるのだが、実ディスクから起動すると、ネットワークインターフェースが見つからず、起動にも時間がかかってしまうという状況になった。
dmesg
などの出力を見るとネットワークインターフェースのドライバは正常に読み込まれていることが確認できたが、/sys/class/net/
以下を見ると
$ ls /sys/class/net/
lo p10p1
見慣れない名前があり、試しにこれまでeth0
だったものをp10p1
として手動でネットワーク設定(詳細は略)を行ったところ通信が正常に行えることを確認できたため、Debian系ディストリのネットワークインターフェースの設定ファイル/etc/network/interfaces
の中の
/etc/network/interfaces
より
auto eth0
iface eth0 inet dhcp
のeth0
の部分をp10p1
に置き換えて
/etc/network/interfaces
auto p10p1
iface p10p1 inet dhcp
という内容にして再起動したところ、(上記ファイルを用いた自動ネットワーク設定で)正常に動作するようになった。
IPアドレスを固定にする場合は上の部分の代わりに下のように記述する。
/etc/network/interfaces
auto p10p1
iface p10p1 inet static
address [IPアドレス]
netmask [ネットマスク]
gateway [ゲートウェイのIPアドレス]
dns-nameservers [DNSサーバのIPアドレス...]
ハードウェア環境によってはp10p1
の代わりにp3p1
などの名前になる(数字部分の値が異なる)場合もあるようだ。
このような名前は “biosdevname” というソフトウェアによって自動的に付けられているが、カーネルの起動時の引数にbiosdevname=0
を指定することでこれを無効化して(eth0
などの)従来の名前の付け方にすることができる。
Ubuntuでは
gksudo xdg-open /etc/default/grub
などで/etc/default/grub
を管理者権限で開き
GRUB_CMDLINE_LINUX="[追加の引数]"
の行の"
で囲まれた部分にbiosdevname=0
を追加(既に何かを記述している場合は半角スペースで区切って付け加える)して上書き保存してからエディタを終了し
gksudo update-grub
を実行すると、次回起動時から従来の名前の付け方になる。その場合、/etc/network/interfaces
はp10p1
のような形ではなくeth0
のような形の名前で記述することになる。
gksu
のパッケージはその後廃止されており、2021年時点のディストリにおいてGUI環境で管理者権限でコマンドを実行するには、gksudo
の代わりにpkexec
を使用する。
Ubuntuのネットワーク設定はその後netplan
の設定ファイル群(/etc/netplan/
以下)を用いる形に変わっている。
biosdevnameは、ネットワークインターフェースの物理的な位置に関する情報をBIOSから取得してGNU/Linux上のネットワークインターフェース名として割り当てるプログラムで、特に複数のネットワークインターフェースが存在する場合にそのインターフェース名をカードごとに固有なものにしたい(eth0
とeth1
などの名前が入れ替わったりするのを防ぎたい)場合には非常に有用なものとなるが、突然名前の付け方が大きく変わって、更にその名前がハードウェア環境に依存するという部分には注意が必要かもしれない。