為 Azure 準備 Debian VHD
適用於:✔️ Linux VM ✔️ 彈性擴展集
必要條件
本節假設您已使用從 Debian 網站下載的 .iso 檔案將 Debian Linux 作業系統安裝至虛擬硬碟 (VHD)。 有多項工具可用來建立 .vhd 檔案。 Hyper-V 只是一個範例。 如需使用 Hyper-V 的指示,請參閱安裝 Hyper-V 角色及設定虛擬機器 (VM)。
安裝注意事項
- 如需有關針對 Azure 準備 Linux 的更多秘訣,請參閱一般 Linux 安裝注意事項。
- Azure 不支援較新的 VHDX 格式。 您可以使用 Hyper-V 管理員或
convert-vhd
Cmdlet,將磁碟轉換為 VHD 格式。 - 安裝 Linux 系統時,我們建議您使用標準磁碟分割而不是邏輯磁碟區管理員 (LVM),其經常是許多安裝的預設設定。 使用磁碟分割可避免 LVM 與複製之 VM 的名稱衝突,特別是為了疑難排解而需要將作業系統磁碟連接至另一個 VM 時。 您也可以在資料磁碟上使用 LVM 或 RAID。
- 請勿在 OS 磁碟上設定交換磁碟分割。 您可以設定 Azure Linux 代理程式,以在暫存資源磁碟上建立交換檔。 下列步驟提供更多資訊。
- Azure 上的所有 VHD 必須具有與 1 MB 對應的虛擬大小。 從原始磁碟轉換成 VHD 時,您必須在轉換前先確保原始磁碟大小是 1 MB 的倍數。 如需詳細資訊,請參閱 Linux 安裝注意事項。
準備適用於 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
。
建置 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"
此程序會建立大小四捨五入的 VHD image_[release]_azure_amd64.vhd
,以便能成功複製到 Azure 磁碟。
注意
如果不在本機複製 salsa 存放庫和建置映像,可以從 FAI 建置及下載目前穩定的映像。
建立穩定的 Debian VHD 映像之後並在上傳之前,請確認已安裝下列套件:
- apt-get install hyperv-daemons
- apt-get install waagent # (選擇性,但如果要重設密碼和使用擴充功能則建議使用)
- apt-get install cloud-init
然後執行完整升級:
- apt-get full-upgrade
現在必須為此映像建立 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 來加速此程序。 以下示範如何完成此程序:
- 在本機電腦上建立 VHD 的 tarball:
tar -czvf ./image_buster_azure_amd64.vhd.tar.gz ./image_[release]_azure_amd64.vhd
。 - 建立 Azure Linux VM (您選擇的發行版本)。 請確定您已使用夠大的磁碟來建立,以保存解壓縮後的 VHD。
- 將
azcopy
公用程式下載至 Azure Linux VM。 您可以從開始使用 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,請參閱從自訂磁碟建立 Linux VM。