試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Ubuntu 12.10における幾つかのメモ(ネットワークインターフェース名関係)

ネットワークインターフェースの名前が変わった?

手元の環境では、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」のような形の名前で記述することになる。

関連:biosdevnameについて

biosdevnameは、ネットワークインターフェースの物理的な位置に関する情報をBIOSから取得してGNU/Linux上のネットワークインターフェース名として割り当てるプログラムで、特に複数のネットワークインターフェースが存在する場合にそのインターフェース名をカードごとに固有なものにしたい(「eth0」と「eth1」などの名前が入れ替わったりするのを防ぎたい)場合には非常に有用なものとなるが、突然名前の付け方が大きく変わって、更にその名前がハードウェア環境に依存するという部分には注意が必要かもしれない。

関連記事: