Настройка LVM и RAID на зашифрованных устройствах

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

Эта статья представляет собой пошаговый процесс выполнения логического управления томами (LVM) и RAID на зашифрованных устройствах. Эта процедура применима к следующим средам:

  • Дистрибутивах Linux
    • RHEL 7.6+,
    • Ubuntu 18.04+,
    • SUSE 12+.
  • Расширение для однопроходного шифрования дисков Azure
  • Расширение для двухпроходного шифрования дисков Azure

Сценарии

Процедуры, описанные в этой статье, поддерживают следующие сценарии.

  • Настройка LVM поверх зашифрованных устройств (LVM при шифровании)
  • Настройка RAID поверх зашифрованных устройств (RAID при шифровании)

После шифрования базового устройства или устройств можно создать структуры LVM или RAID поверх этого зашифрованного слоя.

Физические тома (PV) создаются поверх зашифрованного слоя. Для создания группы томов используются физические тома. Создайте тома и добавьте необходимые записи в/etc/fstab.

Схема слоев структур LVM

Аналогичным образом, устройство RAID создается поверх зашифрованного слоя на дисках. Файловая система создается поверх устройства RAID и добавляется в /etc/fstab как обычное устройство.

Рекомендации

Рекомендуется использовать LVM при шифровании. RAID можно использовать в том случае, если LVM не может использоваться из-за ограничений конкретного приложения или среды.

Вы будете использовать параметр EncryptFormatAll. Дополнительные сведения об этом параметре см. в статье Использование функции EncryptFormatAll для дисков данных на виртуальных машинах Linux.

Хотя этот метод можно использовать при шифровании операционной системы, здесь мы просто зашифруем диски с данными.

Выполнение процедур предполагает, что вы уже выполнили предварительные требования, указанные в разделах Сценарии Шифрования дисков Azure на виртуальных машинах Linux и Краткое руководство по созданию и шифрованию виртуальной машины Linux с помощью Azure CLI.

Версия с двухпроходным шифрованием дисков Azure скоро устареет, она не должна использоваться для вновь шифруемых дисков.

основные шаги

При использовании конфигураций "при шифровании" используйте процедуру, описанную ниже.

Примечание

Мы используем переменные в этой статье. Заменяйте значения соответствующим образом.

Развертывание виртуальной машины

Следующие команды являются необязательными, но их рекомендуется применять к вновь развертываемым виртуальным машинам.

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

Подключите диски к виртуальной машине

Повторите следующие команды для $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

Проверьте, что все диски подключены к виртуальной машине

PowerShell.

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

Список подключенных дисков в PowerShell

Azure CLI:

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

Список подключенных дисков в Azure CLI

Портал:

Список подключенных дисков на портале

ОС:

lsblk

Список подключенных дисков в ОС

Настройте диски для шифрования

Эта настройка выполняется на уровне операционной системы. Для соответствующих дисков настраивается традиционное шифрование с помощью Шифрования дисков Azure:

  • Файловые системы создаются поверх дисков.
  • Для подключения файловых систем создаются временные точки подключения.
  • Файловые системы настраиваются в /etc/fstab для подключения во время загрузки.

Проверьте букву устройства, назначенную новым дискам. В данном примере мы используем четыре диска данных.

lsblk

Диски данных, подключенные к ОС

Создание файловой системы поверх каждого диска

Эта команда поочередно создает файловую систему ext4 на каждом из дисков, определенных в части in цикла for.

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

Создание файловой системы ext4

Найдите универсальный уникальный идентификатор (UUID) для вновь созданных файловых систем, создайте временную папку, добавьте соответствующие записи в /etc/fstab и подключите все файловые системы.

Эта команда также поочередно обращается к каждому из дисков, перечисленных в части in цикла for:

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

Сведения о конфигурации через fstab

Шифрование дисков данных

PowerShell с использованием ключа шифрования ключей (KEK):

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

Azure CLI с использованием KEK:

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}

Состояние шифрования в PowerShell

Azure CLI:

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

Состояние шифрования в Azure CLI

Портал:

Состояние шифрования на портале

На уровне ОС

lsblk

Состояние шифрования в ОС

Расширение добавит файловые системы в /var/lib/azure_disk_encryption_config/azure_crypt_mount (старое шифрование) или в /etc/crypttab (новое шифрование).

Примечание

Не изменяйте эти файлы.

Этот файл отвечает за активацию этих дисков во время загрузки, чтобы LVM или RAID могли их использовать позже.

Не беспокойтесь о точках подключения этого файла. Шифрование дисков Azure не сможет подключить эти диски как обычные файловые системы после создания физического тома или устройства RAID на основе этих зашифрованных устройств. (Это приведет к удалению формата файловой системы, который мы использовали во время процесса подготовки.)

Удаление временных папок и временных записей 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

Проверка удаления временных записей fstab

Шаги для "LVM при шифровании"

Теперь, когда базовые диски зашифрованы, можно создать структуры 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/device names необходимо заменить фактическими значениями из вывода команды 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

На снимке экрана показано окно консоли с файловыми системами, подключенными как data0 и data1.

В этом варианте lsblk выводится список устройств, на которых показаны зависимости в обратном порядке. Этот параметр позволяет обнаруживать устройства, сгруппированные по логическому тому, а не исходные имена устройств /dev/sd[disk].

Важно, чтобы был добавлен параметр nofail к параметрам точки подключения томов LVM, созданных на основе устройства, зашифрованного с помощью Шифрования дисков Azure. Это позволит предотвратить зависание операционной системы во время процесса загрузки (или в режиме обслуживания).

Если параметр nofail не будет указан

  • Операционная система не дойдет до этапа, где запускается Шифрование дисков Azure, а диски с данными будут разблокированы и подключены.
  • Зашифрованные диски будут разблокированы в конце процесса загрузки. Тома и файловые системы LVM будут автоматически подключены, пока Шифрование дисков Azure не разблокирует их.

Вы можете протестировать перезагрузку виртуальной машины и проверить, что файловые системы также автоматически подключаются после этапа загрузки. Этот процесс может занять несколько минут в зависимости от количества и размеров файловых систем.

Перезагрузите виртуальную машину и проверьте после перезагрузки.

shutdown -r now
lsblk
df -h

Шаги для "RAID при шифровании"

Теперь, когда базовые диски зашифрованы, можно создать структуры 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

Сведения о настроенном RAID с помощью команды mdadm

Примечание

Здесь /dev/mapper/device names необходимо заменить фактическими значениями из вывода команды lsblk.

Проверка и мониторинг создания RAID

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

Состояние 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

На снимке экрана показано окно консоли с файловой системой, подключенной как raiddata.

Важно, чтобы был добавлен параметр nofail к параметрам точки подключения томов RAID, созданных поверх устройства, зашифрованного с помощью Шифрования дисков Azure. Это позволит предотвратить зависание операционной системы во время процесса загрузки (или в режиме обслуживания).

Если параметр nofail не будет указан

  • Операционная система не дойдет до этапа, где запускается Шифрование дисков Azure, а диски с данными будут разблокированы и подключены.
  • Зашифрованные диски будут разблокированы в конце процесса загрузки. Тома и файловые системы RAID будут автоматически подключены, пока Шифрование дисков Azure не разблокирует их.

Вы можете протестировать перезагрузку виртуальной машины и проверить, что файловые системы также автоматически подключаются после этапа загрузки. Этот процесс может занять несколько минут в зависимости от количества и размеров файловых систем.

shutdown -r now

И когда вы сможете войти в систему

lsblk
df -h

Дальнейшие действия