為 Azure 準備 Debian VHD

適用於:✔️ Linux VM ✔️ 彈性擴展集

必要條件

本節假設您已使用從 Debian 網站 下載的 .iso 檔案將 Debian Linux 作業系統安裝至虛擬硬碟。 可建立 .vhd 檔案的工具有多種,Hyper-V 只是其中一個範例。 如需 Hyper-V 的使用指示,請參閱 安裝 Hyper-V 角色及設定虛擬機器

安裝注意事項

  • 如需有關針對 Azure 準備 Linux 的更多秘訣,另請參閱一般 Linux 安裝注意事項
  • Azure 不支援較新的 VHDX 格式。 您可以使用 Hyper-V 管理員或 convert-vhd Cmdlet,將磁碟轉換為 VHD 格式。
  • 安裝 Linux 系統時,建議您使用標準磁碟分割而不是 LVM (常是許多安裝的預設設定)。 這可避免 LVM 與複製之虛擬機器的名稱衝突,特別是為了疑難排解而需要將作業系統磁碟連接至其他虛擬機器時。 如果願意,您可以在資料磁碟上使用 LVMRAID
  • 請勿在作業系統磁碟上設定交換磁碟分割。 您可以設定 Azure Linux 代理程式,以在暫存資源磁碟上建立交換檔。 如需更多詳細資料,請參閱以下步驟。
  • Azure 上的所有 VHD 必須具有與 1 MB 對應的虛擬大小。 從未經處理的磁碟轉換成 VHD 時,您必須確定未經處理的磁碟大小在轉換前是 1 MB 的倍數。 如需詳細資訊,請參閱 Linux 安裝注意事項

使用 Azure-Manage 建立 Debian VHD

有一些工具可用來產生適用於 Azure 的 Debian VHD,例如 Instaclustr 中的 azure-manage 指令碼。 若不想從頭建立映像,建議採用此方法。 例如,若要建立 Debian 8 VHD,請執行下列命令以下載 azure-manage 公用程式 (和相依性),並執行 azure_build_image 指令碼︰

# sudo apt-get update
# sudo apt-get install git qemu-utils mbr kpartx debootstrap

# sudo apt-get install python3-pip python3-dateutil python3-cryptography
# sudo pip3 install azure-storage azure-servicemanagement-legacy azure-common pytest pyyaml
# git clone https://github.com/credativ/azure-manage.git
# cd azure-manage
# sudo pip3 install .

# sudo azure_build_image --option release=jessie --option image_size_gb=30 --option image_prefix=debian-jessie-azure section

準備適用於 Azure 的 Debian 映像

您可以使用 FAI 雲端映像產生器來建立基底 Azure Debian Cloud 映像。

(從 Debian Cloud 映像存放庫提取下列 git 複製和 apt 安裝命令) 從複製存放庫並安裝相依性開始:

$ 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

建置 Azure Debian 10 映像:

$ make image_buster_azure_amd64

這將會輸出目前目錄中的幾個檔案,尤其是 image_buster_azure_amd64.raw 映像檔。

若要將原始映像轉換為適用於 Azure 的 VHD,您可以執行下列動作:

rawdisk="image_buster_azure_amd64.raw"
vhddisk="image_buster_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"

這會建立具有四捨五入大小的 VHD image_buster_azure_amd64.vhd,以成功將其複製到 Azure 磁碟。

現在,我們需要為此映像建立 Azure 資源 (這會使用 $rounded_size_adjusted 變數,因此其應該來自上述的相同殼層程序)。

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 V1

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 \
    --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 jumpbox 來加速此程序。 以下示範如何完成:

  1. 在本機電腦上建立 VHD 的 tarball:tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_buster_azure_amd64.vhd
  2. 建立 Azure Linux VM (您選擇的散發版本)。 請確定您已使用夠大的磁碟來建立,以保存擷取的 VHD!
  3. 將 azcopy 公用程式下載至 Azure Linux VM。 您可以從這裡加以擷取。
  4. 將 tarball 複製到 VM:scp ./image_buster_azure_amd64.vhd.tar.gz <vm>:~
  5. 在 VM 上,擷取 VHD:tar -xf ./image_buster_azure_amd64.vhd.tar.gz (由於檔案的大小,所以這需要一些時間)。
  6. 最後,在 VM 上使用 azcopy (上述命令) 將 VHD 複製到 Azure 磁碟。

後續步驟:您現在可以開始使用您的 Debian Linux 虛擬硬碟,在 Azure 建立新的虛擬機器。 如果您是第一次將 .vhd 檔案上傳至 Azure,請參閱從自訂磁碟建立 Linux VM