Share via


在加密裝置上設定 LVM 和 RAID

適用於:✔️ Linux VM ✔️ 彈性擴展集

本文以逐步程序說明如何在加密裝置上執行邏輯磁碟區管理 (LVM) 和 RAID。 此程序適用於下列環境:

  • Linux 散發
    • RHEL 7.6+
    • Ubuntu 18.04+
    • SUSE 12+
  • Azure 磁碟加密單一傳遞延伸模組
  • Azure 磁碟加密雙重傳遞延伸模組

案例

本文中的程序支援下列案例:

  • 在加密裝置上設定 LVM (LVM-on-crypt)
  • 在加密裝置上設定 RAID (RAID-on-crypt)

當基礎裝置加密之後,您可以在該加密層上建立 LVM 或 RAID 結構。

實體磁碟區 (PV) 會在加密層上建立。 實體磁碟區可用來建立磁碟區群組。 您可以建立磁碟區,並在 /etc/fstab 上新增必要的項目。

Diagram of the layers of LVM structures

RAID 裝置會以類似的方式在磁碟的加密層上建立。 檔案系統會在 RAID 裝置上方建立,並以一般裝置的形式新增至 /etc/fstab。

考量

我們建議您使用 LVM-on-crypt。 RAID 是 LVM 因為特定應用程式或環境限制而無法使用時的選項。

您將使用 EncryptFormatAll 選項。 如需此選項的詳細資訊,請參閱在 Linux VM 上使用資料磁碟的 EncryptFormatAll 功能

雖然當您加密作業系統時也可以使用此方法,但我們在這裡僅加密資料磁碟機。

這些程序會假設您已檢閱 Linux VM 上的 Azure 磁碟加密案例快速入門:使用 Azure CLI 建立和加密 Linux VM中的必要條件。

Azure 磁碟加密雙重傳遞版本即將淘汰,不應再用於新的加密作業上。

一般步驟

當您使用 "on-crypt" 設定時,請使用下列程序中所述的流程。

注意

我們會在本文中使用到變數。 請視需要將值取代。

部署 VM

下列命令是選擇性的,但建議您在新部署的虛擬機器 (VM) 上套用這些命令。

PowerShell:

New-AzVm -ResourceGroupName ${RGNAME} `
-Name ${VMNAME} `
-Location ${LOCATION} `
-Size ${VMSIZE} `
-Image ${OSIMAGE} `
-Credential ${creds} `
-Verbose

Azure CLI:

az vm create \
-n ${VMNAME} \
-g ${RGNAME} \
--image ${OSIMAGE} \
--admin-username ${username} \
--admin-password ${password} \
-l ${LOCATION} \
--size ${VMSIZE} \
-o table

將磁碟連結至 VM

針對您想要連結至 VM 的新磁碟數目 $N,重複下列命令。

PowerShell:

$storageType = 'Standard_LRS'
$dataDiskName = ${VMNAME} + '_datadisk0'
$diskConfig = New-AzDiskConfig -SkuName $storageType -Location $LOCATION -CreateOption Empty -DiskSizeGB 5
$dataDisk1 = New-AzDisk -DiskName $dataDiskName -Disk $diskConfig -ResourceGroupName ${RGNAME}
$vm = Get-AzVM -Name ${VMNAME} -ResourceGroupName ${RGNAME}
$vm = Add-AzVMDataDisk -VM $vm -Name $dataDiskName -CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 0
Update-AzVM -VM ${VM} -ResourceGroupName ${RGNAME}

Azure CLI:

az vm disk attach \
-g ${RGNAME} \
--vm-name ${VMNAME} \
--name ${VMNAME}datadisk1 \
--size-gb 5 \
--new \
-o table

確認磁碟已連結至 VM

PowerShell:

$VM = Get-AzVM -ResourceGroupName ${RGNAME} -Name ${VMNAME}
$VM.StorageProfile.DataDisks | Select-Object Lun,Name,DiskSizeGB

List of attached disks in PowerShell

Azure CLI:

az vm show -g ${RGNAME} -n ${VMNAME} --query storageProfile.dataDisks -o table

List of attached disks in the Azure CLI

入口網站:

List of attached disks in the portal

OS:

lsblk

List of attached disks in the OS

設定要加密的磁碟

此設定會在作業系統層級上完成。 對應的磁碟會透過 Azure 磁碟加密設定傳統加密:

  • 檔案系統會建立在磁碟之上。
  • 系統會建立暫時掛接點來掛接檔案系統。
  • 檔案系統會在 /etc/fstab 上設定為在開機時掛接。

檢查指派給新磁碟的裝置字母。 在此範例中,我們使用四個資料磁碟。

lsblk

Data disks attached to the OS

在每個磁碟上方建立檔案系統

此命令會在 "for" 迴圈的 "in" 部分中所定義的每個磁碟上逐一建立 ext4 檔案系統。

