本文内容
适用于:✔️LinuxVM
本文介绍怎么解锁启用了Azurec盘加密(ADE)的OSc盘进行脱机修补。
Azurec盘加密可以应用于Microsoft认可的Linux虚拟机(VM)。下边是在LinuxVM中启用Azurec盘加密的一些基本要求:
现象
假如在OSc盘上启用了ADE,则尝试在修补VM上装载c盘后,可能会收到以下错误消息:
mount:errorfstype磁盘修复工具 linux,badoption,badsuperblockon/dev/sda2,missingcodepageorhelperprogram,orothererror
mount:未知文件系统类型“LVM2_member”
打算
在解锁加密的OSc盘进行脱机修补之前,请完成以下任务:
上已启用ADE。c盘。的方式。验证是否已在c盘上启用ADE
可以在Azure门户、PowerShell或Azure命令行插口(AzureCLI)中执行此步骤。
Azure门户
在Azure门户中查看失败的VM的“概述”边栏选项卡。在“磁盘”下,Azurec盘加密条目将显示为“已启用”或“未启用”,如以下屏幕截图所示。
PowerShell
可以使用Get-AzVmDiskEncryptionStatuscmdlet来确定VM的OS或数据卷是使用ADE加密的。以下示例输出指示OS卷上启用了ADE加密:
Get-AzVmDiskEncryptionStatus -ResourceGroupName "ResourceGroupName" -VMName "VmName"
有关cmdlet的详尽信息Get-AzureRmDiskEncryptionStatus,请参阅Get-AzVMDiskEncryptionStatus(Az.Compute)。
AzureCLI
可以使用azvmencryptionshow该命令检测VMc盘上是否启用了ADE:
az vm encryption show --name MyVM --resource-group MyResourceGroup --query "disks[].encryptionSettings[].enabled"
有关命令的详尽信息azvmencryptionshow,请参阅。
注意
假如未在c盘上启用ADE,请参阅以下文章,了解怎样将c盘附加到修补VM:通过将OSc盘附加到修补VM对LinuxVM进行故障排除。
确定OSc盘使用ADE版本0(双传递加密)还是ADE版本1(单传递加密)
可以通过打开VM的属性,之后选择“扩展”以打开“扩展”边栏选项卡来标示Azure门户中的ADE版本。在“扩展”边栏选项卡上,查看AzureDiskEncryptionForLinux的版本号。
假如c盘使用ADE版本0(双重传递加密),请使用解锁c盘。
确定OSc盘是托管c盘还是非托管c盘
假如不晓得OSc盘是托管c盘还是非托管c盘,请参阅c盘。
假如OSc盘是非托管c盘,请根据方式3步骤解锁c盘。
选择解锁加密c盘的方式
选择以下方式之一以解锁加密c盘:
方式1:使用azvmrepair命令手动解锁加密c盘
此方式依赖于azvmrepair命令手动创建修补VM,将失败的LinuxVM的OSc盘附加到该修补VM,之后在c盘加密时解锁c盘。此方式须要使用修补VM的公共IP地址,无论ADE秘钥是解包还是使用秘钥加密秘钥(KEK)来解锁加密c盘。
若要使用此手动化方式修补VM,请使用Azure虚拟机修补命令执行修补LinuxVM中的步骤。
假如基础结构和公司策略不容许分配公共IP地址,或则azvmrepair命令未解锁c盘,请转入下一种方式。
方式2:通过BEK卷中的秘钥文件解锁加密c盘
若要自动解锁和装载加密c盘,请执行以下步骤:
。
创建修补VM时,必须附加加密c盘。这是由于系统检查到附加的c盘已加密。因而,它会从Azure秘钥保管库中提取ADE秘钥,之后创建名为“BEKVOLUME”的新卷来储存秘钥文件。
上卸载任何装载的分区。
中的ADE秘钥文件。
的启动分区中的头文件。
解锁加密c盘。
装载分区:、。
创建修补VM
的快照。
创建c盘。对于新c盘,请选择与要修补的问题VM相同的位置和可用性区域。
创建基于以下准则的VM:
在“创建虚拟机”向导的“磁盘”页上,附加新c盘(刚才从快照创建)作为数据c盘。
重要
因为仅在创建VM期间检查到加密设置,因而请确保在创建VM时附加c盘。这容许包含要手动添加到VM的ADE秘钥文件的卷。
卸载加密c盘上装载的任何已装载分区
创建修补VM后,通过SSH登入到修补VM,使用相应的凭据登陆,之后将账户提高到根目录:
sudo -s
使用lsblk命令列举附加的设备。在输出中,应会听到多个附加c盘。这种c盘包括活动OSc盘和加密c盘。它们可以按任意次序显示。
使用以下信息标示加密c盘:
在以下示例中,输出指示“sdd”是加密c盘。这是惟一具有多个分区且未将“/”列为放入点的c盘。
卸载已在文件系统中装载的加密数据c盘上的任何分区。诸如,在上面的示例中,必须卸载“/boot/efi”*和“/boot”。
umount /boot/efi
umount /boot
标示ADE秘钥文件
必须同时具有秘钥文件和头文件能够解锁加密c盘。秘钥文件储存在BEK卷中,头文件坐落加密OSc盘的启动分区中。
确定那个分区是BEK卷:
lsblk -fs | grep -i bek
以下示例输出指示sdb1是BEK卷:
>sdb1 vfat BEK VOLUME 04A2-FE67
假如不存在BEK卷,请通过附加加密c盘重新创建修补VM。假如BEK卷尚未手动附加,检索BEK卷。
在“/mnt”文件夹下创建名为“azure_bek_disk”的目录:
mkdir /mnt/azure_bek_disk
将BEK卷装载到“/mnt/azure_bek_disk”目录中。诸如,假如sdb1是BEK卷,请输入以下命令:
mount /dev/sdb1 /mnt/azure_bek_disk
再度列举可用设备:
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
注意:你将见到确定为BEK卷的分区现今装载在“/mnt/azure_bek_disk”。
查看“/mnt/azure_bek_disk/”目录中的内容:
ls -l /mnt/azure_bek_disk
输出中应见到以下文件(ADE秘钥文件为“LinuxPassPhraseFileName”):
>total 1
-rwxr-xr-x 1 root root 148 Aug 4 01:04 CRITICAL_DATA_WARNING_README.txt
-r-xr-xr-x 1 root root 172 Aug 4 01:04 LinuxPassPhraseFileName
假如多个c盘附加到加密的VM,可能会听到多个“LinuxPassPhraseFileName”。“LinuxPassPhraseFileName”将按其逻辑单元数(LUN)相同的次序枚举c盘数。
标示头文件
加密c盘的启动分区包含头文件。你将使用此文件以及“LinuxPassPhraseFileName”密钥文件来解锁加密的c盘。
使用以下命令显示可用c盘和分区的选取属性:
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
在加密c盘上,标示OS分区(根分区)。这是加密c盘上最大的分区。在上面的示例输出中,OS分区为“sda4”。运行解锁命令时,必须指定此分区。
在文件结构的根目录(“/”)中创建一个目录,用于装载加密c盘的根分区。稍后将在c盘解锁后使用此目录。若要将其与修补VM的活动OS分区区区分开来,请为其命名为“调查根”。
mkdir /{investigateboot,investigateroot}
在加密c盘上,标示包含头文件的启动分区。在加密c盘上,启动分区是第二大分区,在LABEL或PARTLABEL列中不显示任何值。在上面的示例输出中,加密c盘的启动分区为“sda2”。
将步骤4中标示的启动分区装载到/investigateboot/目录中。在以下示例中,加密c盘的启动分区为sda2。并且,系统上的位置可能会有所不同。
mount /dev/sda2 /investigateboot/
假如装载分区失败并返回“错误的fs类型、错误选项、错误的超级锁”错误消息,请使用以下命令重试mount-onouuid,如以下示例所示:
mount -o nouuid /dev/sda2 /investigateboot/
列举/investigateboot/目录中的文件。“luks”子目录包含必须解锁c盘的头文件。
列举/investigateboot/luks/目录中的文件。头文件名为“osluksheader”。
ls -l /investigateboot/luks
使用ADE秘钥文件和头文件解锁c盘
cryptsetupluksOpen使用命令解锁加密c盘上的根分区。诸如,假如包含加密OS的根分区的路径为/dev/sda4,但是要将名称“osencrypt”分配给解锁的分区linux操作系统怎么样,请运行以下命令:
cryptsetup luksOpen --key-file /mnt/azure_bek_disk/LinuxPassPhraseFileName --header /investigateboot/luks/osluksheader /dev/sda4 osencrypt
解锁c盘后,请从/investigateboot/目录卸载加密c盘的启动分区:
umount /investigateboot/
注意:稍后必须将此分区装载到另一个目录。
下一步是装载刚才解锁的分区。用于装载分区的方式取决于c盘使用的设备映射器框架(LVM或非LVM)。
将设备信息与文件系统类型一起列举:
lsblk -o NAME,FSTYPE
你将见到已解锁分区和分配给它的名称(在我们的示例中,该名称为“osencrypt”):
装载解锁分区并输入chroot环境(仅限LVM)
假如c盘使用LVM设备映射器框架,则必须采取额外的步骤来装载c盘并输入chroot环境。若要将chroot工具与加密c盘一起使用,必须将解锁的分区(“osencrypt”)及其逻辑卷辨识为名为rootvg的卷组。并且,默认情况下,修补VM的OS分区及其逻辑卷已分配给名为rootvg的卷组。我们必须解决此冲突,之后才会继续。
pvs使用命令显示LVM化学卷的属性。你可能会见到警告消息,如以下示例所示磁盘修复工具 linux,指示解锁的分区(“/dev/mapper/osencrypt”)和其他设备正在使用重复的通用惟一标示符(UUID)。或则,你可能会见到分配给rootvg的两个分区。
注意
你只希望将解锁的分区(“osencrypt”)分配到rootvg卷组,便于可以通过chroot实用工具访问其逻辑卷。若要解决此问题,你将暂时将分区导出其他卷组,并激活该卷组。接出来,重命名当前rootvg卷组。只有在输入chroot环境后,才能将加密c盘的卷组重命名为“rootvg”。
分配解锁分区(示例)
将新解锁的分区导出到新的卷组中。在此示例中,我们将临时命名新的卷组“rescuemevg”。将新解锁的分区导出到新的卷组中。在此示例中,我们将临时命名新的卷组“rescuemevg”。
激活新的卷组:
vgimportclone -n rescuemevg /dev/mapper/osencrypt
vgchange -a y rescuemevg
重命名旧的rootvg卷组。在此示例中,我们将使用名称“oldvg”。
vgrename rootvg oldvg
运行lsblk-oNAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT以查看可用的设备。现今应会听到分配给它们的名称列举的这两个卷组。
将rescuemevg/rootlv逻辑卷装载到/investigateroot/目录,而无需使用重复的UUID:
umount /investigateboot
mount -o nouuid /dev/rescuemevg/rootlv /investigateroot/
如今,失败的VM的根分区已解锁并装载,应当才能访问根分区来排查问题。有关详尽信息,请参阅。
然而,假若要使用chroot实用工具进行故障排除,请继续执行以下步骤。
将加密c盘的启动分区装载到目录/investigateroot/boot/,而不使用重复的UUID。(请记住,加密c盘的启动分区是未分配分区标签的第二大分区。在我们的当前示例中,加密c盘的启动分区为sda2。
mount -o nouuid /dev/sda2 /investigateroot/boot

将加密c盘的EFI系统分区装载到/investigateroot/boot/efi目录。可以通过其标签标示此分区。在我们的当前示例中,EFI系统分区为sda1。
mount /dev/sda1 /investigateroot/boot/efi
将加密c盘卷组中剩余的卸载逻辑卷装载到“/investigateroot/”的子目录中:
mount -o nouuid /dev/mapper/rescuemevg-varlv /investigateroot/var
mount -o nouuid /dev/mapper/rescuemevg-homelv /investigateroot/home
mount -o nouuid /dev/mapper/rescuemevg-usrlv /investigateroot/usr
mount -o nouuid /dev/mapper/rescuemevg-tmplv /investigateroot/tmp
mount -o nouuid /dev/mapper/rescuemevg-optlv /investigateroot/opt
将ActiveDirectory修改为加密c盘上装载的根分区:
cd /investigateroot
输入以下命令以打算chroot环境:
mount -t proc proc proc
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -o bind /dev/pts dev/pts/
mount -o bind /run run/
输入chroot环境:
chroot /investigateroot/
将rescuemevg卷组重命名为“rootvg”,以防止grub和initramfs出现冲突或可能的问题。重新生成initramfs时,请保留相同的命名约定。因为vg名称修改,因而在搜救VM上工作。假如重新启动它,它将不再有用。应将搜救VM视为临时VM。
vgrename rescuemevg rootvg
排查chroot环境中的问题。诸如,可以读取日志或运行脚本。有关详尽信息,请参阅执行修复程序。
。
装载解锁的c盘,并输入chroot环境(RAW/非LVM)
在文件结构的根目录(“/”)中创建一个目录,用于装载加密c盘的根分区。稍后将在c盘解锁后使用此目录。若要将其与修补VM的活动OS分区区区分开来,请将其命名为“调查根”。
mkdir /{investigateboot,investigateroot}
将新解锁的分区(“osencrypt”)装载到/investigateroot/目录:
mount /dev/mapper/osencrypt /investigateroot/
假如装载分区失败并返回“错误的fs类型、错误选项、错误的超级锁”错误消息,请使用装载-onouuid命令重试:
mount -o nouuid /dev/mapper/osencrypt /investigateroot/

尝试显示/investigateroot/目录的内容,以验证装载的分区现今是否已解锁:
ls /investigateroot/
如今,失败的VM的根分区已解锁并装载,可以访问根分区来排查问题。有关详尽信息,请参阅。
然而,假若要使用chroot实用工具进行故障排除,请转入下一步。
使用命令lsblk-oNAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT查看可用的设备。将加密c盘上的启动分区标示为未分配任何标签的第二大分区。
将加密c盘上的启动分区装载到“/investigateroot/boot/”目录,如以下示例所示:
mount /dev/sdc2 /investigateroot/boot/
将ActiveDirectory修改为加密c盘上装载的根分区:
cd /investigateroot
输入以下命令以打算chroot环境:
mount -t proc proc proc
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -o bind /dev/pts dev/pts/
mount -o bind /run run/
输入chroot环境:
chroot /investigateroot/
排查chroot环境中的问题。可以读取日志或运行脚本。有关详尽信息,请参阅执行修复程序。
。
方式3:重新加密c盘以检索秘钥文件,并解锁加密的c盘
创建修补VM,并将锁定c盘的副本附加到修补VM:
将加密c盘作为数据c盘附加到修补VM后,请使用用于原始VM重新加密此数据c盘的秘钥库和秘钥加密秘钥(KEK)。此过程将使用修补VM中的BKE秘钥文件手动生成和装载BEK卷。不能使用EncryptFormatAll选项,由于ADE扩充可以加密数据c盘上的启动磁道。
运行以下命令,检测是否附加了新c盘:
lsblk -f
假如附加了新c盘,请转入中的ADE秘钥文件,之后继续依照提供的步骤解锁c盘。
后续步骤
假如在联接到VM时遇见问题,请参阅排查与AzureVM的SSH联接问题。
联系我们寻求帮助
假如你有任何疑惑或须要帮助,请或联系Azure社区支持。你还可以将产品反馈递交到Azure反馈社区。