AzureからWindows VMをOracle Cloudに移行

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

# 初めに
利用中のクラウドから、他クラウドにリソースを移行したい時、VMの移行は重要なタスクになります。AzureからWindows VMをOCI（Oracle Cloud Infrastructure）に手動で移行する方法を紹介したいます。少しお役に立てれば幸いです。

__検証環境__
Azure (Japan East), OCI (東京リージョン)
Windows VM バージョン：Windows Server 2019 Datacenter - <font color=blue>Gen1</font>
VM ディスク容量：127 GiB

__ステップ__

[1. Oracle VirtIOドライバーのインストール (Azure側)](#1-oracle-virtioドライバーのインストール-azure側)
[2. Windows VMのエクスポート (Azure側)](#2-windows-vmのエクスポート-azure側)
[3. イメージ・フォーマットの変換 (VHD to QCOW2)](#3-イメージフォーマットの変換-vhd-to-qcow2)
[4. ディスク・イメージをOCIにアップロードする](#4-ディスクイメージをociにアップロードする)
[5. OCIオブジェクト・ストレージからイメージをインポートする (OCI側)](#5-ociオブジェクトストレージからイメージをインポートする-oci側)
[6. インポートされたイメージでOCIインスタンスを作成 (OCI側)](#6-インポートされたイメージでociインスタンスを作成-oci側)

STEP-1~2はAzure側で実施します。STEP-5~6は、OCI側で実施します。
STEP-3~4までの実施場所は、固定ではないで、クラウド側か或いはローカルどちらでもOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/cd31eff9-77ad-16d9-8ef9-ae4fb385d8d5.png)




__作業の目安時間__
ディスク容量は、デフォルトの127 GiBの場合、測定した時間です。

|ステップ|処理内容|時間(分)|コメント|
|:--:|:--|:--:|:--|
|2|VHDファイルのダウンロード|50|Azure Windows VMで実施<br>ローカルへ|
|3|フォーマット変換<br>VHD → QCOW2|30|Azure Windows VMで実施<br><font color=blue>QEMU</font>を利用|
|4|オブジェクト・ストレージへ<br>イメージをコピー|17|Azure Windows VMで実施<br><font color=blue>rclone</font>を利用|
|5|イメージのインポート|12|OCIで実施|
|6|インスタンスの新規作成|12|OCIで実施|


# 1. Oracle VirtIOドライバーのインストール (Azure側)

OCIで利用するように、Windows VMにOracle VirtIOドライバーのインストールは必要です。
詳細は、[オフィシャル記事](https://blogs.oracle.com/linux/post/announcing-oracle-virtio-drivers-115-for-microsoft-windows)をご参照ください。

__ドライバーのダウンロード__
ダウンロードサイト：[Oracle Software Delivery Cloud](https://edelivery.oracle.com/)  (アカウントは必要です。)
現時点(2022年1月)の最新バージョン： <font color=blue>1.1.7</font> (67.90 MB)

検索ボックスに`oracle linux`を入力し、検索結果一覧から`DLP:Oracle Linux 7.9.0.0.0 ( Oracle Linux )`をクリックしたら、チャートに追加されます。画面右上の`Continue`ボタンをクリックし続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/b373c8e4-d177-a38d-c3e3-c7f19aae962a.png)

`x86 64 bit`を選択し、進んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/28ce3362-2318-be3d-c408-10b192914c71.png)

"<strong>Oracle Standard Terms and Restrictions</strong>"を承認した後、下記の画面が表示されます。一番下の`V1009702-01.zip`をクリックし、ダウンロードを開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/1107112e-1c1e-f648-27d7-3297ba99269f.png)
ダウンロード後、Zipファイルを移行対象のWindows VMにコピーしてください。

__ドライバーのインストール__
圧縮ファイルを解凍してから、`setup.exe`を実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3bc11f79-2943-0f6a-000f-4228d6355da7.png)

`Install`ボタンをクリックし、インストールを開始します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/816834ba-9ab4-14f1-ab73-419a73ea921b.png" width="700">

インストール後、VMの再起動は必要です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3ea07113-d5d8-b288-211e-41933976356b.png" width="700">

# 2. Windows VMのエクスポート (Azure側)
VMを停止してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/358e2447-f073-b9ff-4892-a3ed6b890f7d.png)

Settings -> Disks -> ディスク名をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d61d0266-0d7f-94a0-d3c2-80f8c4d0d452.png)

Settings -> Disk Export -> `Generate URL`をクリック
デフォルトのURLの有効時間は、<font color=blue>１時間(3600秒)</font>です。ディスク容量が大きい場合、多めに設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8c6d521c-3a05-b302-6403-1146220c03c0.png)

`Download the VHD file`をクリックし、ダウンロードを開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2595736b-e2d4-c65a-5adf-8b7c727c36bb.png)

ファイルをローカルに保存します。(デフォルト名は、`abcd`です。)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/1182c0ab-ab25-2312-27cf-d00ebd60d37d.png" width="400">

ディスク容量とネットワーク回線の速度により、ダウンロード時間の差異があります。
同じAzureリージョンにあるWindows VMにダウンロードしてみて、デフォルトの127GiBの場合、約50分がかかりました。

# 3. イメージ・フォーマットの変換 (VHD to QCOW2)
エクスポートされたファイルのフォーマットは<font color=blue>VHD</font>で、OCIサポート対象の<font color=blue>QCOW2</font>に変換する必要があります。この例では、<font color=blue>QEMU</font>というツールを利用します。