for disk in c d e f; do echo mkfs.ext4 -F /dev/sd${disk}; done |bash

Creation of an ext4 file system

尋找最近所建立檔案系統的通用唯一識別碼 (UUID)、建立暫存資料夾、在 /etc/fstab 上新增對應的項目,以及掛接所有檔案系統。

此命令也會逐一查看 "for" 迴圈中 "in" 部分所定義的每個磁碟:

for disk in c d e f; do diskuuid="$(blkid -s UUID -o value /dev/sd${disk})"; \
mkdir /tempdata${disk}; \
echo "UUID=${diskuuid} /tempdata${disk} ext4 defaults,nofail 0 0" >> /etc/fstab; \
mount -a; \
done

確認磁碟已正確掛接

lsblk

List of mounted temporary file systems

也請確認磁碟是否已設定:

cat /etc/fstab

Configuration information via fstab

加密資料磁碟

使用金鑰加密金鑰 (KEK) 的 PowerShell:

$sequenceVersion = [Guid]::NewGuid()
Set-AzVMDiskEncryptionExtension -ResourceGroupName $RGNAME `
-VMName ${VMNAME} `
-DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl `
-DiskEncryptionKeyVaultId $KeyVaultResourceId `
-KeyEncryptionKeyUrl $keyEncryptionKeyUrl `
-KeyEncryptionKeyVaultId $KeyVaultResourceId `
-VolumeType 'DATA' `
-EncryptFormatAll `
-SequenceVersion $sequenceVersion `
-skipVmBackup;

使用 KEK 的 Azure CLI:

az vm encryption enable \
--resource-group ${RGNAME} \
--name ${VMNAME} \
--disk-encryption-keyvault ${KEYVAULTNAME} \
--key-encryption-key ${KEYNAME} \
--key-encryption-keyvault ${KEYVAULTNAME} \
--volume-type "DATA" \
--encrypt-format-all \
-o table

確認加密狀態

只有在所有磁碟都已加密時,才能繼續進行下一個步驟。

PowerShell:

Get-AzVmDiskEncryptionStatus -ResourceGroupName ${RGNAME} -VMName ${VMNAME}

Encryption status in PowerShell

Azure CLI:

az vm encryption show -n ${VMNAME} -g ${RGNAME} -o table

Encryption status in the Azure CLI

入口網站:

Encryption status in the portal

作業系統層級:

lsblk

Encryption status in the OS

延伸模組會將檔案系統新增至 /var/lib/azure_disk_encryption_config/azure_crypt_mount (舊的加密) 或 /etc/crypttab (新的加密)。

注意

請勿修改這些檔案中的任何一個。

此檔案會在開機程序期間負責啟用這些磁碟,以便 LVM 或 RAID 之後使用。

別擔心此檔案上的掛接點。 在這些加密裝置上方建立實體磁碟區或 RAID 裝置之後,Azure 磁碟加密會失去將磁碟掛接為一般檔案系統的能力。 (這會移除我們在準備程序期間使用的檔案系統格式。)

移除暫存資料夾和暫存 fstab 項目

您可以在將作為 LVM 一部分使用的磁碟上卸載檔案系統。

for disk in c d e f; do umount /tempdata${disk}; done

並移除 /etc/fstab 項目:

vi /etc/fstab

確認磁碟未掛接,且已移除 /etc/fstab 上的項目

lsblk

Verification that temporary file systems are unmounted

並確認磁片已設定:

cat /etc/fstab

Verification that temporary fstab entries are removed

LVM-on-crypt 的步驟

現在基礎磁碟已加密,您已可以建立 LVM 結構。

請勿使用裝置名稱,而是針對每個磁碟使用 /dev/mapper 路徑來建立實體磁碟區 (在磁碟上方的加密層,不是磁碟本身)。

在加密層上方設定 LVM

建立實體磁碟區

您會收到警告,詢問是否可抹除檔案系統簽章。 輸入 y,或使用 echo "y"以繼續,如下所示:

echo "y" | pvcreate /dev/mapper/c49ff535-1df9-45ad-9dad-f0846509f052
echo "y" | pvcreate /dev/mapper/6712ad6f-65ce-487b-aa52-462f381611a1
echo "y" | pvcreate /dev/mapper/ea607dfd-c396-48d6-bc54-603cf741bc2a
echo "y" | pvcreate /dev/mapper/4159c60a-a546-455b-985f-92865d51158c

Verification that a physical volume was created

注意

此處的 /dev/mapper/裝置名稱必須根據 lsblk 的輸出取代為實際值。

確認實體磁碟區的資訊

pvs

Information for physical volumes

建立磁碟區群組

使用已初始化的相同裝置建立磁碟區群組:

vgcreate vgdata /dev/mapper/

檢查磁碟區群組的資訊

vgdisplay -v vgdata
pvs

Information for the volume group

建立邏輯磁碟區

lvcreate -L 10G -n lvdata1 vgdata
lvcreate -L 7G -n lvdata2 vgdata

檢查建立的邏輯磁碟區

lvdisplay
lvdisplay vgdata/lvdata1
lvdisplay vgdata/lvdata2

Information for logical volumes

在邏輯磁碟區的結構之上建立檔案系統

echo "yes" | mkfs.ext4 /dev/vgdata/lvdata1
echo "yes" | mkfs.ext4 /dev/vgdata/lvdata2

建立新檔案系統的掛接點

mkdir /data0
mkdir /data1

將新的檔案系統新增至 /etc/fstab 並掛接

echo "/dev/mapper/vgdata-lvdata1 /data0 ext4 defaults,nofail 0 0" >>/etc/fstab
echo "/dev/mapper/vgdata-lvdata2 /data1 ext4 defaults,nofail 0 0" >>/etc/fstab
mount -a

確認已掛接新的檔案系統

lsblk -fs
df -h

Screenshot shows a console window with file systems mounted as data0 and data1.

lsblk 的此變異上,我們會以反向順序列出顯示相依性的裝置。 此選項有助於識別依邏輯磁碟區分組的裝置,而不是原始 /dev/sd[disk] 裝置名稱。

請務必確定 nofail 選項已新增至 LVM 磁碟區 (建立在透過 Azure 磁碟加密所加密的裝置上方) 的掛接點選項。 其可防止作業系統在開機程序期間 (或維護模式中) 停滯。

如果您沒有使用 nofail 選項:

  • 作業系統永遠不會進入啟動 Azure 磁碟加密,且資料磁碟已解除鎖定並掛接的階段。
  • 在開機程序結束時,加密磁碟將會解除鎖定。 LVM 磁碟區和檔案系統會自動掛接,直到 Azure 磁碟加密將其解除鎖定為止。

您可以測試重新啟動 VM,並確認檔案系統在開機時間之後也會自動掛接。 此程序可能需要幾分鐘的時間,視檔案系統的數目和大小而定。

重新啟動 VM 並在重新啟動後進行確認

shutdown -r now
lsblk
df -h

RAID on-crypt 的步驟

現在基礎磁碟已加密,您已可以繼續建立 RAID 結構。 此程序與 LVM 的程序相同,但不是使用裝置名稱,而是針對每個磁碟使用 /dev/mapper 路徑。

在磁碟加密層之上設定 RAID

mdadm --create /dev/md10 \
--level 0 \
--raid-devices=4 \
/dev/mapper/c49ff535-1df9-45ad-9dad-f0846509f052 \
/dev/mapper/6712ad6f-65ce-487b-aa52-462f381611a1 \
/dev/mapper/ea607dfd-c396-48d6-bc54-603cf741bc2a \
/dev/mapper/4159c60a-a546-455b-985f-92865d51158c

Information for configured RAID via the mdadm command

注意

此處的 /dev/mapper/裝置名稱必須根據 lsblk 的輸出取代為實際值。

檢查/監視 RAID 建立

watch -n1 cat /proc/mdstat
mdadm --examine /dev/mapper/[]
mdadm --detail /dev/md10

Status of RAID

在新的 RAID 裝置上方建立檔案系統

mkfs.ext4 /dev/md10

建立檔案系統的新掛接點、將新的檔案系統新增至 /etc/fstab 並掛皆:

注意

此迴圈只會在此特定範例的一部裝置上逐一查看,若有需要,可以此方式為基礎來用於多個 md 裝置。

for device in md10; do diskuuid="$(blkid -s UUID -o value /dev/${device})"; \
mkdir /raiddata; \
echo "UUID=${diskuuid} /raiddata ext4 defaults,nofail 0 0" >> /etc/fstab; \
mount -a; \
done

確認已掛接新的檔案系統:

lsblk -fs
df -h

Screenshot shows a console window with a file system mounted as raiddata.

請務必確定 nofail 選項已新增至 RAID 磁碟區 (建立在透過 Azure 磁碟加密所加密的裝置上方) 的掛接點選項。 其可防止作業系統在開機程序期間 (或維護模式中) 停滯。

如果您沒有使用 nofail 選項:

  • 作業系統永遠不會進入啟動 Azure 磁碟加密,且資料磁碟已解除鎖定並掛接的階段。
  • 在開機程序結束時,加密磁碟將會解除鎖定。 RAID 磁碟區和檔案系統會自動掛接,直到 Azure 磁碟加密將其解除鎖定為止。

您可以測試重新啟動 VM,並確認檔案系統在開機時間之後也會自動掛接。 此程序可能需要幾分鐘的時間,視檔案系統的數目和大小而定。

shutdown -r now

當您可以登入時:

lsblk
df -h

下一步