現行のサーバーのバックアップを作っている時の事、特定のホスト間でpingが出来ない。
それぞれのホストではルーターへのpingも通るし、だからインターネットも出来ている。
結論はMACアドレスの重複。
何でこうなったか。KVMのサブホストを作るのに一からやるのはしんどいので、現行のホストの設定ファイルをコピーしてきた。
(/etc/libvirt/qemuにあるサブホスト名.xml)
ホスト名とIPアドレスがかぶるのは分かって居たので変更をしたが、これ以外にも
サブホストのUUIDと仮想ネットワークカードのMACアドレスもかぶっている。
これらを適当に変更したらOKになった。でも数時間無駄にした。
教訓:KVMのサブホストをコピーしたら、
サブホストのUUID、ホスト名、NICのMACアドレス、IPアドレス
を変更する事
もう少し詳しく書くことにする(2016-5-29追記)
まずはサブホストのUUIDとMACアドレスの重複から、
仮想化で無ければMACアドレスがかぶることは無いが(ネットワークICのベンダーとシリアルでかぶることは無い)
サブホストの設定ファイルを /etc/libvirt/qemu/XXXXX.xml 等からコピーをしたら、この中にMACアドレスが書いてあるので、必ず重複する。
まずはその解決方法。コピーした時に定義が反映していないときがあるので(必ずサブホストは止めておく)
# virsh define /etc/libvirt/qemu/xxxx.xml
で定義をしておく。次に定義ファイルの編集
# virsh edit 定義ファイル名(xxxx.xmlの .xml を取ったもの)
これで vi と同じ方法で編集できますので、
a でインサートモードにし、カーソルで該当個所に行き、不要な部分を削除し、そこに新しい分を追記し、escキー, w, q と連続して入力すると編集後の分が定義され保存されます。
念のため、再度
# virsh define /etc/libvirt/qemu/xxxx.xml
で定義し直し(多分やらなくてもいいかも)サブホストを 仮想マシンマネージャーから起動すると新しいUUIDとMACアドレスになっています。
ここでMACアドレスは XX:XX:XX:ZZ:ZZ:ZZ になっていますが、最初の XX:XX:XX はベンダーID(KVMの仮想化の場合 52:54:00 です、次の ZZ:ZZ:ZZ がシリアルですので、他のホストとかぶらないように適当に決めます)
次にホスト名(仮想マシンマネージャー上の名前ではなく、サブホスト自身の名前)と IPアドレスを変更しますが、これはサブホストのファイルを変更する必要がありますが、KVMは領域の中にさらに領域を作っていますので、メインのホストにマウントするには(編集の為に)コツがいります(もちろんサブホストは止めておく)
これには losetup と kpartx を使っていきます。私はLVMを使っていますので
# losetup -f
で使えるloop番号を調べ
# losetup /dev/loop番号 /dev/ボリューム名/サブホストに割り当てたLV名
# kpartx -a /dev/loop番号
さらに
# ls /dev/mapper
でmapperにあるファイルが表示されますので、その中に loop番号p1 などがあります。
これをマウントしますが、私はtestようのマウント場所を作っています(/test1,/test2)
# mount /dev/mapper/loop番号p1 /test1
サブホストの名前は
# gedit /test1/etc/sysconfig/network
抜粋
HOSTNAME=設定したいサブホストの名前
で保存後、IPアドレスは(私は固定IPで、NetworkManager は使っていません)
# gedit /test1/etc/sysconfig/network-scripts/ifcfg-eth0
抜粋
IPADDR=192.168.XX.XX
で後始末
# umount /test1
# kpartx -d /dev/loop番号
# losetup -d /dev/loop番号
それから再起動すればいい筈だったが、ブートでエラー(画像3)
これは前にも経験がある、多分MACアドレスをいじったために出たと思うが、/etc/udev/rules.dにある 70-persistent-net.rulesを削除し、
再起動すれば、自動でこのファイルを作ってくれるので正常に起動する