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

IT Notebook

ITについての備忘録的なブログです

VMware - VMwareの仮想マシンをAWSに移行する

プライベートクラウドVMWare仮想マシンパブリッククラウドAWSに移行したときのメモ

環境

  • Hypervisor : VMwareESXi5
  • OS : Ubuntu 12.04 LTS

手順

1.VMware上の仮想マシンova形式でエクスポート

移行対象の仮想マシン複数ディスクなのでova形式でエクスポート

2.エクスポートしたファイルをs3へアップロード

ova形式のファイルをAWSのAMIとしてインポートするためにs3へアップロード

aws s3 cp sample.ova s3://sample-bucket/
3.s3へアップロードしたファイルをAMIとしてインポート

s3へアップロードしたova形式のファイルをAMIとしてインポート

aws ec2 import-image --cli-input-json "{  \"Description\": \"SAMPLE\", \"DiskContainers\": [ { \"Description\": \"SAMPLE\", \"UserBucket\": { \"S3Bucket\": \"sample-bucket\", \"S3Key\" : \"sample.ova\" } } ]}"
4.インポートしたAMIからEC2インスタンスをとりあえず起動

インポートしたAMIは「import-ami-XXXXXXXX」というAMI名で作成されるので、そのAMIを指定してとりえず起動

5.起動したEC2インスタンスを一旦停止

そのままでは起動しなかった、「Get System Log」を確認しても何も出力されていなかったので、一旦停止

6.EC2インスタンスのルートデバイスをデタッチして別インスタンスのボリュームとしてアタッチ

ルートデバイスの設定を変更しないと起動しなさそうなので、一旦デタッチして別のEC2インスタンスの「/dev/sdf」にアタッチ

7.アタッチしたボリュームで設定変更

ルートデバイスをマウントしたEC2インスタンスにログインしてマウント

sudo su -
mount -t ext4 -o defaults /dev/xvdf1 /mnt

chrootでマウントしたデバイスをルート化

chroot /mnt

resolv.confの設定をVPCに合わせる

vi /run/resolvconf/resolv.conf
--------------------------------------------------------------------------------
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.30.0.2
search ap-northeast-1.compute.internal
--------------------------------------------------------------------------------

パッケージ情報を一旦リセット

rm -r /var/lib/apt/lists
mkdir /var/lib/apt/lists
mkdir /var/lib/apt/lists/partial
apt-get autoclean
apt-get clean
apt-get update

grub再設定のための準備作業

apt-get install grub
ln -s /boot/grub/menu.lst /boot/grub/grub.conf
ln -s /boot/grub/grub.conf /etc/grub.conf
rm -f /boot/grub/*stage*
cp /usr/*/grub/*/*stage* /boot/grub/
rm -f /boot/grub/device.map

chrootを一旦終了

exit

grub再設定

cat <<EOF | grub --batch
device (hd0) /dev/xvdf
root (hd0,0)
setup (hd0)
EOF

メッセージはこんな感じ
--------------------------------------------------------------------------------
Probing devices to guess BIOS drives. This may take a long time.

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]
grub> root (hd0,0) /dev/xvdf
grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  21 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+21 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
--------------------------------------------------------------------------------

menu.lstをマウントしたEC2インスタンスからコピーして編集 ※カーネルとかは適宜環境に合わせて設定

cp -p /boot/grub/menu.lst /mnt/boot/grub/menu.lst

vi /mnt/boot/grub/menu.lst
----------------------------------------
title           Ubuntu 12.04.4 LTS, kernel 3.11.0-15-generic
root            (hd0,0)
kernel          /boot/vmlinuz-3.11.0-15-generic root=/dev/xvda1 console=ttyS0 xen_pv_hvm=enable
initrd          /boot/initrd.img-3.11.0-15-generic

title           Ubuntu 12.04.4 LTS, kernel 3.11.0-15-generic (recovery mode)
root            (hd0,0)
kernel          /boot/vmlinuz-3.11.0-15-generic root=/dev/xvda1 single
initrd          /boot/initrd.img-3.11.0-15-generic

title           Ubuntu 12.04.4 LTS, memtest86+
root            (hd0)
kernel          /boot/memtest86+.bin
----------------------------------------

fstabを下記のように設定

vi /mnt/etc/fstab
----------------------------------------
/dev/xvda1/     /        ext4   defaults,noatime        1 1
/dev/xvdf       /opt    ext4    defaults,nobootwait,noatime,comment=cloudconfig 0       2
none /dev/pts devpts git=5 mode=620 0 0
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
----------------------------------------

マウントしたボリュームに対してgrub-install

grub-install --root-directory=/mnt /dev/xvdf1
----------------------------------------
Probing devices to guess BIOS drives. This may take a long time.
Installing GRUB to /dev/xvdf1 as (hd0,0)...
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/xvdf
----------------------------------------

再度chrootしてupdate-grub

chroot /mnt
update-grub
8.設定変更したボリュームを再度インスタンスにマウントしてEC2インスタンスを起動

問題なく起動できることを確認

やってみた感想

手順はざっとこんな感じだったけど、grubの設定関連ではかなり悩まされてしまったのが反省 起動デバイスが認識できずに、起動できなくて何度もトライアンドエラーで時間がかかってしまった 起動してしまえばその後は問題なく動作しているというのは、仮想化技術はすごい!

参考

http://qiita.com/cs_sonar/items/21dbb3462708e146a426