読者です 読者をやめる 読者になる 読者になる

CentOS5の実マシンを吸い出してVMwareにお引越し

CentOS5の実マシンをVMwareにお引越ししたのでメモ

方針はベンダ系ハードウェアに紐付いた実マシンをVMにすること。サイズもできれば小さくできるといいな。
Windowsなどの特殊なOSは一切利用しないCentOSオンリー前提です。

用意するもの
  • CentOS5の置換元マシン
  • CentOS5の置換先VMwareホストマシン。
    • 多分KVMでも同じ
    • ただし、置換元が64bitである場合はAMD-VかIntel-VTなどの仮想化支援機能が必須
      • 確認方法は以下のコマンドを実行して何か返ってくるか否かsvmAMD-VでvmxはIntel-VT

egrep‘(vmx|svm)’/proc/cpuinfo

      • 仮に返ってきてもBIOSで無効になっている場合もあるのでBIOSに入って確認すべき。
      • 無い場合は素直に別のマシンを用意しましょう。もしくはCPUの交換。
      • AMDならSocketAM2以降なら確実に64bitGuestをサポート。Socket939でもRevison E 以降のAthlon64ならOK。
      • IntelPentium4以降の特定のモデルならOK。ハイエンドでもこれは非常に分かりにくいのでチェック必須。
  • CentOS5 LiveCDのISOファイル
    • VMの初期作業で使用します。
  • CentOS5のインストールCD1もしくはインストールDVDのISOファイル
    • インストール作業その物はしませんが、レスキューモードで使用するため。
    • これは置換元マシンが32bitならi386版を64bitならx86_64版を用意します。
実作業
  • 現行サイズの把握
    • df -Mとかでサイズを把握する。
      • ただし、LVM領域はどうせVMになるので歯切れのいいサイズにする。18Gとか。
      • 必要なのは/bootなど。こちらはfdisk /dev/sdaで把握する。
  • まずサイズを整える
    • CentOS5はroot領域がLVMになっているのだが、これを適当なサイズに縮小する。
      • こうして置かないと後でサイズを正確に調整するのが面倒くさい。
    • 詳細:http://centossrv.com/lvm-reduce.shtml
    • この時のインストールCD1を用いるがi386でもx86_64でもどちらでも構わない。
  • データを別パーティションに取る。同じパーティションでは無限ループにハマる。
    • なので、あらかじめUSB接続HDDやNFSなど外部ディスクをマウントしておく。
    • ddを使って/bootと/を吸い出す
      • /bootを/dev/sd3、/を/dev/VolGroup00/LogVol00とする(SWAPは/dev/VolGroup00/LogVol01とする)

dd if=/dev/sda3 of=boot.img
dd if=/dev/VolGroup00/LogVol00 of=root.img

    • この際、MBRは諦める。というのもベンダ鯖には特殊な領域が先頭に入っているため。
      • 正直、このエリアを吸い取っていいものか判断は付かない。法的な意味で。
  • VMware上にCentOSのLiveCDを使ってVMを作成する。
    • ddで吸い出したパーティション情報が入る二個のイメージファイルも同時に作成する。
    • ネットワークはbridgeにする。
    • で、VMを作成したらVMの構成ファイルXXXX.vmx(XXXXはVM名)に以下の文言を追加
      • これが無いとBIOS画面に入れずブートデバイスを切り替えられないので死ねる。

bios.bootDelay = "5000"

fdisk /dev/sdb
p
n
p
1


p
w

      • ext3でフォーマット

mkfs.ext3 /dev/sdb1

    • そしてマウント
      • 面倒くさいので/mntに直接マウント

mount -t ext3 /dev/sdb1 /mnt

/etc/init.d/sshd start
/etc/init.d/iptables stop
ifconfig

    • sshログインに備えてrootのパスワードを設定

passwd

    • 元のマシンのデータを持っているマシンからscpコマンドでこのVMにバックアップイメージを転送

