使用 Azure CLI 將 OS 磁碟連結至復原 VM,以針對 Linux VM 進行疑難解答
適用於:✔️ Linux VM
如果您的 Linux 虛擬機器 (VM) 遇到開機或磁碟錯誤,您可能需要在虛擬硬碟本身上執行疑難解答步驟。 常見的範例是 中 /etc/fstab
無效的專案,導致 VM 無法成功開機。 本文詳細說明如何使用 Azure CLI 將虛擬硬碟連線到另一個 Linux VM,以修正任何錯誤,然後重新建立原始 VM。
復原程式概觀
疑難解答程式如下所示:
- 停止受影響的 VM。
- 從 VM 的 OS 磁碟擷取快照集。
- 從OS磁碟快照集建立磁碟。
- 將新的 OS 磁碟連結並掛接至另一個 Linux VM 以進行疑難解答。
- 線上到疑難解答 VM。 編輯檔案或執行任何工具來修正新 OS 磁碟上的問題。
- 從疑難解答 VM 取消掛接並中斷連結新的 OS 磁碟。
- 變更受影響 VM 的 OS 磁碟。
若要執行這些疑難解答步驟,您需要安裝最新的 Azure CLI,並使用 az login 登入 Azure 帳戶。
您可以使用 VM 修復命令,將步驟 1、2、3、4、6 和 7 自動化。 如需更多檔和指示,請參閱 使用 Azure 虛擬機修復命令修復 Linux VM。
重要
本文中的腳本僅適用於使用 受控磁碟的 VM。
在下列範例中,將參數名稱取代為您自己的值,例如 myResourceGroup
和 myVM
。
判斷開機問題
檢查序列輸出,以判斷 VM 無法正確開機的原因。 常見的範例是 中 /etc/fstab
無效的專案,或正在刪除或移動的基礎虛擬硬碟。
使用 az vm boot-diagnostics get-boot-log 取得開機記錄。 下列範例會從名為 myResourceGroup
的資源群組中名為 myVM
的 VM 取得序列輸出:
az vm boot-diagnostics get-boot-log --resource-group myResourceGroup --name myVM
檢閱序列輸出,以判斷 VM 為何無法開機。 如果序列輸出未提供任何指示,您可能需要在虛擬硬碟連線到疑難解答 VM 之後,檢閱 中的 /var/log
記錄檔。
停止 VM
下列範例會從名為 的資源群組停止名為 myVM
myResourceGroup
的 VM:
az vm stop --resource-group MyResourceGroup --name MyVm
從受影響 VM 的 OS 磁碟擷取快照集
快照集是完整的 VHD 唯讀複本。 它無法連結至 VM。 在下一個步驟中,我們將從此快照集建立磁碟。 下列範例會從名為 『myVM』 的 VM OS 磁碟建立具有名稱 mySnapshot
的快照集。
#Get the OS disk Id
$osdiskid=(az vm show -g myResourceGroup -n myVM --query "storageProfile.osDisk.managedDisk.id" -o tsv)
#creates a snapshot of the disk
az snapshot create --resource-group myResourceGroupDisk --source "$osdiskid" --name mySnapshot
從快照集建立磁碟
此腳本會從名為的快照集建立名稱 myOSDisk
為 mySnapshot
的受控磁碟。
#Provide the name of your resource group
$resourceGroup="myResourceGroup"
#Provide the name of the snapshot that will be used to create Managed Disks
$snapshot="mySnapshot"
#Provide the name of the Managed Disk
$osDisk="myNewOSDisk"
#Provide the size of the disks in GB. It should be greater than the VHD file size.
$diskSize=128
#Provide the storage type for Managed Disk. Premium_LRS or Standard_LRS.
$storageType="Premium_LRS"
#Provide the OS type
$osType="linux"
#Get the snapshot Id
$snapshotId=(az snapshot show --name $snapshot --resource-group $resourceGroup --query id -o tsv)
# Create a new Managed Disks using the snapshot Id.
az disk create --resource-group $resourceGroup --name $osDisk --sku $storageType --size-gb $diskSize --source $snapshotId
如果資源群組和來源快照集不在相同區域中,當您執行 az disk create
時,將會收到「找不到資源」錯誤。 在此情況下,您必須指定 --location <region>
將磁碟建立至與來源快照集相同的區域。
現在您有原始 OS 磁碟的復本。 您可以將這個新磁碟掛接至另一個 Windows VM 以進行疑難解答。
將新的虛擬硬碟連結至另一個 VM
在接下來的幾個步驟中,您會使用另一個 VM 進行疑難解答。 您可以將磁碟連結至此疑難解答 VM,以瀏覽和編輯磁碟的內容。 此程式可讓您更正任何組態錯誤,或檢閱其他應用程式或系統記錄檔。
此文稿會將磁碟 myNewOSDisk
連結至 VM MyTroubleshootVM
:
# Get ID of the OS disk that you just created.
$myNewOSDiskid=(az disk show -g $resourceGroup -n $osDisk --query id -o tsv)
# Attach the disk to the troubleshooting VM
az vm disk attach --disk $myNewOSDiskid --resource-group $resourceGroup --size-gb $diskSize --sku $storageType --vm-name MyTroubleshootVM
掛接鏈接的數據磁碟
注意
下列範例詳細說明Ubuntu VM上所需的步驟。 如果您使用不同的 Linux 散發版本,例如 Red Hat Enterprise Linux 或 SUSE,則記錄檔位置和 mount
命令可能稍有不同。 如需命令中適當變更,請參閱特定散發版本的檔。
使用適當的認證透過 SSH 連線到疑難解答 VM。 如果此磁碟是第一個連結至疑難解答 VM 的數據磁碟,磁碟可能會連線到
/dev/sdc
。 使用dmesg
來檢視連結的磁碟:dmesg | grep SCSI
輸出類似於下列範例:
[ 0.294784] SCSI subsystem initialized [ 0.573458] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252) [ 7.110271] sd 2:0:0:0: [sda] Attached SCSI disk [ 8.079653] sd 3:0:1:0: [sdb] Attached SCSI disk [ 1828.162306] sd 5:0:0:0: [sdc] Attached SCSI disk
在上述範例中,OS 磁碟位於
/dev/sda
,而且每個 VM 提供的暫存磁碟位於/dev/sdb
。 如果您有多個數據磁碟,它們應該位於/dev/sdd
、/dev/sde
等等。建立目錄以掛接現有的虛擬硬碟。 下列範例會建立名為 的
troubleshootingdisk
目錄:sudo mkdir /mnt/troubleshootingdisk
如果您在現有的虛擬硬碟上有多個分割區,請掛接所需的磁碟分區。 下列範例會在 掛接第一個主要分割區
/dev/sdc1
:sudo mount /dev/sdc1 /mnt/troubleshootingdisk
注意
最佳做法是使用虛擬硬碟的通用唯一標識碼 (UUID) 在 Azure 中的 VM 上掛接數據磁碟。 針對這個簡短的疑難解答案例,不需要使用 UUID 掛接虛擬硬碟。 不過,在正常使用下,使用裝置名稱進行編輯
/etc/fstab
以掛接虛擬硬碟,而不是 UUID 可能會導致 VM 無法開機。
修正新 OS 磁碟的問題
掛接現有的虛擬硬碟后,您現在可以視需要執行任何維護和疑難解答步驟。 解決問題之後,請繼續進行下列步驟。
卸除並中斷連結新的OS磁碟
解決錯誤之後,您可以從疑難解答 VM 取消掛接現有的虛擬硬碟並中斷連結。 在發行虛擬硬碟至疑難解答 VM 的租用之前,您無法將虛擬硬碟與任何其他 VM 搭配使用。
從 SSH 會話到疑難解答 VM,取消掛接現有的虛擬硬碟。 請先變更載入點的父目錄:
cd /
現在,卸除現有的虛擬硬碟。 下列範例會在 卸除裝置
/dev/sdc1
:sudo umount /dev/sdc1
現在,從 VM 中斷鏈接虛擬硬碟。 結束疑難解答 VM 的 SSH 工作階段:
az vm disk detach -g MyResourceGroup --vm-name MyTroubleShootVm --name myNewOSDisk
變更受影響 VM 的 OS 磁碟
您可以使用 Azure CLI 來交換 OS 磁碟。 您不需要刪除及重新建立虛擬機器。
此範例會停止名為 myVM
的 VM,並將名為 myNewOSDisk
的磁碟指派為新的 OS 磁碟。
# Stop the affected VM
az vm stop -n myVM -g myResourceGroup
# Get ID of the OS disk that is repaired.
$myNewOSDiskid=(az disk show -g $resourceGroup -n $osDisk --query id -o tsv)
# Change the OS disk of the affected VM to "myNewOSDisk"
az vm update -g myResourceGroup -n myVM --os-disk $myNewOSDiskid
# Start the VM
az vm start -n myVM -g myResourceGroup
下一步
如果您在連線到 VM 時遇到問題,請參閱 針對 Azure VM 的 SSH 連線進行疑難解答。 如需存取 VM 上執行的應用程式的問題,請參閱 針對 Linux VM 上的應用程式連線問題進行疑難解答。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。