Share via


使用 Azure CLI 將 OS 磁碟連結至復原 VM,以針對 Linux VM 進行疑難解答

如果您的 Linux 虛擬機 (VM) 發生開機或磁碟錯誤,您可能需要對虛擬硬碟本身執行疑難解答步驟。 常見的範例是 中的無效專案 /etc/fstab ,導致 VM 無法成功開機。 本文詳細說明如何使用 Azure CLI 將虛擬硬碟連線到另一個 Linux VM 以修正任何錯誤,然後重新建立原始 VM。

復原程式概觀

疑難解答程式如下所示:

  1. 停止受影響的 VM。
  2. 從 VM 的 OS 磁碟擷取快照集。
  3. 從OS磁碟快照集建立磁碟。
  4. 為了進行疑難解答,請將新的OS磁碟連結並掛接至另一個Linux VM。
  5. 線上到疑難解答 VM。 編輯檔案或執行任何工具來修正新 OS 磁碟上的問題。
  6. 從疑難解答 VM 卸除並中斷連結新的 OS 磁碟。
  7. 變更受影響 VM 的 OS 磁碟。

若要執行這些疑難解答步驟,您需要安裝最新的 Azure CLI ,並使用 az login 登入 Azure 帳戶。

您可以使用 VM 修復命令將步驟 1、2、3、4、6 和 7 自動化。 如需詳細檔和指示,請參閱 使用 Azure 虛擬機修復命令修復 Linux VM

重要事項

本文中的腳本僅適用於使用受控 磁碟的 VM。

在下列範例中,將參數名稱取代為您自己的值,例如 myResourceGroupmyVM

判斷開機問題

檢查序列輸出,以判斷 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

下列範例會從名為 的資源群組停止名為 myVMmyResourceGroupVM:

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

從快照集建立磁碟

此腳本會從名為的mySnapshot快照集建立具有名稱myOSDisk的受控磁碟。

#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 命令可能會稍有不同。 如需命令中的適當變更,請參閱特定散發版本的檔。

  1. 使用適當的認證透過 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等等。

  2. 建立目錄以掛接現有的虛擬硬碟。 下列範例會建立名為 的 troubleshootingdisk目錄:

    sudo mkdir /mnt/troubleshootingdisk
    
  3. 如果您在現有的虛擬硬碟上有多個磁碟分區,請掛接必要的磁碟分區。 下列範例會在 /dev/sdc1掛接第一個主要分割區:

    sudo mount /dev/sdc1 /mnt/troubleshootingdisk
    

    注意事項

    最佳做法是使用虛擬硬碟的通用唯一標識符 (UUID) ,在 Azure 中的 VM 上掛接數據磁碟。 在此簡短的疑難解答案例中,不需要使用 UUID 掛接虛擬硬碟。 不過,在正常使用下,編輯 /etc/fstab 以使用裝置名稱而非 UUID 掛接虛擬硬碟,可能會導致 VM 無法開機。

修正新 OS 磁碟的問題

掛接現有的虛擬硬碟之後,您現在可以視需要執行任何維護和疑難解答步驟。 解決問題之後,請繼續進行下列步驟。

卸除並中斷連結新的OS磁碟

解決錯誤之後,您會卸除現有的虛擬硬碟,並從疑難解答 VM 中斷連結。 在將虛擬硬碟連結至疑難解答 VM 的租用釋出之前,您無法將虛擬硬碟與任何其他 VM 搭配使用。

  1. 從 SSH 會話到疑難解答 VM,卸除現有的虛擬硬碟。 先變更載入點的父目錄:

    cd /
    

    現在卸除現有的虛擬硬碟。 下列範例會在 /dev/sdc1卸除裝置:

    sudo umount /dev/sdc1
    
  2. 現在將虛擬硬碟與 VM 中斷連結。 結束疑難解答 VM 的 SSH 工作階段:

    az vm disk detach -g MyResourceGroup --vm-name MyTroubleShootVm --name myNewOSDisk
    

變更受影響 VM 的 OS 磁碟

您可以使用 Azure CLI 來交換 OS 磁碟。 您不需要刪除並重新建立 VM。

此範例會停止名為 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 意應見反社群