はじめに
Azure MigrateでマシンをAzure VMに移行する際、Azure MigrateはOSがAzure上でうまく稼働できるようにするために、OSにいくつかの変更を適用する。これをハイドレーション処理と呼んでいるが、OSによってはこれが自動で適用されないものもある。具体的には このドキュメント をみてマニュアルで実行しなければならないが、ドキュメントが手順ぽくなってない感じがして少しわかりにくい。さらにこちらの Azure でのイメージング用に Linux を準備する も合わせて参考にする必要がある。そのため、以前RedHat系のOSに対してマニュアルで実施して動作した方法をこちらにメモしておこうと思う。
ハイドレーションプロセスの各詳細
1. Linux OSパーティションを検出してマウントする
これはパーティションのマウントのプロセスについて説明されているが、Azure Migrate移行時にOS自体が起動しないという事態に出くわしたことが無く対処未経験だが、ここが動かないと結構厳しい。fstabがどうなっているのかよく確認するなどが必要になりそう。
2. OSのバージョンを検出する
スクリプトがLinuxディストリビューション及びバージョンを確認するために以下のファイルを読み取る。セルフハイドレーションの際にはそれほど重要ではないが念のためメモしておくと良い。
- RHEL: etc/redhat-release
- OL: etc/oracle-release
- SLES: etc/SuSE-release
- Ubuntu: etc/lsb-release
- Debian: etc/debian_version
3. Hyper-V Linux Integration Servicesをインストールし、カーネルイメージを再生成する
公式docの例のようにinitrdも使用可能ですが、後継のinitramfsで良いと思われる。Azure用のLinuxイメージを作成する場合の手順 としてはinitramfsが紹介されている。
initramfsの設定変更の場合
/etc/dracut.conf
add_drivers+=" hv_vmbus hv_netvsc hv_storvsc "
既存のinitfamfsファイルを上書き
sudo dracut -f -v
4. Azureシリアル コンソールのログ記録を有効にする
公式Docに記載あるようにrhgb quiet crashkernel=autoパラメータがある場合は削除がお勧め。グラフィカルブートはAzureのコンソールでは使用できないため、パラメータが残っているだけでメモリを無駄に使うことになる。
/etcdefault/grub
GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0"
5. 接続に関するネットワークの変更
イーサネットインターフェイスの静的ルールが生成されないように調整。AzureでVMを複製するときに問題の原因となる。方法は公式docの通り。
sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
その他のネットワーク設定の変更点も公式docの通りなのでここでは割愛する。
6. fstabの検証
デバイスがマウントされてればOK。念のため/etc/fstabを確認してみること。
標準デバイス名を使用しており、且つ、起動時にディスクの認識順序が変わらないようにUUIDを使用したい場合は公式docのように手動で置き換えても良い。
例としてはこんな感じ
# cat /etc/fstab
UUID=5cbbc395-454c-4080-a892-18d98403a176 / xfs defaults 0 0
UUID=365492b2-8b32-40cb-89ad-a85c49d264db /boot xfs defaults 0 0
UUID=BECE-FFFD /boot/efi vfat defaults,uid=0,gid=0,umask=0077,shortname=winnt 0 0
# ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx. 1 root root 10 Mar 22 05:53 365492b2-8b32-40cb-89ad-a85c49d264db -> ../../sda1
lrwxrwxrwx. 1 root root 10 Mar 22 05:53 5cbbc395-454c-4080-a892-18d98403a176 -> ../../sda2
lrwxrwxrwx. 1 root root 11 Mar 22 05:53 BECE-FFFD -> ../../sda15
7. Linux Azureゲストエージェントをインストールする
Linux用ゲストエージェントが正常にインストールされて稼働できていることを確認する。エージェントが自動起動されるように設定すること。666番のエラーがもし出ている場合は、スクリプトがエージェントをインストール/チェックする際失敗している可能性が高い。
Azure Linux エージェントと Azure VM 拡張機能用の依存関係をインストール
sudo yum install python-pyasn1 WALinuxAgent
sudo systemctl enable waagent