本文内容

适用于:✔️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盘加密条目将显示为“已启用”或“未启用”,如以下屏幕截图所示。

Azure 门户中 V M 的概述边栏选项卡的屏幕截图,其中显示了磁盘上启用了 A D E。

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盘,请转入下一种方式。

磁盘修复工具怎么使用_磁盘修复工具下载_磁盘修复工具 linux

方式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卷。

磁盘修复工具怎么使用_磁盘修复工具下载_磁盘修复工具 linux

在“/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”。

磁盘修复工具 linux_磁盘修复工具怎么使用_磁盘修复工具下载

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

磁盘修复工具 linux_磁盘修复工具下载_磁盘修复工具怎么使用

将加密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/ 

磁盘修复工具 linux_磁盘修复工具下载_磁盘修复工具怎么使用

尝试显示/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反馈社区。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复