Share via


解除鎖定加密的Linux磁碟以進行離線修復

本文說明如何解除鎖定 Azure 磁碟加密 (啟用 ADE) 操作系統磁碟以進行離線修復。

Azure 磁碟加密可以套用至 Microsoft 背書的 Linux 虛擬機, (VM) 。 以下是在 Linux VM 中啟用 Azure 磁碟加密的一些基本需求:

徵狀

如果 OS 磁碟上已啟用 ADE,您可能會在嘗試在修復 VM 上掛接磁碟之後收到下列錯誤訊息:

mount:錯誤的 fs 類型、錯誤的選項、/dev/sda2 上的 badlock、遺漏代碼頁或協助程式或其他錯誤

mount:未知的檔案系統類型 'LVM2_member'

準備

在您解除鎖定加密的 OS 磁碟以進行離線修復之前,請完成下列工作:

  1. 確認已在磁碟上啟用 ADE
  2. 判斷 OS 磁碟是否使用 ADE 第 0 版 (雙重傳遞加密) 或 ADE 第 1 版 (單一傳遞加密)
  3. 判斷OS磁碟是受控還是非受控
  4. 選取方法以解除鎖定加密的磁碟

確認已在磁碟上啟用 ADE

您可以在 Azure CLI) (Azure 入口網站、PowerShell 或 Azure 命令行介面中執行此步驟。

Azure 入口網站

檢視 Azure 入口網站 中失敗 VM 的 [概觀] 刀鋒視窗。 在 [磁碟] 下方, Azure 磁碟加密 項目會顯示為 [ 已啟用 ] 或 [ 未啟用],如下列螢幕快照所示。

Azure 入口網站中 V M 概觀刀鋒視窗的螢幕快照,其中顯示已在磁碟上啟用 A D E。

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 磁碟區中的金鑰檔案解除鎖定加密的磁碟

若要手動解除鎖定並掛接加密的磁碟,請遵循下列步驟:

  1. 建立新的修復 VM,並在 VM 建立期間將加密的磁碟連結至此 VM

    當您建立修復 VM 時,必須連結加密的磁碟。 這是因為系統偵測到連結的磁碟已加密。 因此,它會從您的 Azure 金鑰保存庫擷取 ADE 金鑰,然後建立名為 “BEK VOLUME” 的新磁碟區來儲存密鑰檔案。

  2. 登入修復 VM,然後卸除已加密磁碟上任何掛接的磁碟分區

  3. 識別 BEK 磁碟區中的 ADE 金鑰檔案

  4. 識別加密OS開機分割區中的頭檔

  5. 使用 ADE 金鑰檔案和標頭檔來解除鎖定加密的磁碟

  6. 掛接數據分割: LVMRAW 或非 LVM

建立修復 VM

  1. 擷取加密OS磁碟的快照集。

  2. 從快照集建立磁碟。 針對新的磁碟,選擇與您想要修復的問題 VM 相同的位置和可用性區域。

  3. 根據下列指導方針建立 VM:

    • 在 Azure Marketplace 中,針對故障 VM 所使用的修復 VM 選擇相同的映像。 (操作系統版本應該相同。)
    • 選擇至少配置 8 GB 記憶體給 VM 的大小。
    • 將這個新的 VM 指派給您在步驟 2 中建立的新磁碟所使用的相同資源群組、區域和可用性設定。
  4. 在 [建立虛擬機精靈] 的 [磁] 頁面上,將您剛從快照集建立的新磁碟 (連結) 為數據磁碟。

重要事項

由於加密設定只會在 VM 建立期間偵測到,因此請務必在建立 VM 時連結磁碟。 這可讓包含 ADE 金鑰檔案的磁碟區自動新增至 VM。

在加密的磁碟上卸除任何掛接的磁碟分區

  1. 建立修復 VM 之後,透過 SSH 連線到修復 VM、使用適當的認證登入,然後將帳戶提升至根目錄:

    sudo -s 
    
  2. 使用 lsblk 命令列出連結的裝置。 在輸出中,您應該會看到多個連結的磁碟。 這些磁碟包括使用中的OS磁碟和加密的磁碟。 它們可以依任何順序顯示。

  3. 使用下列資訊來識別加密的磁碟:

    • 磁碟將會有多個磁碟分區
    • 磁碟不會列出根目錄 (“/”) 作為其任何分割區的裝入點。
    • 磁碟會符合您從快照集建立磁碟時記下的大小。

    在下列範例中,輸出會指出 「sdd」 是加密的磁碟。 這是唯一具有多個磁碟分區的磁碟,而且不會將 “/” 列為裝入點。

    關於第一個範例的影像

  4. 卸除已掛接在文件系統中之加密數據磁碟上的任何磁碟分區。 例如,在上一個範例中,您必須同時卸除 “/boot/efi”* 和 “/boot”。

    umount /boot/efi 
    
    umount /boot 
    

識別 ADE 金鑰檔案

您必須同時擁有金鑰檔案和標頭檔,才能解除鎖定加密的磁碟。 密鑰檔案會儲存在 BEK 磁碟區中,而頭檔位於加密 OS 磁碟的開機磁碟分區中。

  1. 判斷哪個磁碟分區是 BEK 磁碟區:

    lsblk -fs | grep -i bek 
    

    下列範例輸出指出 sdb1 是 BEK 磁碟區:

    >sdb1  vfat   BEK VOLUME      04A2-FE67 
    

    如果沒有 BEK 磁碟區存在,請藉由連結加密的磁碟來重新建立修復 VM。 如果 BEK 磁碟區仍未自動附加, 請嘗試方法 3 擷取 BEK 磁碟區。

  2. 在 “/mnt” 資料夾下建立名為 「azure_bek_disk」 的目錄:

    mkdir /mnt/azure_bek_disk 
    
  3. 在 「/mnt/azure_bek_disk」 目錄中掛接 BEK 磁碟區。 例如,如果 sdb1 是 BEK 磁碟區,請輸入下列命令:

    mount /dev/sdb1 /mnt/azure_bek_disk 
    
  4. 再次列出可用的裝置:

    lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT  
    

    注意: 您會看到您判斷為 BEK 磁碟區的磁碟分區現在已掛接在 「/mnt/azure_bek_disk」。

  5. 檢視 “/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」 金鑰檔案來解除鎖定加密的磁碟。

  1. 使用下列命令來顯示可用磁碟和磁碟分區的選取屬性:

    lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT
    
  2. 在加密的磁碟上,識別根數據分割) (OS 磁碟分區。 這是加密磁碟上最大的磁碟分區。 在先前的範例輸出中,OS 磁碟分區是 「sda4」。當您執行解除鎖定命令時,必須指定此分割區。

  3. 在檔案結構的根目錄 (“/”) 中,建立要掛接加密磁碟根數據分割的目錄。 您稍後會在磁碟解除鎖定之後使用此目錄。 若要區別修復 VM 的作用中 OS 磁碟分區,請將名稱命名為 “investigateroot”。

    mkdir /{investigateboot,investigateroot}
    
  4. 在加密的磁碟上,識別包含頭檔的開機磁碟分區。 在加密的磁碟上,開機磁碟分區是第二大磁碟分區,在 LABEL 或 PARTLABEL 數據行中未顯示任何值。 在先前的範例輸出中,加密磁碟的開機磁碟分區是 “sda2”。

  5. 將您在步驟 4 中識別的開機磁碟分區掛接至 /investigateboot/ 目錄。 在下列範例中,加密磁碟的開機磁碟分區是 sda2。 不過,您系統上的位置可能會不同。

    mount /dev/sda2 /investigateboot/ 
    

    如果掛接數據分割失敗並傳回「錯誤的 fs 類型、錯誤選項、錯誤的惡意封鎖」錯誤訊息,請使用 命令再試一 mount -o nouuid 次,如下列範例所示:

    mount -o nouuid /dev/sda2 /investigateboot/ 
    
  6. 列出 /investigateboot/ 目錄中的檔案。 “luks” 子目錄包含您必須解除鎖定磁碟的頭檔。

  7. 列出 /investigateboot/luks/ 目錄中的檔案。 標頭檔名稱為 「osluksheader」。

    ls -l /investigateboot/luks 
    

使用 ADE 金鑰檔案和頭檔將磁碟解除鎖定

  1. 使用 命令 cryptsetup luksOpen 來解除鎖定加密磁碟上的根磁碟分區。 例如,如果包含加密OS的根資料分割路徑是 /dev/sda4,而且您想要將名稱 「osencrypt」 指派給解除鎖定的數據分割,請執行下列命令:

    cryptsetup luksOpen --key-file /mnt/azure_bek_disk/LinuxPassPhraseFileName --header /investigateboot/luks/osluksheader /dev/sda4 osencrypt 
    
  2. 現在您已解除鎖定磁碟,請從 /investigateboot/ 目錄卸除加密磁碟的開機磁碟分區:

    umount /investigateboot/ 
    

    注意: 您稍後必須將此分割區掛接至另一個目錄。

    下一個步驟是掛接您剛才解除鎖定的數據分割。 您用來掛接磁碟分區的方法取決於磁碟所使用的裝置對應程式架構 (LVM 或非 LVM) 。

  3. 列出裝置資訊以及檔案系統類型:

    lsblk -o NAME,FSTYPE 
    

    在我們的範例中,您會看到已解除鎖定的分割區,以及您指派給它的名稱 (,該名稱是 “osencrypt”) :

掛接解除鎖定的磁碟分區,並僅 (LVM 輸入 chroot 環境)

如果磁碟使用 LVM 裝置對應程式架構,您必須採取額外的步驟來掛接磁碟並進入 Chroot 環境。 若要將 Chroot 工具與加密的磁碟搭配使用,解除鎖定的磁碟分區 (“osencrypt”) 及其邏輯磁碟區必須辨識為名為 rootvg 的磁碟區群組。 不過,根據預設,修復 VM 的 OS 磁碟分區及其邏輯磁碟區已指派給名稱為 rootvg 的磁碟區群組。 我們必須解決此衝突,才能繼續。

  1. pvs使用 命令來顯示 LVM 實體磁碟區的屬性。 您可能會看到警告訊息,如下列範例所示,表示已解除鎖定的磁碟分區 (“/dev/mapper/osencrypt”) 而另一個裝置使用重複的通用唯一標識符 (UUID) 。 或者,您可能會看到指派給 rootvg 的兩個分割區。

    注意事項

    您只想要將解除鎖定的磁碟分區 (“osencrypt”) 指派給 rootvg 磁碟區群組,讓您可以透過 chroot 公用程式存取其邏輯磁碟區。 若要修正此問題,您將暫時將磁碟分區匯入不同的磁碟區群組,並啟動該磁碟區群組。 接下來,您將重新命名目前的 rootvg 磁碟區群組。 只有在您進入 Chroot 環境之後,您才會將加密磁碟的磁碟區群組重新命名為 “rootvg”。

指派解除鎖定的數據分割 (範例)

  1. 將新解除鎖定的磁碟分區匯入至新的磁碟區群組。 在此範例中,我們會暫時將新的磁碟區群組命名為 “rescuemevg”。 將新解除鎖定的磁碟分區匯入至新的磁碟區群組。 在此範例中,我們會暫時將新的磁碟區群組命名為 “rescuemevg”。

  2. 開啟新的磁碟區群組:

    vgimportclone -n rescuemevg /dev/mapper/osencrypt
    vgchange -a y rescuemevg
    
  3. 重新命名舊的 rootvg 磁碟區群組。 在此範例中,我們將使用名稱 「oldvg」。

    vgrename rootvg oldvg 
    
  4. 執行 lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT 以檢閱可用的裝置。 您現在應該會看到這兩個磁碟區群組由您指派給他們的名稱列出。

  5. 將 rescuemevg/rootlv 邏輯磁碟區掛接至 /investigateroot/ 目錄,而不使用重複的 UUID:

    umount /investigateboot
    mount -o nouuid /dev/rescuemevg/rootlv /investigateroot/ 
    

    現在,已解除鎖定並掛接失敗 VM 的根分割區,您應該能夠存取根數據分割來針對問題進行疑難解答。 如需詳細資訊,請參閱 針對因文件系統錯誤而造成的 Linux 虛擬機開機問題進行疑難解答

    不過,如果您想要使用 Chroot 公用程式進行疑難解答,請繼續使用下列步驟。

  6. 將加密磁碟的開機磁碟分區掛接至目錄 /investigateroot/boot/,而不使用重複的 UUID。 (請記住,加密磁碟的開機磁碟分區是未指派任何磁碟分區卷標的第二大磁碟分區。) 在我們的目前範例中,加密磁碟的開機磁碟分區是 sda2。

    mount -o nouuid /dev/sda2 /investigateroot/boot
    
  7. 將加密磁碟的 EFI 系統分割區掛接至 /investigateroot/boot/efi 目錄。 您可以依標籤識別此分割區。 在我們的目前範例中,EFI 系統分割區是 sda1。

    mount /dev/sda1 /investigateroot/boot/efi
    
  8. 將加密磁碟的磁碟區群組中剩餘未掛接的邏輯磁碟區掛接至 “/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
    
  9. 將 Active Directory 變更為加密磁碟上已掛接的根分割區:

    cd /investigateroot
    
  10. 輸入下列命令來準備 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/
    
  11. 輸入 Chroot 環境:

    chroot /investigateroot/
    
  12. 將 healthcaremevg 磁碟區群組重新命名為 “rootvg”,以避免 grub 和 initramfs 發生衝突或可能發生問題。 當您重新產生 initramfs 時,請保留相同的命名慣例。 因為 vg 名稱變更,所以請在救援 VM 上工作。 如果您將它重新啟動,它將不再有用。 應將救援 VM 視為暫時 VM。

    vgrename rescuemevg rootvg
    
  13. 針對 Chroot 環境中的問題進行疑難解答。 例如,您可以讀取記錄或執行腳本。 如需詳細資訊,請 參閱在 Chroot 環境中執行修正

  14. 結束 Chroot 並交換 OS 磁碟

掛接已解除鎖定的磁碟,並 (RAW/非 LVM) 輸入Chroot環境

  1. 在檔案結構的根目錄 (“/”) 中,建立要掛接加密磁碟根分割的目錄。 您稍後會在磁碟解除鎖定之後使用此目錄。 若要區別修復 VM 的作用中 OS 磁碟分區,請將其命名為 “investigateroot”。

    mkdir /{investigateboot,investigateroot}
    
  2. 將新解除鎖定的數據分割 (“osencrypt”) 掛接至 /investigateroot/ 目錄:

    mount /dev/mapper/osencrypt /investigateroot/ 
    

    如果掛接分割區失敗並傳回「錯誤的 fs 類型、錯誤選項、錯誤的惡意封鎖」錯誤訊息,請使用掛接 -o nouuid 命令再試一次:

    mount -o nouuid /dev/mapper/osencrypt /investigateroot/ 
    
  3. 嘗試顯示 /investigateroot/ 目錄的內容,以確認掛接的數據分割現在已解除鎖定:

    ls /investigateroot/ 
    
  4. 現在已解除鎖定並掛接失敗 VM 的根分割區,您可以存取根數據分割來針對問題進行疑難解答。 如需詳細資訊,請參閱 針對因文件系統錯誤而造成的 Linux 虛擬機開機問題進行疑難解答

    不過,如果您想要使用 Chroot 公用程式進行疑難解答,請移至下一個步驟。

  5. 使用 命令 lsblk -o NAME,SIZE,LABEL,PARTLABEL,MOUNTPOINT 來檢閱可用的裝置。 將加密磁碟上的開機磁碟分區識別為未指派任何標籤的第二大磁碟分區。

  6. 將加密磁碟上的開機磁碟分區掛接至 “/investigateroot/boot/” 目錄,如下列範例所示:

    mount /dev/sdc2 /investigateroot/boot/ 
    
  7. 將 Active Directory 變更為加密磁碟上已掛接的根分割區:

    cd /investigateroot 
    
  8. 輸入下列命令來準備 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/ 
    
  9. 輸入 Chroot 環境:

    chroot /investigateroot/ 
    
  10. 針對 Chroot 環境中的問題進行疑難解答。 您可以讀取記錄或執行文稿。 如需詳細資訊,請 參閱在 Chroot 環境中執行修正

  11. 結束 Chroot 並交換 OS 磁碟

方法 3:重新加密磁碟以擷取金鑰檔案,並解除鎖定加密的磁碟

  1. 建立修復 VM,並將鎖定磁碟的復本連結至修復 VM:

  2. 將加密磁碟當做數據磁碟連接至修復 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-keyvaultkey-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
  3. 執行下列命令以檢查是否已連結新的磁碟:

    lsblk -f
    

    如果已連結新的磁碟,請移至 識別 BEK 磁碟區中的 ADE 金鑰檔案,然後繼續遵循提供的步驟來解除鎖定磁碟。

後續步驟

如果您在連線到 VM 時遇到問題,請參閱 針對 Azure VM 的 SSH 連線進行疑難解答

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群