使用 Azure CLI 将 OS 磁盘附加到恢复 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 磁盘。
若要执行这些故障排除步骤,需要使用 az login 安装最新的 Azure CLI 并登录到 Azure 帐户。
可以使用 VM 修复命令自动执行步骤 1、2、3、4、6 和 7。 有关更多文档和说明,请参阅 使用 Azure 虚拟机修复命令修复 Linux VM。
重要
本文中的脚本仅适用于使用 托管磁盘的 VM。
在以下示例中,将参数名称替换为自己的值,例如 myResourceGroup
和 myVM
。
确定启动问题
检查串行输出以确定 VM 无法正确启动的原因。 常见示例是 中的 /etc/fstab
无效条目或正在删除或移动的基础虚拟硬盘。
使用 az vm boot-诊断 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
名为“myVM”的快照。
#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 装载虚拟硬盘。 但是,在正常使用下,使用设备名称而不是 UUID 进行编辑
/etc/fstab
以装载虚拟硬盘可能会导致 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 磁盘。 无需删除并重新创建 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 社区支持。 还可以向 Azure 反馈社区提交产品反馈。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