適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット
前提条件
このセクションでは、Debian Web サイトから仮想ハード ディスク (VHD) にダウンロードした .iso ファイルから Debian Linux オペレーティング システムを既にインストールしているものと想定しています。 .vhd ファイルを作成するツールはいくつかあります。 Hyper-V は 1 つの例にすぎません。 Hyper-V の使用方法については、Hyper-V の役割のインストールと仮想マシン (VM) の構成に関するページを参照してください。
インストールに関する注記
Important
この記事のリモート NVMe の準備は省略可能です。 リモート NVMe ディスク コントローラーを使用してデプロイするイメージを作成する場合にのみ完了します。 ターゲット VM で SCSI が使用されている場合は、リモート NVMe セクションをスキップし、標準設定を保持します。 リモート NVMe には Gen2 イメージが必要です。 NVMe イメージをビルドする前に、 リモート NVMe のサポートされている OS イメージ に Debian リリースが一覧表示されていること、および正確なターゲット VM サイズが DiskControllerTypes 機能で NVMe をアドバタイズしていることを確認します。
- Azure 用に Linux を準備する場合のその他のヒントについては、「Linux のインストールに関する一般的な注記」を参照してください。
- 新しい VHDX 形式は、Azure ではサポートされていません。 Hyper-V マネージャーまたは
convert-vhdコマンドレットを使って、ディスクを VHD 形式に変換できます。 - Linux システムをインストールする場合は、Logical Volume Manager (LVM) (通常、多くのインストールで既定) ではなく標準パーティションを使用することをお勧めします。 パーティションを使うと、特に OS ディスクをトラブルシューティングのために別の VM に接続する必要がある場合に、LVM 名と、クローンされた VM との競合が回避されます。 LVM や RAID もデータ ディスクで使用できます。
- OS ディスクにスワップ パーティションを構成しないでください。 Azure Linux エージェントは、一時的なリソース ディスク上にスワップ ファイルを作成するよう構成できます。 詳細については、次の手順を参照してください。
- Azure の VHD の仮想サイズはすべて、1 MB にアラインメントさせる必要があります。 未フォーマット ディスクから VHD に変換するときに、変換する前の未フォーマット ディスクのサイズが 1 MB の倍数であることを確かめる必要があります。 詳細については、Linux のインストールに関する注意事項に関するページを参照してください。
Important
一時リソース ディスクを使用するスワップ ガイダンスは、ローカルの一時ストレージを含む VM サイズにのみ適用されます。 リモート ディスク コントローラーの種類 (SCSI または NVMe) では、リソース ディスクが使用可能かどうかが判断されません。
Azure 用の Debian イメージを準備する
完全自動インストール (FAI) クラウド イメージ ビルダーを使用して、基本の Azure Debian クラウド イメージを作成できます。 FAI を使用せずにイメージを準備するには、一般的な手順に関する記事をご確認ください。
次の git clone と apt インストール コマンドは、Debian クラウド イメージ リポジトリから取得されたものです。 まず、リポジトリをクローンし、依存関係をインストールします。
$ git clone https://salsa.debian.org/cloud-team/debian-cloud-images.git
$ sudo apt install --no-install-recommends ca-certificates debsums dosfstools \
fai-server fai-setup-storage make python3 python3-libcloud python3-marshmallow \
python3-pytest python3-yaml qemu-utils udev
$ cd ./debian-cloud-images
省略可能: スクリプト (シェル スクリプトなど) を ./config_space/scripts/AZURE に追加して、ビルドをカスタマイズします。
イメージをカスタマイズするスクリプトの例
$ mkdir -p ./config_space/scripts/AZURE
$ cat > ./config_space/scripts/AZURE/10-custom <<EOF
#!/bin/bash
\$ROOTCMD bash -c "echo test > /usr/local/share/testing"
EOF
$ sudo chmod 755 ./config_space/scripts/AZURE/10-custom
イメージをカスタマイズするすべてのコマンドに $ROOTCMD プレフィックスを付けます。 これは、chroot $target というエイリアスになります。
Debian ディスク構成を検証する
SCSI イメージと NVMe イメージの両方に対して、 /etc/fstab を検証し、非永続ディスク名を拒否する FAI カスタマイズ スクリプトを追加します。
$ cat > ./config_space/scripts/AZURE/15-storage-validation <<'EOF'
#!/bin/bash
set -eu
$ROOTCMD findmnt --verify --verbose
if $ROOTCMD grep -Eq '^[[:space:]]*[^#].*[[:space:]]/dev/(sd|nvme)' /etc/fstab; then
echo 'Replace /dev/sd* and /dev/nvme* entries in /etc/fstab with UUIDs or another persistent identifier.' >&2
exit 1
fi
EOF
$ sudo chmod 755 ./config_space/scripts/AZURE/15-storage-validation
リモート NVMe 用に Debian イメージを準備する
リモート NVMe ディスク コントローラー用のイメージを作成する場合にのみ、このセクションを完了します。 それ以外の場合は、このスクリプトを追加せずに、Azure Debian イメージをビルドし続けます。
NVMe イメージをビルドする前に、別の FAI カスタマイズ スクリプトを追加します。 このスクリプトにより、初期起動時に NVMe ドライバーが使用可能になり、Azure NVMe I/O タイムアウトが設定されます。
$ cat > ./config_space/scripts/AZURE/20-nvme <<'EOF'
#!/bin/bash
set -eu
$ROOTCMD bash -c "printf '%s\n' nvme nvme_core >> /etc/initramfs-tools/modules"
$ROOTCMD update-initramfs -u -k all
$ROOTCMD sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/"$/ nvme_core.io_timeout=240"/' /etc/default/grub
$ROOTCMD update-grub
$ROOTCMD modinfo nvme
$ROOTCMD modinfo nvme_core
$ROOTCMD bash -c "lsinitramfs /boot/initrd.img-\$(ls /lib/modules | sort -V | tail -1) | grep -Eq 'nvme(_core)?\\.ko'"
EOF
$ sudo chmod 755 ./config_space/scripts/AZURE/20-nvme
Important
FAI 設定でこれらの値がすでに設定されている場合は、生成された GRUB コマンドラインと /etc/initramfs-tools/modules に重複したエントリがないか確認してください。 生成される initramfs には、 nvme と nvme_core の両方が存在する必要があります。
Azure Debian イメージをビルドする
$ make image_[release]_azure_amd64
このコマンドにより、現在のディレクトリにいくつかのファイルが出力されます。最も重要なのは image_[release]_azure_amd64.raw イメージ ファイルです。
Azure 用の VHD に未加工イメージを変換します。
rawdisk="image_[release]_azure_amd64.raw"
vhddisk="image_[release]_azure_amd64.vhd"
MB=$((1024*1024))
size=$(qemu-img info -f raw --output json "$rawdisk" | \
gawk 'match($0, /"virtual-size": ([0-9]+),/, val) {print val[1]}')
rounded_size=$(((($size+$MB-1)/$MB)*$MB))
rounded_size_adjusted=$(($rounded_size + 512))
echo "Rounded Size Adjusted = $rounded_size_adjusted"
sudo qemu-img resize "$rawdisk" $rounded_size
qemu-img convert -f raw -o subformat=fixed,force_size -O vpc "$rawdisk" "$vhddisk"
このプロセスでは、Azure ディスクに正常にコピーできるように、丸められたサイズの VHD image_[release]_azure_amd64.vhd が作成されます。
注
salsa リポジトリをクローンしてイメージをローカルにビルドするのではなく、現在の安定したイメージをビルドして、FAI からダウンロードできます。
安定した Debian VHD イメージを作成した後、アップロードする前に、次のパッケージがインストールされていることを確認します。
sudo apt update
sudo apt install hyperv-daemons
sudo apt install waagent # *(Optional but recommended for password resets and the use of extensions)*
sudo apt-get install cloud-init
次に、完全なアップグレードを実行します。
sudo apt full-upgrade
ここで、このイメージに対して Azure リソースを作成する必要があります。 この例では $rounded_size_adjusted 変数を使用するため、前の手順と同じシェル プロセス内から行う必要があります。
マネージド ディスクを作成する前に、Hyper-V 世代を設定します。 この例では、標準の SCSI イメージの場合、既定では V1 が使用されます。 リモート NVMe 準備セクションを完了した場合、または第 2 世代イメージを準備する場合にのみ、 V2 に変更します。
HYPER_V_GENERATION=V1
az group create -l $LOCATION -n $RG
az disk create \
-n $DISK \
-g $RG \
-l $LOCATION \
--for-upload --upload-size-bytes "$rounded_size_adjusted" \
--sku standard_lrs --hyper-v-generation $HYPER_V_GENERATION
ACCESS=$(az disk grant-access \
-n $DISK -g $RG \
--access-level write \
--duration-in-seconds 86400 \
--query accessSas -o tsv)
azcopy copy "$vhddisk" "$ACCESS" --blob-type PageBlob
az disk revoke-access -n $DISK -g $RG
az image create \
-g $RG \
-n $IMAGE \
--os-type linux \
--hyper-v-generation $HYPER_V_GENERATION \
--source $(az disk show \
-g $RG \
-n $DISK \
--query id -o tsv)
az vm create \
-g $RG \
-n $VM \
--ssh-key-value $SSH_KEY_VALUE \
--public-ip-address-dns-name $VM \
--image $(az image show \
-g $RG \
-n $IMAGE \
--query id -o tsv)
ローカル コンピューターから Azure ディスクへの帯域幅により、azcopy でのアップロードの処理に長時間かかる場合は、Azure VM ジャンプボックスを使用してプロセスを高速化できます。 このプロセスを実行する方法を以下に示します。
- ローカル マシン上で VHD の tar アーカイブを作成します:
tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_[release]_azure_amd64.vhd。 - Azure Linux VM (任意のディストリビューション) を作成します。 必ず、抽出した VHD を保持するのに十分なサイズのディスクを使用して作成してください。
- Azure Linux VM に
azcopyユーティリティをダウンロードします。 「AzCopy を使ってみる」で取得できます。 - tarball を VM にコピーします:
scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~。 - VM 上で、VHD:
tar -xf ./image_buster_azure_amd64.vhd.tar.gzを展開します。 この手順は、ファイルのサイズに基づいて少し時間がかかります。 - 最後に、VM で、
azcopy(上記のコマンド) を使用して VHD を Azure ディスクにコピーします。
関連するコンテンツ
これで、Debian Linux VHD を使用して Azure に新しい VM を作成する準備ができました。 .vhd ファイルを Azure に初めてアップロードする場合は、「Create a Linux VM from a custom disk (カスタム ディスクから Linux VM を作成する)」を参照してください。
SCSI から NVMe に移行する必要がある既存のAzure VM の場合は、Linux を変換し、WINDOWS VM を SCSI から NVMe に変換します。 アーキテクチャとサポート情報については、 NVMe の概要を参照してください。