В этой статье рассматриваются некоторые распространенные вопросы о поддержке временных дисков Ненезависимой памяти Express (NVMe) на виртуальных машинах, созданных в Azure. В этой статье термин "временный диск" ссылается на временный диск, созданный на локальном SSD.
Какие предварительные требования необходимо создать временный диск, использующий интерфейс NVMe для моей виртуальной машины?
Поддержка NVMe для локальных временных дисков зависит от семейства виртуальных машин. Все новые виртуальные машины версии 6 с локальными дисками поддерживают временные диски NVMe, но виртуальные машины v5 и более ранние версии могут не поддерживать локальные временные диски NVMe, так как большинство этих размеров локальных дисков находятся на интерфейсе SCSI. Некоторые семейства виртуальных машин, такие как серия L, локально подключают виртуальные диски NVMe SSD из виртуальных машин поколения Lsv2. Ознакомьтесь с общими сведениями о семействе виртуальных машин, чтобы определить, поддерживаются ли временные диски NVMe. Кроме того, обратите внимание, что гостевая ОС должна поддерживать драйвер NVMe, чтобы использовать локальные NVMe, которые по умолчанию имеют большинство последних выпусков ОС.
Как временные диски NVMe на виртуальных машинах Dl/D/E_v6 отличаются от удаленных дисков NVMe?
Ключевое различие заключается в том, что временные диски NVMe являются временными, а данные на виртуальных машинах могут исчезнуть, но данные на удаленных дисках NVMe остаются. Учитывайте это различие при выборе параметров хранилища виртуальной машины.
В отличие от предыдущих виртуальных машин серии D/E, новые виртуальные машины версии 6 поставляются с необработанными дисками NVMe без форматирования. После запуска виртуальной машины клиенты должны инициализировать и отформатировать диски в файловую систему.
Виртуальные машины серии Dl/D/E версии 6 оптимизированы для использования локального диска NVMe локальной среды NVMe на узле, подключенном непосредственно к виртуальной машине, а не к локальным дискам SCSI. Этот метод обеспечивает более высокую пропускную способность операций ввода и вывода в секунду и более высокую пропускную способность для рабочих нагрузок.
Какие изменения следует подготовить при настройке виртуальных машин с временными дисками NVMe?
Диски следует инициализировать и отформатировать после запуска виртуальной машины. После остановки, размещения сделки или планового обслуживания и событий автоматического восстановления, инициированных Azure, виртуальные машины запускаются только с необработанных дисков NVMe. Диски NVMe temp не отображаются для приложений до тех пор, пока они не инициализированы и отформатированы.
После запуска виртуальной машины можно охватывать отдельные диски NVMe.
Файл страниц Windows помещается на постоянные диски ОС (если вы не используете функцию эфемерной ОС), но ее можно переместить на временные диски NVMe по мере необходимости после запуска виртуальной машины.
Функция эфемерной ОС, если она используется, преобразует один или несколько дисков NVMe (в зависимости от размера виртуальной машины и образа) в более медленный диск на основе SCSI/VHD, аналогичный тому, как он был на виртуальных машинах версии 5 и более старых виртуальных машин. Для больших размеров виртуальных машин остальные диски остаются необработанными NVMe без форматирования.
Список единиц хранения ресурсов (SKU) в REST API предоставляет несколько возможностей виртуальных машин. Следующая итерация размеров виртуальных машин использует более быстрый и эффективный протокол NVMe для локального хранилища вместо протокола SCSI, используемого ранее размерами виртуальных машин.
Для виртуальных машин Azure локальный диск на основе SCSI является временным диском ресурсов, а
MaxResourceVolumeMB
значение определяет размер этого диска. Напротив,NVMeDiskSizeInMiB
значение указывает размер локального хранилища на основе NVMe.
Что такое минимальное шифрование, предлагаемое Azure для временных дисков NVMe?
Все локальные диски NVMe на виртуальных машинах Azure имеют встроенное шифрование, включенное по умолчанию для защиты данных. Диски temp NVMe поддерживают функцию шифрования неактивных данных. Уникальный ключ шифрования данных (DEK) шифрует данные для каждого диска NVMe, назначенного виртуальной машине. Ключ шифрования ключей (KEK) помогает защитить DEK. При удалении виртуальной машины данные на диске NVMe temp удаляются криптографически. Все виртуальные машины версии 6, представленные с 2024 года и более поздних версий, имеют свои локальные диски NVMe, зашифрованные по умолчанию с помощью аппаратного шифрования с управляемым ключом платформы.
- Данные шифруются с помощью XTS-AES-256, AES-256-GCM или более сильного шифра.
- Устройство создает уникальный ключ шифрования мультимедиа (MEK) для каждого диска на виртуальной машине.
- MeK:
- Создано и хранится полностью в оборудовании устройства.
- Никогда не предоставляется узлу, виртуальной машине или любому внешнему компоненту, включая оператор или систему Azure.
- Все операции шифрования и расшифровки происходят на устройстве с помощью MEK.
- MeK уничтожается при удалении виртуальной машины, гарантируя, что после этого никакие компоненты не смогут получить доступ к данным.
Что такое расширенное шифрование неактивных данных?
Расширенное шифрование неактивных данных — это еще один уровень защиты, доступный на виртуальных машинах серии Azure V6 и Lsv4 с поддержкой стандартов TCG-OPAL. Вам не нужно предпринимать никаких действий для этой функции, это значение по умолчанию для этих типов виртуальных машин.
- Значение ПИН-кода создается и безопасно хранится инфраструктурой Azure для каждого meK.
- ПИН-код передается через функцию извлечения ключей (KDF) на устройстве хранилища для создания ключа шифрования ключей (KEK). ПИН-код выступает в качестве ключа управления платформой (PMK).
- MEK шифруется с помощью KEK и хранится внутри устройства хранения.
- KEK не хранится в любом месте и динамически создается устройством хранения, когда ПИН-код используется для успешной проверки подлинности. Без этого ПИН-кода устройство не может расшифровать собственные сохраненные данные, даже если физически к ним обращается.
- Устройство хранилища проходит проверку подлинности при запуске виртуальной машины и блокируется при остановке виртуальной машины, тем самым обеспечивая доступ к данным только при запуске виртуальной машины.
Как изменить размер виртуальной машины версии 5 или более ранней версии с временным диском до версии 6?
Ознакомьтесь с часто задаваемыми вопросами о размерах виртуальных машин Azure без локального временного диска.
Как определить диск NVMe temp?
Для Windows можно выполнить следующую команду:
Get-PhysicalDisk | where { $_.FriendlyName.contains("NVMe Direct Disk")}
Для Linux можно выполнить следующую команду:
sudo nvme id-ns /dev/nvme0n1 -b | dd bs=1 skip=384 status=none | sed 's/\x00*$//'
Как форматировать и инициализировать временные диски NVMe в Windows при создании виртуальной машины?
Вы можете использовать графический интерфейс или Azure PowerShell.
Графический пользовательский интерфейс
Совет
Следующий пример графического интерфейса предназначен для иллюстрирующих целей. Рекомендуется создавать скрипты для автоматизации этого рабочего процесса для рабочих развертываний.
Выберите клавиши с логотипом Windows + R, чтобы открыть диалоговое окно "Запуск ". Введите diskmgmt.msc и выберите клавишу ВВОД.
Выберите стиль секции (MBR или GPT) и диски, которые необходимо инициализировать, и нажмите кнопку "ОК".
Щелкните правой кнопкой мыши диск для секционирования и выберите новый простой том.
Чтобы указать такие элементы, как размер тома, буква диска, файловая система и метка тома, выполните мастер создания простого тома. Нажмите кнопку "Далее", чтобы перейти к мастеру.
Чтобы завершить секцию и формат, просмотрите параметры и нажмите кнопку "Готово".
Убедитесь, что форматированные и инициализированные диски NVMe отображаются в средстве управления дисками Windows, аналогично тому, как в этом примере отображается новый том (E: ).
Скрипт Azure PowerShell
Совет
Следующий скрипт инициализирует, форматирует и назначает буквы диска. Однако она удаляет все данные на диске. Прежде чем развертывать его в рабочей среде, необходимо тщательно протестировать его на виртуальных машинах.
# Select the raw NVMe disks to partition and format
$RawNvmeDisks = Get-PhysicalDisk -CanPool $True | where { $_.FriendlyName.contains("NVMe Direct Disk")}
# Create a pool of the existing disks
New-StoragePool -FriendlyName NVMePool -StorageSubsystemFriendlyName "Windows Storage*" -PhysicalDisks $RawNvmeDisks -ResiliencySettingNameDefault Simple
#Create a new disk, initialize, partition, and format
$Disk = New-VirtualDisk -FriendlyName NVMeTemporary -StoragePoolFriendlyName NVMePool -NumberOfColumns @($RawNvmeDisks).count -PhysicalDiskRedundancy 0 -ResiliencySettingName "Simple" -UseMaximumSize
$Disk | Initialize-Disk
#Create a partition and format. Ignore the pop-up.
New-Partition -DiskId $Disk.UniqueId -AssignDriveLetter -UseMaximumSize | Format-Volume
Как форматировать и инициализировать временные диски NVMe в Linux?
В следующем скрипте приведен пример инициализации дисков NVMe в Linux. Скрипт перечисляет все временные диски NVMe на виртуальной машине, объединяет диски в один массив RAID 0 и создает форматированную секцию указанной файловой системы.
Диски temp NVMe отличаются номером модели, который отображается Microsoft NVMe Direct Disk
в гостевой ОС. Этот скрипт использует nvme-cli id-ctrl
команду для запроса номера модели каждого устройства NVMe.
Скрипт сначала проверяет наличие всех уже созданных томов дисков NVMe (идентифицируемых filesystem
меткой). Если массив, как представляется, присутствует, скрипт проверяет целостность массива и повторяет процесс инициализации при необходимости. Массив повторно инициализируется в следующих случаях:
- Отсутствует один или несколько временных дисков массива.
- В массиве еще не включены временные диски.
- Массив дисков находится в недопустимом или неизвестном состоянии.
- Связанные файлы конфигурации отсутствуют или недопустимы.
#!/bin/bash
# Script requirements:
# nvme-cli
# mdadm
# gdisk
readonly USAGE="Usage: $(basename "$0") <filesystem> <filesystem mount point (optional)>"
# Label used to identify the NVMe array file system and associated disks
# Can't exceed 16 characters
readonly RAID0_FILESYSTEM_LABEL="azure_nvme_temp"
# Device path used for the RAID 0 NVMe array
# Choose any unoccupied device path of format /dev/mdX (X = 0 to 99)
readonly RAID0_DEVICE_PATH="/dev/md0"
# Formatted RAID 0 partition is mounted here
readonly DEFAULT_MOUNT_POINT="/mnt/${RAID0_FILESYSTEM_LABEL}"
filesystem="$1"
if [ ! "$filesystem" ]; then
printf "No filesystem specified. Usage: $USAGE\n"
exit 1
fi
if ! [ -x "$(command -v mkfs.$filesystem)" ]; then
printf "Filesystem \"$filesystem\" not supported by mkfs\n$USAGE\n"
exit 1
fi
mount_point="$2"
if [ ! "$mount_point" ]; then
printf "No mount point specified. Using default: $DEFAULT_MOUNT_POINT\n"
mount_point=$DEFAULT_MOUNT_POINT
fi
# Make sure mdadm.conf is present
mdadm_conf_path=""
if [ -e "/etc/mdadm/mdadm.conf" ]; then
mdadm_conf_path="/etc/mdadm/mdadm.conf"
elif [ -e "/etc/mdadm.conf" ]; then
mdadm_conf_path="/etc/mdadm.conf"
else
print "Couldn't find mdadm.conf file"
exit 1
fi
# Enumerate unmounted NVMe direct disks
devices=$(lsblk -p -o NAME,TYPE,MOUNTPOINT | grep "nvme" | awk '$2 == "disk" && $3 == "" {print $1}')
nvme_direct_disks=()
for device in $devices
do
if nvme id-ctrl "$device" | grep -q "Microsoft NVMe Direct Disk"; then
nvme_direct_disks+=("$device")
fi
done
nvme_direct_disk_count=${#nvme_direct_disks[@]}
printf "Found $nvme_direct_disk_count NVMe Direct Disks\n"
# Check if there's already an NVMe Direct Disk RAID 0 disk (or remnant data)
if grep "$RAID0_FILESYSTEM_LABEL" /etc/fstab > /dev/null; then
fstab_entry_present=true
fi
if grep "$RAID0_FILESYSTEM_LABEL" $mdadm_conf_path > /dev/null; then
mdadm_conf_entry_present=true
fi
if [ -e $RAID0_DEVICE_PATH ]; then
nvme_raid0_present=true
fi
if [ "$fstab_entry_present" = true ] || [ "$mdadm_conf_entry_present" = true ] || [ "$nvme_raid0_present" = true ]; then
# Check if the RAID 0 volume and associated configurations are still intact or need to be reinitialized
#
# If reinitialization is needed, clear the old RAID 0 information and associated files
reinit_raid0=false
if [ "$fstab_entry_present" = true ] && [ "$mdadm_conf_entry_present" = true ] && [ "$nvme_raid0_present" = true ]; then
# Check RAID 0 device status
if ! mdadm --detail --test $RAID0_DEVICE_PATH &> /dev/null; then
reinit_raid0=true
# Test the NVMe direct disks for valid mdadm superblocks
else
for device in "${nvme_direct_disks[@]}"
do
if ! mdadm --examine $device &> /dev/null; then
reinit_raid0=true
break
fi
done
fi
else
reinit_raid0=true
fi
if [ "$reinit_raid0" = true ]; then
echo "Errors found in NVMe RAID 0 temp array device or configuration. Reinitializing."
# Remove the file system and partition table, and stop the RAID 0 array
if [ "$nvme_raid0_present" = true ]; then
if [ -e ${RAID0_DEVICE_PATH}p1 ]; then
umount ${RAID0_DEVICE_PATH}p1
wipefs -a -f ${RAID0_DEVICE_PATH}p1
fi
sgdisk -o $RAID0_DEVICE_PATH &> /dev/null
mdadm --stop $RAID0_DEVICE_PATH
fi
# Remove any mdadm metadata from all NVMe Direct Disks
for device in "${nvme_direct_disks[@]}"
do
printf "Clearing mdadm superblock from $device\n"
mdadm --zero-superblock $device &> /dev/null
done
# Remove any associated entries in fstab and mdadm.conf
sed -i.bak "/$RAID0_FILESYSTEM_LABEL/d" /etc/fstab
sed -i.bak "/$RAID0_FILESYSTEM_LABEL/d" $mdadm_conf_path
else
printf "Valid NVMe RAID 0 array present and no additional Direct Disks found. Skipping\n"
exit 0
fi
fi
if [ "$nvme_direct_disk_count" -eq 0 ]; then
printf "No NVMe Direct Disks found\n"
exit 1
elif [ "$nvme_direct_disk_count" -eq 1 ]; then
additional_mdadm_params="--force"
fi
# Initialize enumerated disks as RAID 0
printf "Creating RAID 0 array from:\n"
printf "${nvme_direct_disks[*]}\n\n"
if ! mdadm --create $RAID0_DEVICE_PATH --verbose $additional_mdadm_params --name=$RAID0_FILESYSTEM_LABEL --level=0 --raid-devices=$nvme_direct_disk_count ${nvme_direct_disks[*]}; then
printf "Failed to create RAID 0 array\n"
exit 1
fi
# Create a GPT partition entry
readonly GPT_PARTITION_TYPE_GUID="0FC63DAF-8483-4772-8E79-3D69D8477DE4"
printf "\nCreating GPT on $RAID0_DEVICE_PATH..\n"
sgdisk -o $RAID0_DEVICE_PATH &> /dev/null
if ! sgdisk --new 1::0 --typecode 1:$GPT_PARTITION_TYPE_GUID $RAID0_DEVICE_PATH &> /dev/null; then
printf "Failed to create partition on $RAID0_DEVICE_PATH\n"
exit 1
fi
# Format the partition
partition_path="${RAID0_DEVICE_PATH}p1"
printf "\nCreating $filesystem filesystem..\n"
if ! mkfs.$filesystem -q -L $RAID0_FILESYSTEM_LABEL $partition_path; then
printf "Failed to create $filesystem filesystem\n"
exit 1
fi
printf "The operation has completed successfully.\n"
# Add the partition to /etc/fstab
echo "LABEL=$RAID0_FILESYSTEM_LABEL $mount_point $filesystem defaults,nofail 0 0" >> /etc/fstab
# Add RAID 0 array to mdadm.conf
mdadm --detail --scan >> $mdadm_conf_path
update-initramfs -u
# Mount the partition
printf "\nMounting filesystem to $mount_point..\n"
mkdir $mount_point &> /dev/null
if ! mount -a; then
printf "Failed to automount partition\n"
exit 1
fi
printf "The operation has completed successfully.\n"
exit 0
Как переместить файл страницы Windows с диска ОС на временный диск NVMe?
Вы можете использовать графический интерфейс или Azure PowerShell.
Графический пользовательский интерфейс
Совет
Следующий пример графического интерфейса предназначен для иллюстрирующих целей. Рекомендуется создавать скрипты для автоматизации этого рабочего процесса для рабочих развертываний.
Выберите клавиши с логотипом Windows + R, чтобы открыть диалоговое окно "Запуск ". Введите sysdm.cpl и выберите клавишу ВВОД.
Перейдите на вкладку "Дополнительно " и нажмите кнопку "Параметры " в разделе "Производительность ".
В диалоговом окне "Параметры производительности" выберите вкладку "Дополнительно" и нажмите кнопку "Изменить" в разделе "Виртуальная память".
Снимите размер файла автоматического управления разбиением на страницы для всех дисков . Если файл страницы установлен на диск ОС, выберите диск ОС, выберите параметр "Нет разбиения на страницы", а затем нажмите кнопку "Задать ". Выберите локальный диск NVMe в локальной среде, выберите параметр "Управляемый системой" размер и нажмите кнопку "Задать ". Нажмите кнопку "ОК", чтобы закрыть все диалоговые окна.
Чтобы эти изменения вступили в силу, может потребоваться перезапустить виртуальную машину.
Скрипт Azure PowerShell
$OsDisk = "C:"
# This value can vary, depending on which drive letter is assigned to the disk
$NVMeDisk = "E:"
# Disable automatic pagefile management
$Computer = Get-WmiObject Win32_computersystem -EnableAllPrivileges
$Computer.AutomaticManagedPagefile = $false
$Computer.Put()
# Delete the pagefile on the OS disk
$PageFile = Get-WmiObject -Query "select * from Win32_PageFileSetting where name='$OsDisk\\pagefile.sys'"
$PageFile.Delete()
# Create a new pagefile on the NVMe drive with system-managed size
Set-WMIInstance -Class Win32_PageFileSetting -Arguments @{name="$NVMeDisk\\pagefile.sys"; InitialSize=0; MaximumSize=0} -EnableAllPrivileges
Чтобы эти изменения вступили в силу, может потребоваться перезапустить виртуальную машину.
Как переместить файл буфера Linux с диска ОС на временный NVMe-диск?
Выберите диск NVMe, используемый для буферного пространства:
root@D2adsv6:/ # lsblk -p NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT /dev/nvme1n1 259:0 0 30G 0 disk ├─/dev/nvme1n1p1 259:1 0 29.9G 0 part / └─/dev/nvme1n1p15 259:3 0 106M 0 part /boot/efi /dev/nvme0n1 259:4 0 75G 0 disk
Создайте пространство подкачки на диске:
root@D2adsv6:/ # mkswap /dev/nvme0n1 Setting up swapspace version 1, size = 75 GiB (80530632704 bytes) no label, UUID=064bdcfb-86ae-49f3-bf9d-b956493e2a1d
Включите пространство подкачки:
root@D2adsv6:/ # swapon /dev/nvme0n1
Убедитесь, что пространство подкачки настроено правильно:
root@D2adsv6:/ # swapon -s Filename Type Size Used Priority /dev/nvme0n1 partition 78643196 0 -2
Добавьте пространство буфера, чтобы
/etc/fstab
сделать его постоянным во время перезапуска:root@D2adsv6:/ # echo '/dev/nvme0n1 swap swap defaults 0 0' >> /etc/fstab
Какие рекомендации следует учитывать при событиях обслуживания, повторном развертывании виртуальных машин и перезапусках виртуальных машин?
Диски Temp NVMe, подключенные к виртуальным машинам V6, являются временными, как и временные диски в других рядах виртуальных машин. Это означает, что все данные на виртуальной машине теряются после повторного развертывания или во время события обслуживания. Дополнительные сведения о событиях обслуживания и простоях см. в статье "Общие сведения о перезагрузках виртуальной машины: обслуживание и простой".
Если виртуальная машина перемещена на новое оборудование, эти диски отключены и новые неподключенные диски отображаются в операционной системе при резервном копировании. Если виртуальная машина не изменила оборудование, диски NVMe temp могут по-прежнему присутствовать. Предыдущий сценарий для подключения дисков проверяет наличие отключенных дисков перед попыткой подключения.
Рекомендуется автоматически запускать скрипт подключения при каждом запуске виртуальной машины и откладывать все другие скрипты запуска, которые нуждаются в дисках до завершения работы скрипта подключения.