最近になってようやく RHEL6 を触り始めた。
色々と言いたいことはあるが、まず速攻で不満なのは、NIC とデバイス(例: eth0)の割り当てを /etc/udev/rules.d/70-persistent-net.rules で管理するようになったこと。これにより MAC アドレスとデバイスの結びつきが 必須 になった。いや、これマジ勘弁。
オンボード NIC しか使わないならば、この制約は百害あっても一利なしだ。いったい、「客先でマザーボード交換したらサーバーが使えなくなったんだけど」とかいう電話を誰が受けると思ってるのか。現地 SE のスキルを 甘く見るなよ。
まあそれは置いておいて、そういうときのリカバリ方法は分かったが、ひとつ気になるものが残る。
/etc/sysconfig/network-scripts/ifcfg-* 中の「UUID」って何だ?
いや、もちろん UUID は知っている。しかし UUID を書き換えずとも、MAC アドレスさえ書き換えれば NIC は交換できる。じゃあ UUID で何を縛っているのか。一緒に UUID も書き換えるべきなのか。こんな素朴な疑問に Google 先生は答えてくれなかった。しかし、色々見ているうちに、あることに気が付いた。
この UUID ってどれも同じじゃね?
そう、どれも同じに見える。あの人の UUID も、この人の UUID も、僕の UUID も!
ということで、どうやらデバイスにより UUID は固定らしい。差し当たり Google 先生からはこんなん出ました。
- [eth0] 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
- [eth0:1] 7758ac79-c4a2-dd87-1760-71284a316d00
- [eth1] 9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04
- [eth2] 3a73717e-65ab-93e8-b518-24f5af32dc0d
ていうか、デバイスによって UUID が一意に決まるなら、やっぱり UUID って要らなくね?
2012-07-29 追記
と思ったら!
RHEL6.3 から、インストールする度に UUID が変わる ようになってしまった。なので最早、このエントリは嘘です。文句は Red Hat に言ってくれ。
system-config-network でネットワークデバイスを設定しても UUID は増えないので、恐らく UUID を埋め込むのは NetworkManager の仕業。で NetworkManager のソースコードを見た感じ、UUID の生成を行っているのは GObject というライブラリ。その実装は GLib に有る。GLib のコードなんか追っかける気にならんので、これ以上は調べる気なし。:-p
そもそも NetworkManager なんか使わない(サーバーにインストールする意味がない)し、私の場合 OS インストール直後に NetworkManager 絡みの項目は(UUID を含め) ifcfg-* から速攻で消すしね。この件にはなるべく関わらないのが吉とみた。
2014-06-19 追記
その後に色々と分かったけど、面倒いので更新サボってました。:-p
/etc/sysconfig/network-scripts 下を grep すれば、UUID を取得するらしき関数は直ぐに見つかる。
RHEL6.5: /etc/sysconfig/network-scripts/network-functions:
get_uuid_by_config ()
{
dbus-send --system --print-reply --dest=com.redhat.ifcfgrh1 /com/redhat/ifcfgrh1 com.redhat.ifcfgrh1.GetIfcfgDetails string:"/etc/sysconfig/network-scripts/$1" 2>/dev/null | awk -F '"' '/string / { print $2 }'
}
# (. /etc/sysconfig/network-scripts/network-functions ; get_uuid_by_config ifcfg-eth0 ; get_uuid_by_config ifcfg-eth1)
d5fadadc-78f1-414e-aa22-b5a020325d17
7b4d0184-07c8-4635-aeb3-eae4ce2ad30d
NetworkManager 的には、nmcli を使うのが正攻法らしい。
# nmcli con list
NAME UUID TYPE SCOPE TIMESTAMP-REAL
System eth1 7b4d0184-07c8-4635-aeb3-eae4ce2ad30d 802-3-ethernet system never
System eth0 d5fadadc-78f1-414e-aa22-b5a020325d17 802-3-ethernet system Wed Apr 30 14:25:47 2014
NAME UUID TYPE SCOPE TIMESTAMP-REAL
いずれの場合も、NetworkManager が起動している必要がある。上記 UUID は、ifcfg-* に UUID 定義が有ればその値が使われるらしい。試しに UUID 行をコメントアウトしてみると、
# grep UUID /etc/sysconfig/network-scripts/ifcfg-*
/etc/sysconfig/network-scripts/ifcfg-eth0:#UUID=d5fadadc-78f1-414e-aa22-b5a020325d17
/etc/sysconfig/network-scripts/ifcfg-eth1:#UUID=7b4d0184-07c8-4635-aeb3-eae4ce2ad30d
# (. /etc/sysconfig/network-scripts/network-functions ; get_uuid_by_config ifcfg-eth0 ; get_uuid_by_config ifcfg-eth1)
5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04
# nmcli con list
NAME UUID TYPE SCOPE TIMESTAMP-REAL
System eth1 9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04 802-3-ethernet system never
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 802-3-ethernet system Wed Apr 30 14:27:00 2014
NAME UUID TYPE SCOPE TIMESTAMP-REAL
コメントアウト後の UUID は、本エントリ初出のデバイス毎 UUID と一致する。つまり NetworkManager 的には、「ifcfg-* に UUID が有ればそれを使うし、無ければ自分で適当に決めるし」ということらしい。以上より、
UUID は有っても無くてもどうでもいい。
とはいえ私自身 NetworkManager を使っていないし、実際に UUID を消して NetworkManager 関連で問題があったとしても分からないけどね。もし不安なら、初出のデバイス毎の規定値を使っておくのが最も安全だと思う。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。