Поделиться через


Часто задаваемые вопросы о дисках Temp NVMe

В этой статье рассматриваются некоторые распространенные вопросы о поддержке временных дисков Ненезависимой памяти 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?

Как определить диск 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.

Графический пользовательский интерфейс

Совет

Следующий пример графического интерфейса предназначен для иллюстрирующих целей. Рекомендуется создавать скрипты для автоматизации этого рабочего процесса для рабочих развертываний.

  1. Выберите клавиши с логотипом Windows + R, чтобы открыть диалоговое окно "Запуск ". Введите diskmgmt.msc и выберите клавишу ВВОД.

    Снимок экрана: ввод команды управления дисками в диалоговом окне

  2. Выберите стиль секции (MBR или GPT) и диски, которые необходимо инициализировать, и нажмите кнопку "ОК".

    Снимок экрана: диалоговое окно инициализации диска для управления дисками.

  3. Щелкните правой кнопкой мыши диск для секционирования и выберите новый простой том.

    Снимок экрана: меню для выбора нового типа тома.

  4. Чтобы указать такие элементы, как размер тома, буква диска, файловая система и метка тома, выполните мастер создания простого тома. Нажмите кнопку "Далее", чтобы перейти к мастеру.

    Снимок экрана: указание размера тома в мастере создания простого тома.

    Снимок экрана: указание буквы диска в мастере создания простого тома.

    Снимок экрана: указание форматирования секций в мастере создания простого тома.

  5. Чтобы завершить секцию и формат, просмотрите параметры и нажмите кнопку "Готово".

    Снимок экрана: завершение работы мастера создания простого тома.

  6. Убедитесь, что форматированные и инициализированные диски 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.

Графический пользовательский интерфейс

Совет

Следующий пример графического интерфейса предназначен для иллюстрирующих целей. Рекомендуется создавать скрипты для автоматизации этого рабочего процесса для рабочих развертываний.

  1. Выберите клавиши с логотипом Windows + R, чтобы открыть диалоговое окно "Запуск ". Введите sysdm.cpl и выберите клавишу ВВОД.

    Снимок экрана: диалоговое окно запуска sysdm.cpl.

  2. Перейдите на вкладку "Дополнительно " и нажмите кнопку "Параметры " в разделе "Производительность ".

    Снимок экрана: кнопка для параметров производительности на вкладке

  3. В диалоговом окне "Параметры производительности" выберите вкладку "Дополнительно" и нажмите кнопку "Изменить" в разделе "Виртуальная память".

    Снимок экрана: вкладка

  4. Снимите размер файла автоматического управления разбиением на страницы для всех дисков . Если файл страницы установлен на диск ОС, выберите диск ОС, выберите параметр "Нет разбиения на страницы", а затем нажмите кнопку "Задать ". Выберите локальный диск 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-диск?

  1. Выберите диск 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
    
  2. Создайте пространство подкачки на диске:

    root@D2adsv6:/ # mkswap /dev/nvme0n1
    Setting up swapspace version 1, size = 75 GiB (80530632704 bytes)
    no label, UUID=064bdcfb-86ae-49f3-bf9d-b956493e2a1d
    
  3. Включите пространство подкачки:

    root@D2adsv6:/ # swapon /dev/nvme0n1
    
  4. Убедитесь, что пространство подкачки настроено правильно:

    root@D2adsv6:/ # swapon -s
    Filename                                Type            Size    Used    Priority
    /dev/nvme0n1                            partition       78643196        0       -2
    
  5. Добавьте пространство буфера, чтобы /etc/fstab сделать его постоянным во время перезапуска:

    root@D2adsv6:/ # echo '/dev/nvme0n1 swap swap defaults 0 0' >> /etc/fstab 
    

Какие рекомендации следует учитывать при событиях обслуживания, повторном развертывании виртуальных машин и перезапусках виртуальных машин?

Диски Temp NVMe, подключенные к виртуальным машинам V6, являются временными, как и временные диски в других рядах виртуальных машин. Это означает, что все данные на виртуальной машине теряются после повторного развертывания или во время события обслуживания. Дополнительные сведения о событиях обслуживания и простоях см. в статье "Общие сведения о перезагрузках виртуальной машины: обслуживание и простой".

Если виртуальная машина перемещена на новое оборудование, эти диски отключены и новые неподключенные диски отображаются в операционной системе при резервном копировании. Если виртуальная машина не изменила оборудование, диски NVMe temp могут по-прежнему присутствовать. Предыдущий сценарий для подключения дисков проверяет наличие отключенных дисков перед попыткой подключения.

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