LoginSignup
28
31

More than 5 years have passed since last update.

AWS EC2インスタンスをPV形式からHVM形式に変換する(≒t1からt2に移行する)

Last updated at Posted at 2015-05-08

参考URL

  1. EC2のt1.microをt2.microへ移行する
    手作業でPV -> HVMへの変換を行う方法

  2. AWSで仮想化方式 PV(paravirtual) の既存 CentOS AMIを HVMにする
    1の作業手順をベースに、少し改変を加えたもの
    シンボリックリンク追加のところが一番のミソ

  3. PV->HVM変換ツール pv2hvm.rbを試してみた
    ・Rubyスクリプトに変換作業を代行してもらう方法
    ・2015-05現在では、sudo gem install aws-sdk --no-ri --no-rdocのところは、aws-sdkのv1を明示してインストールする必要があることに注意(参考:AWS SDK for Ruby V2
    ・色々と問題が起きた(ルートデバイス名とブロックデバイス名を合わせないと動かない等)ため採用しなかった

  4. EC2編~PVインスタンスからHVMインスタンスに移行してみた~
    1と3の概念の違いについて説明したページ

変換手順

  1. 旧インスタンスのAMIを作成する(バックアップ用)
  2. 旧インスタンスにgrubをインストールする
    sudo yum install grub
  3. 旧インスタンスのルートデバイスEBSからスナップショットを作成する
  4. 3で作成したスナップショットからボリュームを作成する(PV vol)
  5. 新規ボリュームを作成する(HVM vol)
    ※HVM volは、PV volより1GB大きいサイズで作成する方がいい(同サイズだと、後に実行するddコマンドが容量不足で途中終了してしまう可能性がある)
  6. 作業用インスタンスを用意し、 インスタンスを起動してから PV volとHVM volをアタッチする
    ※起動前にアタッチしてしまうとPV volからOSが立ち上がってしまう可能性があるので注意
    ※デバイス名は参考URLに合わせて、PV volを/dev/sdm、HVM volを/dev/sdoとする
  7. 作業用インスタンスにSSHログインして、 AWSで仮想化方式 PV(paravirtual) の既存 CentOS AMIを HVMにする の「パーティションを作成してディスクをコピー」から「chrootを抜けてアンマウント」までの作業を実施
    ※chroot先でのyum install -y grubは、こちらの環境では/dev配下に必要なファイルがない的なエラーが出て失敗した(そのため手順2で先にインストールしている)
    ※lnでシンボリックリンクを作る際、/etc/grub.confや/boot/grub/grub.confが既に存在していると怒られるので、その場合はそのファイルをrmしてからlnする
    ※menu.lstの編集の際、もしkernel行のroot=部分がLABEL=/以外になっていたらLABEL=/に直すこと
    ※fstabの編集は、1行目の1番目がLABEL=/以外になっていたらLABEL=/に直すだけでいいと思われる
  8. PV volとHVM volをデタッチして、後者のスナップショットを作成する
  9. 8で作成したスナップショットからAMIを作成する
    このとき「仮想化タイプ」は「ハードウェアアシストの仮想化」を選択する
  10. 9で作成したAMIから新インスタンス立ち上げ
  11. 新インスタンスの動作確認
  12. 作業用インスタンス、PV vol、HVM volの削除

参考知識書き殴り

AWSは仮想化を実現する上でXenというソフトを使っていて、PVやHVMというのは、このXenにおける仮想化実装方式のこと

ざっくり言うと、PVはカーネルやらブートローダのことをあまり気にしなくていい(AWS側が用意したものを使える)が、HVMは物理サーバ同様すべてを自前で賄う必要がある(だからgrubのインストール作業等が必要になる)
詳しくは 仮想化方式(HVM と PV)についてまとめ を参照

Linuxの起動の流れ
電源入れる→BIOS起動→BIOSがブートローダを呼び出す→ブートローダがカーネルを呼び出す→カーネルが/sbin/initを実行することで色々サービスが起動する

ブートローダの代表格がgrubで、grubの設定ファイルは/etc/grub.confないし/boot/grub/grub.conf

/etc/grub.conf, /boot/grub/grub.conf, /boot/grub/menu.lstの内容は同一(シンボリックリンクにしておくことが多いっぽい)
同じ内容のファイルが複数あるのは歴史的経緯によるものらしい

OSが起動したとき、どのデバイスをどこにマウントするかについての設定ファイルが/etc/fstab

/etc/fstabにおけるデバイスの指定方法は以下の3種類
1. /dev/xvda1のようにデバイスファイル名を直接書く
2. LABEL=/のようにラベル名を指定する(ラベル名はe2labelコマンドで確認・設定可能)
3. UUID=24f28fc6-717e-4bcd-a5f7-32b959024e26のようにUUIDを指定する

28
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
31