在加密裝置上設定 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 上新增必要的項目。
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
Azure CLI:
az vm show -g ${RGNAME} -n ${VMNAME} --query storageProfile.dataDisks -o table
入口網站:
OS:
lsblk
設定要加密的磁碟
此設定會在作業系統層級上完成。 對應的磁碟會透過 Azure 磁碟加密設定傳統加密:
- 檔案系統會建立在磁碟之上。
- 系統會建立暫時掛接點來掛接檔案系統。
- 檔案系統會在 /etc/fstab 上設定為在開機時掛接。
檢查指派給新磁碟的裝置字母。 在此範例中,我們使用四個資料磁碟。
lsblk
在每個磁碟上方建立檔案系統
此命令會在 "for" 迴圈的 "in" 部分中所定義的每個磁碟上逐一建立 ext4 檔案系統。
for disk in c d e f; do echo mkfs.ext4 -F /dev/sd${disk}; done |bash
尋找最近所建立檔案系統的通用唯一識別碼 (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
也請確認磁碟是否已設定:
cat /etc/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}
Azure CLI:
az vm encryption show -n ${VMNAME} -g ${RGNAME} -o table
入口網站:
作業系統層級:
lsblk
延伸模組會將檔案系統新增至 /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
並確認磁片已設定:
cat /etc/fstab
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
注意
此處的 /dev/mapper/裝置名稱必須根據 lsblk 的輸出取代為實際值。
確認實體磁碟區的資訊
pvs
建立磁碟區群組
使用已初始化的相同裝置建立磁碟區群組:
vgcreate vgdata /dev/mapper/
檢查磁碟區群組的資訊
vgdisplay -v vgdata
pvs
建立邏輯磁碟區
lvcreate -L 10G -n lvdata1 vgdata
lvcreate -L 7G -n lvdata2 vgdata
檢查建立的邏輯磁碟區
lvdisplay
lvdisplay vgdata/lvdata1
lvdisplay vgdata/lvdata2
在邏輯磁碟區的結構之上建立檔案系統
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
在 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
注意
此處的 /dev/mapper/裝置名稱必須根據 lsblk 的輸出取代為實際值。
檢查/監視 RAID 建立
watch -n1 cat /proc/mdstat
mdadm --examine /dev/mapper/[]
mdadm --detail /dev/md10
在新的 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
請務必確定 nofail 選項已新增至 RAID 磁碟區 (建立在透過 Azure 磁碟加密所加密的裝置上方) 的掛接點選項。 其可防止作業系統在開機程序期間 (或維護模式中) 停滯。
如果您沒有使用 nofail 選項:
- 作業系統永遠不會進入啟動 Azure 磁碟加密,且資料磁碟已解除鎖定並掛接的階段。
- 在開機程序結束時,加密磁碟將會解除鎖定。 RAID 磁碟區和檔案系統會自動掛接,直到 Azure 磁碟加密將其解除鎖定為止。
您可以測試重新啟動 VM,並確認檔案系統在開機時間之後也會自動掛接。 此程序可能需要幾分鐘的時間,視檔案系統的數目和大小而定。
shutdown -r now
當您可以登入時:
lsblk
df -h