ダウンロード・サイト：https://www.qemu.org/download/
サポートOS：Linux, Mac, Windows

今回は、Windows(64bit)版を利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/1a69b9d8-a827-f157-1a6f-4e7b9688156d.png)

ダウンロード後、EXEファイルを実行し、インストールを開始します。（詳細を省略する）
インストール後、PATH環境変数に`C:\Program Files\qemu`を追加してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/dddbc779-f0fc-300a-86df-e617cb763c49.png" width="550">

変換処理のコマンド： (VHD → QCOW2)
`qemu-img.exe convert -f vpc -O qcow2 azure2oci.vhd azure2oci.qcow2`

```bat
E:\>ren abcd azure2oci.vhd

E:\>qemu-img.exe convert -f vpc -O qcow2 azure2oci.vhd azure2oci.qcow2

E:\>dir
 Volume in drive E is New Volume
 Volume Serial Number is 8CC3-C88D

 Directory of E:\

01/28/2022  06:36 PM    14,846,787,584 azure2oci.qcow2
01/28/2022  05:06 PM   136,367,309,312 azure2oci.vhd
01/27/2022  11:17 PM    <DIR>          rclone-v1.57.0-windows-amd64
               2 File(s) 151,214,096,896 bytes
               1 Dir(s)  385,453,883,392 bytes free

E:\>
```
変換処理の実施時間は、約30分間でした。変換されたファイルのサイズは、元のファイルより非常に小さくなりました。

# 4. ディスク・イメージをOCIにアップロードする
やり方は、いろいろがあります。この例では、<font color=blue>rclone</font>という転送ツールを利用します。
インストールとOCIへの接続設定を省略させていただきます。(詳細は以下の記事をご参照ください。)
[RcloneでAzure BlobからOCIオブジェクト・ストレージにデータをコピー](https://qiita.com/liu-wei/items/4c781712e989d34aced7)

ローカルから、OCIのバケット（Disk_Image）にファイルをコピーします。（バケットを事前に作成しておいてください。）

```bat
E:\>rclone ls oci:Disk_Image

E:\>rclone copy azure2oci.qcow2 oci:Disk_Image

E:\>rclone ls oci:Disk_Image
14846787584 azure2oci.qcow2

E:\>
```
この例のコピー時間は、約17分間でした。（サイズ14 GBで、Azure VM -> OCI Bucket）

# 5. OCIオブジェクト・ストレージからイメージをインポートする (OCI側)
Menu -> Compute -> Custom Images -> Import image
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/055b0b77-1797-6725-7e77-b5c37a50ebda.png)

必要な情報を入力し、インポートを開始します。（「準仮想化モード(Paravirtualized mode)」を選択します。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e53670f1-8abd-c77c-fdf4-aae18450ced6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/14e6ce05-ea3d-87a2-bc8a-37cc7a2453f6.png)

「Work requests」画面で状態を確認できます。インポート・タスクには約12分間かかりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/81fa2d36-6399-b534-8b75-de47fec929d0.png)

# 6. インポートされたイメージでOCIインスタンスを作成 (OCI側)
Menu -> Compute -> Instances -> Create Instance -> Change image
「Image source」で、「Custom images」を選択してから、インポートされたイメージ・ファイルを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8ca47360-47c1-677b-e17b-c05ab5124110.png)

その他の必要な情報を入力し、作成を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/34669e27-8569-5b28-3e13-54dc587d6549.png)
作成完了まで約12分間かかりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/9a0c0b0b-1e86-b8eb-1a66-65735e45c490.png)



__RDP経由で新しいインスタンスに接続する__
ログイン・ユーザーとパスワードは移行元VMと同じです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8b2b8389-283f-0bf6-7a16-2ede9555184b.png" width="450">
ここまで無事にVMの移行作業が終わりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3be4f777-69aa-aacd-84c6-c3b5ae83ff67.png)

__注意__
この例は、Azure Windows VM <font color=blue>Gen1</font>を利用しています。最新リリースされたVM Gen2(デフォルトの選択肢)を利用する場合、STEP1からSTEP6のインスタンス新規作成まで、エラー発生せず実施できますが、RDPで新インスタンスに接続しようとすると、接続できません。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/aeee3552-096e-26cb-7a5f-7b35222acde3.png" width="500">

VNCコンソール接続で確認しますと、「ディスク起動中の状態に止まっている」のようなメッセージが表示されます。この状態でも、OCIコンソール上の新インスタンスの状態は、「実行中(Running)」と表示されているので、ご注意ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2a6d9466-242e-2b92-3be1-7e47334a7f94.png)

以上

__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[AWS EC2インスタンスをOracle Cloudに移行](https://qiita.com/liu-wei/items/0b85e55d62d864a7e567)
[RcloneでAzure BlobからOCIオブジェクト・ストレージにデータをコピー](https://qiita.com/liu-wei/items/4c781712e989d34aced7)
[テナンシ間 OCI カスタム・イメージの移行](https://qiita.com/liu-wei/items/e3f734646952bc01becb)

----
__公式ドキュメント__
Oracle - [KVMで使用するためのOracle VirtIO Drivers for Microsoft Windows](https://docs.oracle.com/cd/F61410_01/kvm-virtio/kvm-virtio-WhatsNew.html)
Azure - [Download a Windows VHD from Azure](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/download-vhd)