启动与虚拟机故障

如何对 Linux 救援 VM 中的 chroot 环境进行故障排除 - Virtual Machines

· 52CE 我爱测

适用于:✔️ Linux VM 备注 本文中引用的 CentOS 是 Linux 分发版,将达到生命周期结束(EOL)。 请相应地考虑使用和规划。 有关详细信息,请参阅 CentOS 生命周期指南(/zh-cn/azure/virtual-machines/workloads/centos/centos-end-of-life)。 总结 本文介绍如何在 Linux 中对救援虚拟机(VM)上的 chroot 环境进行故障排除。 Tip 若要简化救援 VM 故

适用于:✔️ Linux VM

备注

本文中引用的 CentOS 是 Linux 分发版,将达到生命周期结束(EOL)。 请相应地考虑使用和规划。 有关详细信息,请参阅 CentOS 生命周期指南。

总结

本文介绍如何在 Linux 中对救援虚拟机(VM)上的 chroot 环境进行故障排除。

Tip

若要简化救援 VM 故障排除,请考虑使用 chroot 自动化工具 自动检测所需的分区、执行必要的装载操作,并在执行恢复操作之前准备 chroot 环境。

Ubuntu

  1. 停止或解除分配受影响的 VM。

  2. 使用托管磁盘在同一资源组和位置创建同一代和相同 OS 版本的救援 VM。

  3. 使用Azure门户拍摄受影响 VM OS 磁盘的快照。

  4. 从 OS 磁盘的快照创建磁盘,并将其附加到救援 VM。

  5. 创建磁盘后,对救援 VM 上的 chroot 环境进行故障排除。

    1. 使用以下命令以根用户身份访问 VM:

      sudo su -

    2. 查找磁盘。 用于发现新磁盘的方法可能有所不同。 建议使用 dmesg 命令。 以下示例用于 dmesg 筛选小型计算机系统接口 (SCSI) 磁盘:

      dmesg | grep SCSI

      命令输出类似于以下示例。 在此示例中, /dev/sdc 磁盘是所需的内容:

      [    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
      
    3. 使用以下命令访问 chroot 环境:

      mkdir /rescue
      mount /dev/sdc1 /rescue
      mount /dev/sdc16 /rescue/boot 
      mount /dev/sdc15 /rescue/boot/efi
      
      mount -t proc /proc /rescue/proc
      mount -t sysfs /sys /rescue/sys
      mount -o bind /dev /rescue/dev
      mount -o bind /dev/pts /rescue/dev/pts
      mount -o bind /run /rescue/run
      chroot /rescue
      

      备注

      在较新的 Ubuntu 映像上,/boot 文件夹只有一个分区。 如果要恢复较旧的 Ubuntu 映像,则可以忽略装载 /dev/sdc16 到 /rescue/boot时发生的任何错误。 在完成这些步骤后,请确保 /rescue/boot 中有文件。

      如果在装载过程中发生错误,则可以安全地忽略在步骤 5e 中卸载 /rescue/boot 时可能发生的错误。

    4. 排查 chroot 环境问题。

    5. 使用以下命令退出 chroot 环境:

      exit
      
      umount /rescue/proc/
      umount /rescue/sys/
      umount /rescue/dev/pts
      umount /rescue/dev/
      umount /rescue/run
      cd /
      umount /rescue/boot/efi
      umount /rescue/boot
      umount /rescue
      

      备注

      如果收到“无法卸载 /rescue”错误消息,请将 -l 该选项添加到 umount 命令。 例如:umount -l /rescue。

  6. 从救援 VM 分离磁盘,然后执行与原始 VM 的磁盘交换。

  7. 启动原始 VM,并检查其连接。

RHEL/Centos/Oracle 6.x,Oracle 8.x 和 RHEL/Centos 7.x 均支持 RAW 分区

  1. 停止或解除分配受影响的 VM。

  2. 使用托管磁盘在同一资源组(RSG)和位置中创建相同 OS 版本的救援 VM 映像。

  3. 使用Azure门户拍摄受影响 VM OS 磁盘的快照。

  4. 从 OS 磁盘的快照中创建磁盘,然后将其附加到救援 VM。

  5. 创建磁盘后,对救援 VM 上的 chroot 环境进行故障排除。

    1. 使用以下命令以根用户身份访问 VM:

      sudo su -

    2. 查找磁盘。 用于发现新磁盘的方法可能有所不同。 建议使用 dmesg 命令。 以下示例用于 dmesg 筛选 SCSI 磁盘:

      dmesg | grep SCSI

      命令输出类似于以下示例。 在此示例中, /dev/sdc 磁盘是所需的内容:

      [    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
      
    3. 使用以下命令访问 chroot 环境:

      mkdir /rescue
      mount -o nouuid /dev/sdc2 /rescue
      mount -o nouuid /dev/sdc1 /rescue/boot/
      
      mount -t proc /proc /rescue/proc
      mount -t sysfs /sys /rescue/sys
      mount -o bind /dev /rescue/dev
      mount -o bind /dev/pts /rescue/dev/pts
      mount -o bind /run /rescue/run
      chroot /rescue
      
    4. 排查 chroot 环境问题。

    5. 使用以下命令退出 chroot 环境:

      exit
      
      umount /rescue/proc/
      umount /rescue/sys/
      umount /rescue/dev/pts
      umount /rescue/dev/
      umount /rescue/run
      cd /
      umount /rescue/boot/
      umount /rescue
      

      备注

      如果收到“无法卸载 /rescue”错误消息,请将 -l 该选项添加到 umount 命令。 例如:umount -l /rescue。

  6. 从救援 VM 分离磁盘,然后执行与原始 VM 的磁盘交换。

  7. 启动原始 VM,并检查其连接。

RHEL/Centos 7.x 和 8。使用 LVM 的 x

备注

如果原始 VM 在 OS 磁盘上包括逻辑卷管理器(LVM),请使用映像和 OS 磁盘上的原始分区来创建救援 VM。

  1. 停止或解除分配受影响的 VM。

  2. 使用托管磁盘在同一资源组(RSG)和位置中创建相同 OS 版本的救援 VM 映像。

  3. 使用Azure门户拍摄受影响虚拟机 OS 磁盘的快照。

  4. 从 OS 磁盘的快照创建磁盘,并将其附加到救援 VM。

  5. 创建磁盘后,对救援 VM 中的 chroot 环境进行故障排除。

    1. 使用以下命令以根用户身份访问 VM:

      sudo su -

    2. 查找磁盘。 用于发现新磁盘的方法可能有所不同。 建议使用 dmesg 此命令。 以下示例用于 dmesg 筛选 SCSI 磁盘:

      dmesg | grep SCSI

      命令输出类似于以下示例。 在此示例中, /dev/sdc 磁盘是所需的内容:

      [    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
      
    3. 使用以下命令激活逻辑卷组:

      vgscan --mknodes
      vgchange -ay
      lvscan
      
    4. 使用 lsblk 命令检索 LVM 名称:

      lsblk
      
      NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sda                 8:0    0   64G  0 disk
      ├─sda1              8:1    0  500M  0 part /boot
      ├─sda2              8:2    0   63G  0 part /
      sdb                 8:16   0    4G  0 disk
      └─sdb1              8:17   0    4G  0 part /mnt/resource
      sdc                 8:0    0   64G  0 disk
      ├─sdc1              8:1    0  500M  0 part
      ├─sdc2              8:2    0   63G  0 part
      ├─sdc3              8:3    0    2M  0 part
      ├─sdc4              8:4    0   63G  0 part
        ├─rootvg-tmplv  253:0    0    2G  0 lvm  
        ├─rootvg-usrlv  253:1    0   10G  0 lvm  
        ├─rootvg-optlv  253:2    0    2G  0 lvm  
        ├─rootvg-homelv 253:3    0    1G  0 lvm  
        ├─rootvg-varlv  253:4    0    8G  0 lvm  
        └─rootvg-rootlv 253:5    0    2G  0 lvm
      
    5. 使用以下命令准备 chroot 目录:

      mkdir /rescue
      mount /dev/mapper/rootvg-rootlv /rescue
      mount /dev/mapper/rootvg-varlv /rescue/var
      mount /dev/mapper/rootvg-homelv /rescue/home
      mount /dev/mapper/rootvg-usrlv /rescue/usr
      mount /dev/mapper/rootvg-tmplv /rescue/tmp
      mount /dev/mapper/rootvg-optlv /rescue/opt
      mount /dev/sdc2 /rescue/boot/
      mount /dev/sdc1 /rescue/boot/efi
      

      /rescue/boot/ 和 /rescue/boot/efi 分区可能并不总是位于 /dev/sdc2* 或 /dev/sdc1 上*。 如果在尝试装载这些分区时遇到错误,请检查 /rescue/etc/fstab 文件,以确定断开的 OS 磁盘中的 /boot 和 /boot/efi 分区的正确设备。 然后,运行blkid该命令并将 /rescue/etc/fstab* 文件中的通用唯一标识符(UUID)*与命令的blkid输出进行比较,以确定用于在修复 VM 中装载 */rescue/boot/*和 /rescue/boot/efi 的正确设备。

      如果 mount /dev/mapper/rootvg-optlv /rescue/opt 卷组不存在,该命令可能会失败。 在这种情况下,可以绕过此命令。

    6. 使用以下命令访问 chroot 环境:

      mount -t proc /proc /rescue/proc
      mount -t sysfs /sys /rescue/sys
      mount -o bind /dev /rescue/dev
      mount -o bind /dev/pts /rescue/dev/pts
      mount -o bind /run /rescue/run
      chroot /rescue
      
    7. 排查 chroot 环境问题。

    8. 使用以下命令退出 chroot 环境:

      exit
      
      umount /rescue/proc/
      umount /rescue/sys/
      umount /rescue/dev/pts
      umount /rescue/dev/
      umount /rescue/run
      cd /
      umount /rescue/boot/efi
      umount /rescue/boot
      umount /rescue/home
      umount /rescue/var
      umount /rescue/usr
      umount /rescue/tmp
      umount /rescue/opt
      umount /rescue
      

      备注

      如果收到“无法卸载 /rescue”错误消息,请将 -l 该选项添加到 umount 命令。 例如:umount -l /rescue。

  6. 从救援 VM 分离磁盘,然后执行与原始 VM 的磁盘交换。

  7. 启动原始 VM,并检查其连接。

使用相同的 LVM 映像

备注

如果必须使用同一 LVM 映像部署救援 VM,则必须使用 LVM 修改救援 VM 的某些方面。

以下命令将在为恢复作临时创建的恢复(救援)VM 上运行。

  1. 使用以下命令在附加要救援的磁盘之前检查磁盘的状态:

    sudo lsblk -f
    
    NAME              FSTYPE      LABEL UUID                                   MOUNTPOINT
    sda
    ├─sda1            vfat              93DA-8C20                              /boot/efi
    ├─sda2            xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d   /boot
    ├─sda3
    └─sda4            LVM2_member       pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU
    ├─rootvg-tmplv  xfs               9098eb05-0176-4997-8132-9152a7bef207   /tmp
    ├─rootvg-usrlv  xfs               2f9ff36c-742d-4914-b463-d4152801b95d   /usr
    ├─rootvg-optlv  xfs               aeacea8e-3663-4569-af25-c52357f8a0a3   /opt
    ├─rootvg-homelv xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0   /home
    ├─rootvg-varlv  xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86   /var
    └─rootvg-rootlv xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809   /
    sdb
    └─sdb1            ext4              e72e7c2c-db27-4a73-a97e-01d63d21ccf8   /mnt
    
  2. 将需要救援的磁盘附加为数据盘。

  3. 使用以下命令再次检查磁盘:

    sudo lsblk -f
    
    NAME              FSTYPE      LABEL UUID                                   MOUNTPOINT
    sda
    ├─sda1            vfat              93DA-8C20                              /boot/efi
    ├─sda2            xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d   /boot
    ├─sda3
    └─sda4            LVM2_member       pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU
    ├─rootvg-tmplv  xfs               9098eb05-0176-4997-8132-9152a7bef207   /tmp
    ├─rootvg-usrlv  xfs               2f9ff36c-742d-4914-b463-d4152801b95d   /usr
    ├─rootvg-optlv  xfs               aeacea8e-3663-4569-af25-c52357f8a0a3   /opt
    ├─rootvg-homelv xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0   /home
    ├─rootvg-varlv  xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86   /var
    └─rootvg-rootlv xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809   /
    sdb
    └─sdb1            ext4              e72e7c2c-db27-4a73-a97e-01d63d21ccf8   /mnt
    sdc
    ├─sdc1            vfat              93DA-8C20
    ├─sdc2            xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d
    ├─sdc3
    └─sdc4            LVM2_member       pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU
    

    命令输出不会立即显示 LVM 结构。

  4. 使用以下命令查看物理 LVM 分区:

    sudo pvs
    

    此输出显示有关重复物理卷(PVs)的警告:

    WARNING: Not using lvmetad because duplicate PVs were found.
    WARNING: Use multipath or vgimportclone to resolve duplicate PVs?
    WARNING: After duplicates are resolved, run "pvscan --cache" to enable lvmetad.
    WARNING: Not using device /dev/sdc4 for PV pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU.
    WARNING: PV pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU prefers device /dev/sda4 because device is used by LV.
    PV         VG     Fmt  Attr PSize   PFree
    /dev/sda4  rootvg lvm2 a--  <63.02g <38.02g
    
  5. 使用vmimportclone命令通过另一个名称从数据盘导入rootvg。

    此命令更改 PV 的 UUID,并激活它:

    sudo vgimportclone -n rescuemevg /dev/sdc4
    
    WARNING: Not using device /dev/sdc4 for PV <PV>.
    WARNING: PV pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU prefers device /dev/sda4 because device is used by LV.
    
    sudo vgchange -a y rescuemevg 
    
    6 logical volume(s) in volume group "rescuemevg" now active
    
  6. 使用以下命令验证名称更改:

    sudo lsblk -f
    
    NAME                  FSTYPE      LABEL UUID                                   MOUNTPOINT
    sda
    ├─sda1                vfat              93DA-8C20                              /boot/efi
    ├─sda2                xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d   /boot
    ├─sda3
    └─sda4                LVM2_member       pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU
    ├─rootvg-tmplv      xfs               9098eb05-0176-4997-8132-9152a7bef207   /tmp
    ├─rootvg-usrlv      xfs               2f9ff36c-742d-4914-b463-d4152801b95d   /usr
    ├─rootvg-optlv      xfs               aeacea8e-3663-4569-af25-c52357f8a0a3   /opt
    ├─rootvg-homelv     xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0   /home
    ├─rootvg-varlv      xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86   /var
    └─rootvg-rootlv     xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809   /
    sdb
    └─sdb1                ext4              e72e7c2c-db27-4a73-a97e-01d63d21ccf8   /mnt
    sdc
    ├─sdc1                vfat              93DA-8C20
    ├─sdc2                xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d
    ├─sdc3
    └─sdc4                LVM2_member       BbZsAT-5oOK-nITn-bHFW-IVyS-y0O3-93oDes
    ├─rescuemevg-tmplv  xfs               9098eb05-0176-4997-8132-9152a7bef207
    ├─rescuemevg-usrlv  xfs               2f9ff36c-742d-4914-b463-d4152801b95d
    ├─rescuemevg-optlv  xfs               aeacea8e-3663-4569-af25-c52357f8a0a3
    ├─rescuemevg-homelv xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0
    ├─rescuemevg-varlv  xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86
    └─rescuemevg-rootlv xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809
    
  7. 使用以下命令重命名救援 VM 的rootvg:

    sudo vgrename rootvg oldvg
    
    Volume group "rootvg" successfully renamed to "oldvg"
    
  8. 使用以下命令检查磁盘:

    sudo lsblk -f
    
    NAME                  FSTYPE      LABEL UUID                                   MOUNTPOINT
    sda
    ├─sda1                vfat              93DA-8C20                              /boot/efi
    ├─sda2                xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d   /boot
    ├─sda3
    └─sda4                LVM2_member       pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU
    ├─oldvg-tmplv       xfs               9098eb05-0176-4997-8132-9152a7bef207   /tmp
    ├─oldvg-usrlv       xfs               2f9ff36c-742d-4914-b463-d4152801b95d   /usr
    ├─oldvg-optlv       xfs               aeacea8e-3663-4569-af25-c52357f8a0a3   /opt
    ├─oldvg-homelv      xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0   /home
    ├─oldvg-varlv       xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86   /var
    └─oldvg-rootlv      xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809   /
    sdb
    └─sdb1                ext4              e72e7c2c-db27-4a73-a97e-01d63d21ccf8   /mnt
    sdc
    ├─sdc1                vfat              93DA-8C20
    ├─sdc2                xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d
    ├─sdc3
    └─sdc4                LVM2_member       BbZsAT-5oOK-nITn-bHFW-IVyS-y0O3-93oDes
    ├─rescuemevg-tmplv  xfs               9098eb05-0176-4997-8132-9152a7bef207
    ├─rescuemevg-usrlv  xfs               2f9ff36c-742d-4914-b463-d4152801b95d
    ├─rescuemevg-optlv  xfs               aeacea8e-3663-4569-af25-c52357f8a0a3
    ├─rescuemevg-homelv xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0
    ├─rescuemevg-varlv  xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86
    └─rescuemevg-rootlv xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809
    
  9. 装载来自数据驱动器的文件系统。

    使用 xfs时,请指定 -o nouuid 选项以避免与 UUID 冲突,并装载所需的文件系统来执行 chroot。 在 ext4 文件系统中,此选项不可用,因此需要在这种情况下从命令中删除它。

    sudo mkdir /rescue
    sudo mount -o nouuid /dev/mapper/rescuemevg-rootlv /rescue
    sudo mount -o nouuid  /dev/mapper/rescuemevg-homelv /rescue/home
    sudo mount -o nouuid  /dev/mapper/rescuemevg-optlv /rescue/opt 
    sudo mount -o nouuid  /dev/mapper/rescuemevg-tmplv /rescue/tmp 
    sudo mount -o nouuid  /dev/mapper/rescuemevg-usrlv /rescue/usr 
    sudo mount -o nouuid  /dev/mapper/rescuemevg-varlv /rescue/var 
    sudo mount -o nouuid  /dev/sdc2 /rescue/boot
    sudo mount /dev/sdc1 /rescue/boot/efi
    
    sudo mount -t proc /proc /rescue/proc 
    sudo mount -t sysfs /sys /rescue/sys
    sudo mount -o bind /dev /rescue/dev 
    sudo mount -o bind /dev/pts /rescue/dev/pts
    sudo mount -o bind /run /rescue/run
    

    /rescue/boot/ 和 /rescue/boot/efi 分区可能并不总是位于 /dev/sdc2* 或 /dev/sdc1 上*。 当您尝试装载这些分区时,如果遇到错误,请检查 /rescue/etc/fstab 文件,以确定损坏的 OS 磁盘中的 /boot 和 /boot/efi 分区的正确设备。 然后,运行blkid命令并将 /rescue/etc/fstab* 文件中的 UUID 与命令的blkid输出进行比较,以确定用于在修复 VM 上安装 /rescue/boot/* 和 /rescue/boot/efi 的正确设备。 重复的 UUID 可能会出现在输出中。 在这种情况下,挂载与步骤 5 中设备字母匹配的分区。 在本部分的示例中,应装载的正确分区为 /dev/sdc。 dev/sda 表示当前正在使用的操作系统,应将其忽略。

  10. 使用以下命令检查挂载点:

    sudo lsblk -f
    
    NAME                  FSTYPE      LABEL UUID                                   MOUNTPOINT
    sda
    ├─sda1                vfat              93DA-8C20                              /boot/efi
    ├─sda2                xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d   /boot
    ├─sda3
    └─sda4                LVM2_member       pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU
    ├─oldvg-tmplv       xfs               9098eb05-0176-4997-8132-9152a7bef207   /tmp
    ├─oldvg-usrlv       xfs               2f9ff36c-742d-4914-b463-d4152801b95d   /usr
    ├─oldvg-optlv       xfs               aeacea8e-3663-4569-af25-c52357f8a0a3   /opt
    ├─oldvg-homelv      xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0   /home
    ├─oldvg-varlv       xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86   /var
    └─oldvg-rootlv      xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809   /
    sdb
    └─sdb1                ext4              e72e7c2c-db27-4a73-a97e-01d63d21ccf8   /mnt
    sdc
    ├─sdc1                vfat              93DA-8C20                              /rescue/boot/efi
    ├─sdc2                xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d   /rescue/boot
    ├─sdc3
    └─sdc4                LVM2_member       BbZsAT-5oOK-nITn-bHFW-IVyS-y0O3-93oDes
    ├─rescuemevg-tmplv  xfs               9098eb05-0176-4997-8132-9152a7bef207   /rescue/tmp
    ├─rescuemevg-usrlv  xfs               2f9ff36c-742d-4914-b463-d4152801b95d   /rescue/usr
    ├─rescuemevg-optlv  xfs               aeacea8e-3663-4569-af25-c52357f8a0a3   /rescue/opt
    ├─rescuemevg-homelv xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0   /rescue/home
    ├─rescuemevg-varlv  xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86   /rescue/var
    └─rescuemevg-rootlv xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809   /rescue
    
  11. 要使用 chroot,请输入以下命令:

    sudo chroot /rescue/
    
  12. 使用以下命令验证“内部”chroot 环境的装载:

    sudo lsblk -f
    
    NAME                  FSTYPE      LABEL UUID                                   MOUNTPOINT
    sda
    ├─sda1                vfat              93DA-8C20
    ├─sda2                xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d
    ├─sda3
    └─sda4                LVM2_member       pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU
    ├─oldvg-tmplv       xfs               9098eb05-0176-4997-8132-9152a7bef207
    ├─oldvg-usrlv       xfs               2f9ff36c-742d-4914-b463-d4152801b95d
    ├─oldvg-optlv       xfs               aeacea8e-3663-4569-af25-c52357f8a0a3
    ├─oldvg-homelv      xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0
    ├─oldvg-varlv       xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86
    └─oldvg-rootlv      xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809
    sdb
    └─sdb1                ext4              e72e7c2c-db27-4a73-a97e-01d63d21ccf8
    sdc
    ├─sdc1                vfat              93DA-8C20                              /boot/efi
    ├─sdc2                xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d   /boot
    ├─sdc3
    └─sdc4                LVM2_member       BbZsAT-5oOK-nITn-bHFW-IVyS-y0O3-93oDes
    ├─rescuemevg-tmplv  xfs               9098eb05-0176-4997-8132-9152a7bef207   /tmp
    ├─rescuemevg-usrlv  xfs               2f9ff36c-742d-4914-b463-d4152801b95d   /usr
    ├─rescuemevg-optlv  xfs               aeacea8e-3663-4569-af25-c52357f8a0a3   /opt
    ├─rescuemevg-homelv xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0   /home
    ├─rescuemevg-varlv  xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86   /var
    └─rescuemevg-rootlv xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809   /
    

    现在, rescuemevg-rootlv 是挂载于 / 的。

  13. 使用以下命令重命名卷组(VG),使其保持一致。 重命名 VG 有助于避免在重新生成 initrd 并重启原始 VM 上的磁盘时可能出现的问题。

    sudo vgrename rescuemevg rootvg
    
    Volume group "rescuemevg" successfully renamed to "rootvg"
    
  14. 使用以下命令验证更改:

    sudo lsblk -f
    
    NAME              FSTYPE      LABEL UUID                                   MOUNTPOINT
    sda
    ├─sda1            vfat              93DA-8C20
    ├─sda2            xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d
    ├─sda3
    └─sda4            LVM2_member       pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU
    ├─oldvg-tmplv   xfs               9098eb05-0176-4997-8132-9152a7bef207
    ├─oldvg-usrlv   xfs               2f9ff36c-742d-4914-b463-d4152801b95d
    ├─oldvg-optlv   xfs               aeacea8e-3663-4569-af25-c52357f8a0a3
    ├─oldvg-homelv  xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0
    ├─oldvg-varlv   xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86
    └─oldvg-rootlv  xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809
    sdb
    └─sdb1            ext4              e72e7c2c-db27-4a73-a97e-01d63d21ccf8
    sdc
    ├─sdc1            vfat              93DA-8C20                              /boot/efi
    ├─sdc2            xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d   /boot
    ├─sdc3
    └─sdc4            LVM2_member       BbZsAT-5oOK-nITn-bHFW-IVyS-y0O3-93oDes
    ├─rootvg-tmplv  xfs               9098eb05-0176-4997-8132-9152a7bef207   /tmp
    ├─rootvg-usrlv  xfs               2f9ff36c-742d-4914-b463-d4152801b95d   /usr
    ├─rootvg-optlv  xfs               aeacea8e-3663-4569-af25-c52357f8a0a3   /opt
    ├─rootvg-homelv xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0   /home
    ├─rootvg-varlv  xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86   /var
    └─rootvg-rootlv xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809   /
    
  15. 执行必要的活动来修复操作系统。 这些活动可能包括重新生成 initramfs 或 GRUB 配置文件。

  16. 使用以下命令退出 chroot 环境:

    sudo exit
    
  17. 从救援 VM 卸载和分离数据磁盘,然后使用以下命令执行与原始 VM 的磁盘交换:

    umount /rescue/run/
    umount /rescue/dev/pts/
    umount /rescue/dev/ 
    umount /rescue/sys/
    umount /rescue/proc
    umount /rescue/boot/efi
    umount /rescue/boot
    umount /rescue/var
    umount /rescue/usr
    umount /rescue/tmp
    umount /rescue/opt
    umount /rescue/home
    umount /rescue
    
  18. 启动原始 VM 并验证其功能。

Oracle 7.x

  1. 停止或解除分配受影响的 VM。

  2. 使用托管磁盘在同一资源组(RSG)和位置中创建相同 OS 版本的救援 VM 映像。

  3. 使用Azure门户拍摄受影响 VM OS 磁盘的快照。

  4. 从 OS 磁盘的快照创建磁盘,并将其附加到救援 VM。

  5. 创建磁盘后,对救援 VM 上的 chroot 环境进行故障排除。

    1. 使用以下命令以根用户身份访问 VM:

      sudo su -

    2. 查找磁盘。 用于发现新磁盘的方法可能有所不同。 建议使用 dmesg 命令。 以下示例用于 dmesg 筛选 SCSI 磁盘:

      dmesg | grep SCSI

      命令输出类似于以下示例。 在此示例中,/dev/sdc 磁盘是您需要的。

      [    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
      
    3. 使用以下命令访问 chroot 环境:

      mkdir /rescue
      mount -o nouuid /dev/sdc2 /rescue
      mount -o nouuid /dev/sdc1 /rescue/boot/
      mount /dev/sdc15 /rescue/boot/efi
      
      mount -t proc /proc /rescue/proc
      mount -t sysfs /sys /rescue/sys
      mount -o bind /dev /rescue/dev
      mount -o bind /dev/pts /rescue/dev/pts
      mount -o bind /run /rescue/run
      chroot /rescue
      
    4. 排查 chroot 环境问题。

    5. 使用以下命令退出 chroot 环境:

      exit
      
      umount /rescue/proc/
      umount /rescue/sys/
      umount /rescue/dev/pts
      umount /rescue/dev/
      umount /rescue/run
      umount /rescue/boot/efi
      umount /rescue/boot
      umount /rescue
      

      备注

      如果收到“无法卸载 /rescue”错误消息,请将 -l 该选项添加到 umount 命令。 例如:umount -l /rescue。

  6. 从救援 VM 分离磁盘,然后执行与原始 VM 的磁盘交换。

  7. 启动原始 VM,并检查其连接。

SUSE-SLES 12 SP4、SUSE-SLES 12 SP4 for SAP、SUSE-SLES 15 SP1 和 SUSE-SLES 15 SP1 for SAP

  1. 停止或解除分配受影响的 VM。

  2. 使用托管磁盘在同一资源组(RSG)和位置中创建相同 OS 版本的救援 VM 映像。

  3. 使用Azure门户拍摄受影响虚拟机 OS 磁盘的快照。

  4. 从 OS 磁盘的快照创建磁盘,并将其附加到救援 VM。

  5. 创建磁盘后,对救援 VM 中的 chroot 环境进行故障排除。

    1. 使用以下命令以根用户身份访问 VM:

      sudo su -

    2. 查找磁盘。 用于发现新磁盘的方法可能会有所不同。 建议使用 dmesg 命令。 以下示例用于 dmesg 筛选 SCSI 磁盘:

      dmesg | grep SCSI

      命令输出类似于以下示例。 在此示例中,/dev/sdc 磁盘是您需要的。

      [    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
      
    3. 使用以下命令访问 chroot 环境:

      mkdir /rescue
      mount -o nouuid /dev/sdc4 /rescue
      mount -o nouuid /dev/sdc3 /rescue/boot/
      mount /dev/sdc2 /rescue/boot/efi
      
      mount -t proc /proc /rescue/proc
      mount -t sysfs /sys /rescue/sys
      mount -o bind /dev /rescue/dev
      mount -o bind /dev/pts /rescue/dev/pts
      mount -o bind /run /rescue/run
      chroot /rescue
      
    4. 排查 chroot 环境问题。

    5. 使用以下命令退出 chroot 环境:

      exit
      
      umount /rescue/proc/
      umount /rescue/sys/
      umount /rescue/dev/pts
      umount /rescue/dev/
      umount /rescue/run
      umount /rescue/boot/efi
      umount /rescue/boot
      umount /rescue
      

      备注

      如果收到错误消息“无法卸载 /rescue”,请将 -l 该选项添加到 umount 命令,例如 umount -l /rescue。

  6. 从救援 VM 分离磁盘,然后执行与原始 VM 的磁盘交换。

  7. 启动原始 VM,并检查其连接。

资料来源与适用范围

资料来源
微软官方 Linux 虚拟机排障文档
适用范围
Azure Linux 虚拟机;按正文发行版、内核及代理版本
内容语言
中文;命令、路径和错误标识保留技术原文
本地收录日期
2026-10-26
授权说明
CC BY 4.0

正文与所需资源由本站本地存储。查看来源及更新记录 ↗

请按适用版本和实际日志确认原因;本站没有对每一种系统或设备逐项执行文中的操作。