scp ./boot.img root@XXX.XXX.XXX.XXX:/mnt
scp ./root.img root@XXX.XXX.XXX.XXX:/mnt

  • 次に反映させるディスク領域を/dev/sdaに作成する。
    • fdiskで/bootと/を作る。
      • /bootは/dev/sda1にちょっと大きめに作る。これは以前dfかfdiskで確認した容量をセットする。
      • /は拡張領域上の論理パーティションにlvmで/dev/VolGroup00/LogVol00になるように作る。これは残り全部を回す。
      • なので完了後、/dev/sda1,/dev/sda2,/dev/sda5が出来るはず。
    • 次にlvmで/dev/VolGroup00/LogVol00を作る。
      • pvをまず作る。

pvcreate /dev/sda5

      • vgを作る。

vgcreate VolGroup00 /dev/sda5
vgscan

      • vgのサイズを確認、これの下、Free PE / Size の項目を確認。これがサイズ。

vgdisplay

      • 論理ボリュームlvを作成する。この時は最大サイズで取得しておく。名前はLogVol00、サイズ20Gとする。

lvcreate -nLogVol00 -L20G VolGroup00
lvdisplay

  • バックアップしたイメージを反映させる。
    • ddコマンドを利用する。

dd if=/mnt/boot.img of=/dev/sda1
dd if=/mnt/root.img of=/dev/VolGroup00/LogVol00

  • 起動準備をする。
    • grubを再インストールしてMBRの再構築
      • 面倒なんで対話式で行う。grubに入る。

grub

      • hd0,0が/dev/sda1のはずなので以下のように入力し、MBRを再構築する。

root (hd0,0)
setup(hd0)
quit

    • menu.listのboot時のカーネルイメージを探しに行く先を整える。
      • この作業は自作など元々/bootがHDDの先頭のパーテションにあれば行わなくてもOK
      • 今回の場合ベンダの特殊鯖なので2個余分なパーティションが頭に挟まっているので修正作業が必要となる。
      • /dev/sda1をマウントする。

mkdir /boot1
mount -t ext3 /dev/sda1 /boot1
df

      • /boot1/grub/menu.listを開いて(hd0,2)を(hd0,0)に直す。

nano /boot1/grub/menu.list

  • 再度LVMを整え、swap領域を構成する。
    • CentOS5のインストールCD1を起動ディスクにして再起動
      • この際にバックアップファイルを置いたイメージは
      • 詳細:http://centossrv.com/lvm-reduce.shtml
      • 起動画面でlinux rescueと入力して起動
      • 言語はEnglish、キーボードはjp106、netは無し、自動認識はskipで
      • lvm vgchange -a yでlvm領域を認識させる。
      • fsck.ext3 /dev/VolGroup00/LogVol00をチェック
      • resize2fs /dev/VolGroup00/LogVol00 18Gと、縮小したサイズ(18GB)を再度指定する。
      • lvm lvreduce -L18G /dev/VolGroup00/LogVol00 と、lvmのサイズも縮小する。
      • vgdisplayで残りの容量を確認
      • lvcreate -nLogVol01 -L2G VolGroup00 で領域確保、この場合2Gがあまりで存在したとする。
      • mkswap -c /dev/VolGroup00/LogVol01 でswap領域を作成。
      • exitで再起動
  • で、まだ、これでは起動出来ないので起動ファイルを作成するため再起動
    • CentOS5のインストールCD1を起動ディスクにして再起動、この時ディスクイメージは64bitなら64bit版が必要
      • 起動画面でlinux rescueと入力して起動
      • 言語はEnglish、キーボードはjp106、netは無し、自動認識はcontinueで最後OKを。
      • これで/と/bootが/mnt/sysimageの下にマウントされた状態になるはず。
      • その前にlvm vgchange -a y でlvmのVolGroup00を認識させる。
      • chroot /mnt/sysimage でよいよリカバリ対象内に入る
    • 起動ファイルinitrdの再構成
      • 再度lvm vgchange -a y でlvmのVolGroup00を認識させる。
      • 起動ファイルが移行前の環境にオプティマイズされているので再構成する。念のためカーネルバージョンは全部やっておく。面倒なら最新版だけでもOK。

mv initrd-カーネルバージョン.img initrd-カーネルバージョン.img.bk
mkinitrd initrd-カーネルバージョン.img カーネルバージョン

  • 仮想HDDをブートデバイスにして再起動。

以上でできるはず!