自宅サーバー環境での KVM 仮想化サーバーがお亡くなりになってしまいました・・・ (ToT)

某メーカーのデスクトップPCに CentOS + KVM を導入して仮想化サーバーに使っていたのですが、初夏の温度上昇に耐えられなかったのか、うんともすんとも言わなくなってしまいました。マザーボードレベルでやられたっぽいです。ちなみに買ってまだ2年、ここのはもう買わない。

幸いにして、KVM のイメージファイルのバックアップは取っていたので、最新状態ではないにせよ救える仮想マシンもありそうです。で、別マシンを用意して CentOS + KVM を導入し、バックアップイメージファイルをインポートして起動させてみたら・・・ 期待通りに動いてくれません。。

症状として、仮想イメージ自体のインポートは成功して、KVM 内で起動はしてくれます。ただネットワーク(eth0)を認識してくれないため、ループバックアドレス(locahost)でしか使えません。もちろんインポート前には eth0 が使えていて、そのための ifcfg-eth0 などもちゃんと存在しているのに、です。単純なイメージインポートではこうなってしまうようです:
2015070401


もう少し詳しく(ifconfig -a コマンドで)調べてみると、どうも eth0 ではなく eth1 を認識している模様。ただ ifcfg-eth1 は用意していないのでネットワークとしては使えません:
2015070402



これがどういうことかというと、イメージファイルをインポートした際にネットワークインターフェースのハードウェアアドレス(MAC アドレス)が変わってしまって、eth0 ではなく eth1 として認識され、これまでの設定では正しく動かなくなってしまった、ということのようです。

対策としては2通りあります。1つは eth0 用の設定を eth1 用に書き換えて使う方法です。具体的には /etc/sysconfig/network-scripts/ 以下の ifcfg-eth0 を ifcfg-eth1 にリネームして、その中身の eth0 になっている箇所を eth1 に書き換えてリブートする方法です。この方法だと比較的簡単にできて、(eth1 をネットワークポートとして)動くことは動きます。

ただ、あくまで eth0 で動かしたい、という要望もあると思います。以下にその手順を紹介します。

まず上記の ifconfig -a コマンドの結果として、eth1 のハードウェアアドレスとして認識された結果(上記画像だと 52:54:00:9B:56:24)をメモしておきます。改めて /etc/udev/rules.d/70-persistent-net.rules をテキストエディタで開き、eth0 の ATTR{address}=="**:**:**:**:**:**" の **:**:**:**:**:** 部分をメモした内容で書き換えます:
2015070403


システムが DHCP でアドレスを割り当てられる設定になっている場合は /etc/sysconfig/network-scripts/ifcfg-eth0 を編集して、HWADDR の行をコメントアウトするか、または上記と同じ MAC アドレスの値に書き換えて保存します:
2015070405


これでシステムを再起動すると、eth0 が認識されるはずです:
2015070404


無事に KVM の CentOS イメージの引越ができました。