解除鎖定加密的Linux磁碟以進行離線修復
本文說明如何解除鎖定 Azure 磁碟加密 (啟用 ADE) 操作系統磁碟以進行離線修復。
Azure 磁碟加密可以套用至 Microsoft 背書的 Linux 虛擬機, (VM) 。 以下是在 Linux VM 中啟用 Azure 磁碟加密的一些基本需求:
- Azure Key Vault
- Azure CLI 或 Windows PowerShell Cmdlet
- DM) -Crypt (裝置對應程式
徵狀
如果 OS 磁碟上已啟用 ADE,您可能會在嘗試在修復 VM 上掛接磁碟之後收到下列錯誤訊息:
mount:錯誤的 fs 類型、錯誤的選項、/dev/sda2 上的 badlock、遺漏代碼頁或協助程式或其他錯誤
mount:未知的檔案系統類型 'LVM2_member'
準備
在您解除鎖定加密的 OS 磁碟以進行離線修復之前,請完成下列工作:
- 確認已在磁碟上啟用 ADE。
- 判斷 OS 磁碟是否使用 ADE 第 0 版 (雙重傳遞加密) 或 ADE 第 1 版 (單一傳遞加密) 。
- 判斷OS磁碟是受控還是非受控。
- 選取方法以解除鎖定加密的磁碟。
確認已在磁碟上啟用 ADE
您可以在 Azure CLI) (Azure 入口網站、PowerShell 或 Azure 命令行介面中執行此步驟。
Azure 入口網站
檢視 Azure 入口網站 中失敗 VM 的 [概觀] 刀鋒視窗。 在 [磁碟] 下方, Azure 磁碟加密 項目會顯示為 [ 已啟用 ] 或 [ 未啟用],如下列螢幕快照所示。
PowerShell
您可以使用 Cmdlet Get-AzVmDiskEncryptionStatus
來判斷 VM 的 OS 或資料磁碟區是否使用 ADE 加密。 下列範例輸出指出已在 OS 磁碟區上啟用 ADE 加密:
Get-AzVmDiskEncryptionStatus -ResourceGroupName "ResourceGroupName" -VMName "VmName"
如需 Cmdlet 的 Get-AzureRmDiskEncryptionStatus
詳細資訊,請參閱 Get-AzVMDiskEncryptionStatus (Az.Compute) 。
Azure CLI
您可以使用 az vm encryption show
命令來檢查 VM 磁碟上是否已啟用 ADE:
az vm encryption show --name MyVM --resource-group MyResourceGroup --query "disks[].encryptionSettings[].enabled"
如需命令的 az vm encryption show
詳細資訊,請參閱 az vm encryption show。
注意事項
如果磁碟上未啟用 ADE,請參閱下列文章以瞭解如何將磁碟連結至修復 VM:將 OS 磁碟連結至修復 VM 以針對 Linux VM 進行疑難解答。
判斷OS磁碟是使用 ADE 第 0 版 (雙重傳遞加密) 還是 ADE 第 1 版 (單一傳遞加密)
您可以開啟 VM 的屬性,然後選取 [擴充功能] 以開啟 [擴充功能] 刀鋒視窗,以識別 Azure 入口網站 中的 ADE 版本。 在 [ 延伸模組] 刀鋒視窗上,檢視 AzureDiskEncryptionForLinux 的版本號碼。
- 如果版本號碼為
0.*
,則磁碟會使用雙重傳遞加密。 - 如果版本號碼為
1.*
或更新版本,則磁碟會使用單一傳遞加密。
如果您的磁碟使用 ADE 第 0 版 (雙重傳遞加密) ,請使用 方法 3 解除鎖定磁碟。
判斷OS磁碟是受控還是非受控
如果您不知道 OS 磁碟是受控還是非受控,請參閱 判斷 OS 磁碟是受控還是非受控。
如果 OS 磁碟是非受控磁碟,請遵循 方法 3 中的步驟來解除鎖定磁碟。
選取可解除鎖定加密磁碟的方法
選擇下列其中一種方法來解除鎖定加密的磁碟:
- 如果使用 ADE 第 1 版來管理和加密磁碟,而且您的基礎結構和公司原則可讓您將公用 IP 位址指派給修復 VM,請使用 方法 1:使用 az vm repair 命令自動解除鎖定加密的磁碟。
- 如果您的磁碟同時使用 ADE 第 1 版進行管理和加密,但您的基礎結構或公司原則會防止您將公用 IP 位址指派給修復 VM,請使用 方法 2:透過 BEK 磁碟區中的密鑰檔案解除鎖定加密的磁碟。 選擇此方法的另一個原因是您沒有在 Azure 中建立資源群組的許可權。
- 如果其中一種方法失敗,或是使用 ADE 第 1 版將磁碟非受控或加密, (雙重傳遞加密) ,請遵循 方法 3 中的步驟解除鎖定磁碟。
方法 1:使用 az vm repair 命令自動解除鎖定加密的磁碟
此方法依賴 az vm repair 命令來自動建立修復 VM、將失敗 Linux VM 的 OS 磁碟連結至該修復 VM,然後在磁碟已加密時將其解除鎖定。 此方法需要使用修復 VM 的公用 IP 位址,而且不論 ADE 金鑰是使用金鑰加密金鑰解除包裝還是使用金鑰加密金鑰包裝,它都會解除鎖定加密的磁碟 (KEK) 。
若要使用此自動化方法修復 VM,請遵循 使用 Azure 虛擬機修復命令修復 Linux VM 中的步驟。
如果您的基礎結構和公司原則不允許您指派公用IP位址,或命令 az vm repair
未解除鎖定磁碟,請移至下一個方法。
方法 2:透過 BEK 磁碟區中的金鑰檔案解除鎖定加密的磁碟
若要手動解除鎖定並掛接加密的磁碟,請遵循下列步驟:
建立新的修復 VM,並在 VM 建立期間將加密的磁碟連結至此 VM。
當您建立修復 VM 時,必須連結加密的磁碟。 這是因為系統偵測到連結的磁碟已加密。 因此,它會從您的 Azure 金鑰保存庫擷取 ADE 金鑰,然後建立名為 “BEK VOLUME” 的新磁碟區來儲存密鑰檔案。
掛接數據分割: LVM、 RAW 或非 LVM。
建立修復 VM
從快照集建立磁碟。 針對新的磁碟,選擇與您想要修復的問題 VM 相同的位置和可用性區域。
根據下列指導方針建立 VM:
- 在 Azure Marketplace 中,針對故障 VM 所使用的修復 VM 選擇相同的映像。 (操作系統版本應該相同。)
- 選擇至少配置 8 GB 記憶體給 VM 的大小。
- 將這個新的 VM 指派給您在步驟 2 中建立的新磁碟所使用的相同資源群組、區域和可用性設定。
在 [建立虛擬機精靈] 的 [磁碟] 頁面上,將您剛從快照集建立的新磁碟 (連結) 為數據磁碟。
重要事項
由於加密設定只會在 VM 建立期間偵測到,因此請務必在建立 VM 時連結磁碟。 這可讓包含 ADE 金鑰檔案的磁碟區自動新增至 VM。
在加密的磁碟上卸除任何掛接的磁碟分區
建立修復 VM 之後,透過 SSH 連線到修復 VM、使用適當的認證登入,然後將帳戶提升至根目錄:
sudo -s
使用 lsblk 命令列出連結的裝置。 在輸出中,您應該會看到多個連結的磁碟。 這些磁碟包括使用中的OS磁碟和加密的磁碟。 它們可以依任何順序顯示。
使用下列資訊來識別加密的磁碟:
- 磁碟將會有多個磁碟分區
- 磁碟不會列出根目錄 (“/”) 作為其任何分割區的裝入點。
- 磁碟會符合您從快照集建立磁碟時記下的大小。
在下列範例中,輸出會指出 「sdd」 是加密的磁碟。 這是唯一具有多個磁碟分區的磁碟,而且不會將 “/” 列為裝入點。
卸除已掛接在文件系統中之加密數據磁碟上的任何磁碟分區。 例如,在上一個範例中,您必須同時卸除 “/boot/efi”* 和 “/boot”。
umount /boot/efi umount /boot
識別 ADE 金鑰檔案
您必須同時擁有金鑰檔案和標頭檔,才能解除鎖定加密的磁碟。 密鑰檔案會儲存在 BEK 磁碟區中,而頭檔位於加密 OS 磁碟的開機磁碟分區中。
判斷哪個磁碟分區是 BEK 磁碟區:
lsblk -fs | grep -i bek
下列範例輸出指出 sdb1 是 BEK 磁碟區:
>sdb1 vfat BEK VOLUME 04A2-FE67
如果沒有 BEK 磁碟區存在,請藉由連結加密的磁碟來重新建立修復 VM。 如果 BEK 磁碟區仍未自動附加, 請嘗試方法 3 擷取 BEK 磁碟區。
在 “/mnt” 資料夾下建立名為 「azure_bek_disk」 的目錄:
mkdir /mnt/azure_bek_disk
在 「/mnt/azure_bek_disk」 目錄中掛接 BEK 磁碟區。 例如,如果 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
如果有多個磁碟連結至加密的 VM,您可能會看到多個 “LinuxPassPhraseFileName”。 “LinuxPassPhraseFileName” 會根據磁碟數目列舉,順序與其邏輯單元編號 (LUN) 相同。
識別頭檔
加密磁碟的開機磁碟分區包含頭檔。 您將使用此檔案與 「LinuxPassPhraseFileName」 金鑰檔案來解除鎖定加密的磁碟。
使用下列命令來顯示可用磁碟和磁碟分區的選取屬性:
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
在加密的磁碟上,識別根數據分割) (OS 磁碟分區。 這是加密磁碟上最大的磁碟分區。 在先前的範例輸出中,OS 磁碟分區是 「sda4」。當您執行解除鎖定命令時,必須指定此分割區。
在檔案結構的根目錄 (“/”) 中,建立要掛接加密磁碟根數據分割的目錄。 您稍後會在磁碟解除鎖定之後使用此目錄。 若要區別修復 VM 的作用中 OS 磁碟分區,請將名稱命名為 “investigateroot”。
mkdir /{investigateboot,investigateroot}
在加密的磁碟上,識別包含頭檔的開機磁碟分區。 在加密的磁碟上,開機磁碟分區是第二大磁碟分區,在 LABEL 或 PARTLABEL 數據行中未顯示任何值。 在先前的範例輸出中,加密磁碟的開機磁碟分區是 “sda2”。
將您在步驟 4 中識別的開機磁碟分區掛接至 /investigateboot/ 目錄。 在下列範例中,加密磁碟的開機磁碟分區是 sda2。 不過,您系統上的位置可能會不同。
mount /dev/sda2 /investigateboot/
如果掛接數據分割失敗並傳回「錯誤的 fs 類型、錯誤選項、錯誤的惡意封鎖」錯誤訊息,請使用 命令再試一
mount -o nouuid
次,如下列範例所示:mount -o nouuid /dev/sda2 /investigateboot/
列出 /investigateboot/ 目錄中的檔案。 “luks” 子目錄包含您必須解除鎖定磁碟的頭檔。
列出 /investigateboot/luks/ 目錄中的檔案。 標頭檔名稱為 「osluksheader」。
ls -l /investigateboot/luks
使用 ADE 金鑰檔案和頭檔將磁碟解除鎖定
使用 命令
cryptsetup luksOpen
來解除鎖定加密磁碟上的根磁碟分區。 例如,如果包含加密OS的根資料分割路徑是 /dev/sda4,而且您想要將名稱 「osencrypt」 指派給解除鎖定的數據分割,請執行下列命令:cryptsetup luksOpen --key-file /mnt/azure_bek_disk/LinuxPassPhraseFileName --header /investigateboot/luks/osluksheader /dev/sda4 osencrypt
現在您已解除鎖定磁碟,請從 /investigateboot/ 目錄卸除加密磁碟的開機磁碟分區:
umount /investigateboot/
注意: 您稍後必須將此分割區掛接至另一個目錄。
下一個步驟是掛接您剛才解除鎖定的數據分割。 您用來掛接磁碟分區的方法取決於磁碟所使用的裝置對應程式架構 (LVM 或非 LVM) 。
列出裝置資訊以及檔案系統類型:
lsblk -o NAME,FSTYPE
在我們的範例中,您會看到已解除鎖定的分割區,以及您指派給它的名稱 (,該名稱是 “osencrypt”) :
- 如需「LVM_member」等 LVM 磁碟分區,請參閱 掛接 LVM 磁碟分區RAW 或非 LVM。
- 針對非 LVM 磁碟分區,請參閱 掛接非 LVM 磁碟分區。
掛接解除鎖定的磁碟分區,並僅 (LVM 輸入 chroot 環境)
如果磁碟使用 LVM 裝置對應程式架構,您必須採取額外的步驟來掛接磁碟並進入 Chroot 環境。 若要將 Chroot 工具與加密的磁碟搭配使用,解除鎖定的磁碟分區 (“osencrypt”) 及其邏輯磁碟區必須辨識為名為 rootvg 的磁碟區群組。 不過,根據預設,修復 VM 的 OS 磁碟分區及其邏輯磁碟區已指派給名稱為 rootvg 的磁碟區群組。 我們必須解決此衝突,才能繼續。
pvs
使用 命令來顯示 LVM 實體磁碟區的屬性。 您可能會看到警告訊息,如下列範例所示,表示已解除鎖定的磁碟分區 (“/dev/mapper/osencrypt”) 而另一個裝置使用重複的通用唯一標識符 (UUID) 。 或者,您可能會看到指派給 rootvg 的兩個分割區。注意事項
您只想要將解除鎖定的磁碟分區 (“osencrypt”) 指派給 rootvg 磁碟區群組,讓您可以透過 chroot 公用程式存取其邏輯磁碟區。 若要修正此問題,您將暫時將磁碟分區匯入不同的磁碟區群組,並啟動該磁碟區群組。 接下來,您將重新命名目前的 rootvg 磁碟區群組。 只有在您進入 Chroot 環境之後,您才會將加密磁碟的磁碟區群組重新命名為 “rootvg”。
指派解除鎖定的數據分割 (範例)
將新解除鎖定的磁碟分區匯入至新的磁碟區群組。 在此範例中,我們會暫時將新的磁碟區群組命名為 “rescuemevg”。 將新解除鎖定的磁碟分區匯入至新的磁碟區群組。 在此範例中,我們會暫時將新的磁碟區群組命名為 “rescuemevg”。
開啟新的磁碟區群組:
vgimportclone -n rescuemevg /dev/mapper/osencrypt vgchange -a y rescuemevg
重新命名舊的 rootvg 磁碟區群組。 在此範例中,我們將使用名稱 「oldvg」。
vgrename rootvg oldvg
執行
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
以檢閱可用的裝置。 您現在應該會看到這兩個磁碟區群組由您指派給他們的名稱列出。將 rescuemevg/rootlv 邏輯磁碟區掛接至 /investigateroot/ 目錄,而不使用重複的 UUID:
umount /investigateboot mount -o nouuid /dev/rescuemevg/rootlv /investigateroot/
現在,已解除鎖定並掛接失敗 VM 的根分割區,您應該能夠存取根數據分割來針對問題進行疑難解答。 如需詳細資訊,請參閱 針對因文件系統錯誤而造成的 Linux 虛擬機開機問題進行疑難解答。
不過,如果您想要使用 Chroot 公用程式進行疑難解答,請繼續使用下列步驟。
將加密磁碟的開機磁碟分區掛接至目錄 /investigateroot/boot/,而不使用重複的 UUID。 (請記住,加密磁碟的開機磁碟分區是未指派任何磁碟分區卷標的第二大磁碟分區。) 在我們的目前範例中,加密磁碟的開機磁碟分區是 sda2。
mount -o nouuid /dev/sda2 /investigateroot/boot
將加密磁碟的 EFI 系統分割區掛接至 /investigateroot/boot/efi 目錄。 您可以依標籤識別此分割區。 在我們的目前範例中,EFI 系統分割區是 sda1。
mount /dev/sda1 /investigateroot/boot/efi
將加密磁碟的磁碟區群組中剩餘未掛接的邏輯磁碟區掛接至 “/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
將 Active Directory 變更為加密磁碟上已掛接的根分割區:
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/
將 healthcaremevg 磁碟區群組重新命名為 “rootvg”,以避免 grub 和 initramfs 發生衝突或可能發生問題。 當您重新產生 initramfs 時,請保留相同的命名慣例。 因為 vg 名稱變更,所以請在救援 VM 上工作。 如果您將它重新啟動,它將不再有用。 應將救援 VM 視為暫時 VM。
vgrename rescuemevg rootvg
針對 Chroot 環境中的問題進行疑難解答。 例如,您可以讀取記錄或執行腳本。 如需詳細資訊,請 參閱在 Chroot 環境中執行修正。
掛接已解除鎖定的磁碟,並 (RAW/非 LVM) 輸入Chroot環境
在檔案結構的根目錄 (“/”) 中,建立要掛接加密磁碟根分割的目錄。 您稍後會在磁碟解除鎖定之後使用此目錄。 若要區別修復 VM 的作用中 OS 磁碟分區,請將其命名為 “investigateroot”。
mkdir /{investigateboot,investigateroot}
將新解除鎖定的數據分割 (“osencrypt”) 掛接至 /investigateroot/ 目錄:
mount /dev/mapper/osencrypt /investigateroot/
如果掛接分割區失敗並傳回「錯誤的 fs 類型、錯誤選項、錯誤的惡意封鎖」錯誤訊息,請使用掛接
-o nouuid
命令再試一次:mount -o nouuid /dev/mapper/osencrypt /investigateroot/
嘗試顯示 /investigateroot/ 目錄的內容,以確認掛接的數據分割現在已解除鎖定:
ls /investigateroot/
現在已解除鎖定並掛接失敗 VM 的根分割區,您可以存取根數據分割來針對問題進行疑難解答。 如需詳細資訊,請參閱 針對因文件系統錯誤而造成的 Linux 虛擬機開機問題進行疑難解答。
不過,如果您想要使用 Chroot 公用程式進行疑難解答,請移至下一個步驟。
使用 命令
lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
來檢閱可用的裝置。 將加密磁碟上的開機磁碟分區識別為未指派任何標籤的第二大磁碟分區。將加密磁碟上的開機磁碟分區掛接至 “/investigateroot/boot/” 目錄,如下列範例所示:
mount /dev/sdc2 /investigateroot/boot/
將 Active Directory 變更為加密磁碟上已掛接的根分割區:
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 環境中的問題進行疑難解答。 您可以讀取記錄或執行文稿。 如需詳細資訊,請 參閱在 Chroot 環境中執行修正。
方法 3:重新加密磁碟以擷取金鑰檔案,並解除鎖定加密的磁碟
建立修復 VM,並將鎖定磁碟的復本連結至修復 VM:
- 針對受控磁碟,請參閱將受控 OS 磁碟連結至修復 VM,以針對 Linux VM 進行疑難解答。
- 針對非受控磁碟,請使用 儲存體總管 來建立受影響 VM OS 磁碟的復本。 如需詳細資訊,請參閱 將非受控磁碟連結至 VM 以進行離線修復。
將加密磁碟當做數據磁碟連接至修復 VM 之後,請使用 金鑰保存庫 和金鑰加密金鑰 (KEK) ,以重新加密此數據磁碟。 此程式會使用修復 VM 中的 BKE 金鑰檔案,自動產生和掛接 BEK 磁碟區。 您不能使用 EncryptFormatAll 選項,因為 ADE 延伸模組可以加密數據磁碟上的開機扇區。
如果原始 VM 是由包裝的 BEK 加密,請執行下列命令。
az vm encryption enable -g "resource group" --name "VMName" --disk-encryption-keyvault "keyvault" --key-encryption-key "kek" --volume-type "data"
如果原始 VM 已由 BEK 加密,請執行下列命令:
az vm encryption enable -g "resource group" --name "VMName" --disk-encryption-keyvault "keyvault" --volume-type "data"
若要判斷 disk-encryption-keyvault 和 key-encryption-key 的值,請執行下列命令:
az vm encryption show --name "OriginalVmName" --resource-group "ResourceGroupName"
在下表中,尋找輸出中的值。 如果 keyEncryptionKey 值空白,您的 VM 會由 BEK 加密。
參數 輸出中的值 範例 disk-encryption-keyvault diskEncryptionKey:id /subscriptions/deb73ff9-0000-0000-0000-0000c7a96d37/resourceGroups/Thomas/providers/Microsoft.KeyVault/vaults/ContosoKeyvault key-encryption-key keyEncryptionKey:KeyURI https://ContosoKeyvault.vault.azure.net/keys/mykey/00000000987145a3b79b0ed415fa0000
執行下列命令以檢查是否已連結新的磁碟:
lsblk -f
如果已連結新的磁碟,請移至 識別 BEK 磁碟區中的 ADE 金鑰檔案,然後繼續遵循提供的步驟來解除鎖定磁碟。
後續步驟
如果您在連線到 VM 時遇到問題,請參閱 針對 Azure VM 的 SSH 連線進行疑難解答。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應