共用方式為


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

適用於:✔️ Linux VM

本文說明如何解除鎖定已啟用 Azure 磁碟加密 (ADE)的OS磁碟以進行脫機修復。

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

徵兆

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

mount:錯誤的 fs 類型、不正確的選項、/dev/sda2 上的錯誤超級鎖定、遺漏代碼頁或協助程式程式或其他錯誤

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

準備

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

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

確認磁碟上已啟用 ADE

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

Azure 入口網站

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

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

PowerShell

您可以使用 Get-AzVmDiskEncryptionStatus Cmdlet 來判斷 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 第 0 版加密加密,請遵循方法 3 中的步驟來解除鎖定磁碟。

方法 1:使用 az vm repair 命令自動解除鎖定加密的磁碟

此方法依賴 az vm repair 命令來自動建立修復 VM、將失敗 Linux VM 的 OS 磁碟連結至該修復 VM,然後在磁碟已加密時解除鎖定磁碟。 此方法需要針對修復 VM 使用公用 IP 位址,而且不論 ADE 金鑰是否已解除包裝或使用金鑰加密金鑰來包裝,都會解除鎖定加密的磁碟。

若要使用此自動化方法來修復 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 選擇相同的映像。 (OS 版本應該相同。
    • 選擇至少配置 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. 在加密的磁碟上,識別包含頭檔之開機磁碟分區。 在加密磁碟上,開機磁碟分區是標籤或 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”):

掛接解除鎖定的數據分割並輸入 chroot 環境 (僅限 LVM)

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

  1. pvs使用 命令來顯示 LVM 實體磁碟區的屬性。 您可能會看到警告訊息,如下列範例所示,指出解除鎖定的分割區 (“/dev/mapper/osencrypt”) 和另一個裝置使用重複的通用唯一標識符 (UUIDs)。 或者,您可能會看到指派給 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. 將 rescuemevg 磁碟區群組重新命名為 “rootvg”,以避免 grub 和 initramfs 發生衝突或可能的問題。 當您重新產生 initramfs 時,請保留相同的命名慣例。 由於 vg 名稱變更,請在救援 VM 上工作。 如果您重新啟動它,它將不再有用。 救援 VM 應該視為暫時的 VM。

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

  14. 結束 chroot 並交換 OS 磁碟

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

  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 之後,請使用用於原始 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 意見反應社群提交產品意見反應。