Den här artikeln tar upp några vanliga frågor om stöd för tillfälliga NVMe-diskar (Non-Volatile Memory Express) på virtuella datorer som skapats i Azure. I den här artikeln refererar termen "temp disk" till den tillfälliga disk som skapas på lokal SSD.
Vilka är kraven för att skapa en temporär disk som använder NVMe-gränssnittet för min virtuella dator?
NVMe-stöd för lokala temporära diskar varierar på familjenivå för virtuella datorer (VM). Alla nya virtuella v6-datorer med lokal disk stöder NVMe-temporära diskar, men virtuella v5-datorer och tidigare versioner kanske inte stöder lokala NVMe-temp-diskar, eftersom de flesta av dessa storlekar lokala diskar finns i SCSI-gränssnittet. Vissa VM-familjer som L-serien har lokalt anslutna NVMe-SSD:er från Lsv2-generationens virtuella datorer och framåt. Se översikten över VM-familjen för att avgöra om NVMe-temporära diskar stöds. Observera också att gästoperativsystemet måste ha stöd för NVMe-drivrutin för att kunna använda lokal NVMe, som de flesta av de senaste OS-versionerna har som standard.
Hur skiljer sig temporära NVMe-diskar i mina Dl/D/E_v6 virtuella datorer från fjärr-NVMe-diskar?
En viktig skillnad är att temporära NVMe-diskar är tillfälliga och att data på de virtuella datorerna kan försvinna, men data på fjärr-NVMe-diskar finns kvar. Ta hänsyn till den här skillnaden när du väljer lagringsalternativen för den virtuella datorn.
Till skillnad från de tidigare virtuella datorerna i D/E-serien levereras de nya virtuella v6-datorerna med råa, oformaterade NVMe-diskar. Kunder bör initiera och formatera diskarna i ett filsystem som de föredrar när den virtuella datorn startas.
Virtuella datorer i Dl/D/E v6-serien är optimerade för att använda den lokala temporära NVMe-disken på noden som är ansluten direkt till den virtuella datorn i stället för tidigare använda lokala SCSI-diskar (Small Computer System Interface). Den här metoden möjliggör högre in-/utdataåtgärder per sekund och högre dataflöde för dina arbetsbelastningar.
Vilka ändringar ska jag förbereda mig för när jag konfigurerar mina virtuella datorer med temporära NVMe-diskar?
Diskar bör initieras och formateras när den virtuella datorn startas. När användarinitierade stopp, frigöringar eller planerat underhåll och Azure-initierade automatiska återställningshändelser startas de virtuella datorerna med endast råa temporära NVMe-diskar. Inga temporära NVMe-diskar är synliga för program förrän de har initierats och formaterats.
Du kan sträcka dig över separata NVMe-enheter till en efter behov när den virtuella datorn startas.
En Windows-sidfil placeras på beständiga OS-diskar (såvida du inte använder den tillfälliga OS-funktionen), men du kan flytta den till temporära NVMe-diskar efter behov när den virtuella datorn startas.
Om du använder den konverterar den tillfälliga OS-funktionen en eller flera NVMe-diskar (beroende på den virtuella datorn och avbildningsstorleken) till en långsammare SCSI/VHD-baserad disk, ungefär som på virtuella v5- och äldre datorer. För de större VM-storlekarna förblir de återstående enheterna oformaterade NVMe- oformaterade.
Listan över resurslagerhållningsenheter (SKU:er) i REST-API:et visar flera funktioner för virtuella datorer. Nästa iteration av VM-storlekar använder det snabbare och effektivare NVMe-protokollet för lokal lagring, i stället för SCSI-protokollet som tidigare VM-storlekar använder.
För virtuella Azure-datorer är SCSI-baserad lokal lagring en tillfällig resursdisk och
MaxResourceVolumeMB
värdet anger storleken på den här disken. DäremotNVMeDiskSizeInMiB
anger värdet storleken på NVMe-baserad lokal lagring.
Vilken är den minsta kryptering som erbjuds av Azure för de temporära NVMe-diskarna?
Alla lokala NVMe-diskar på virtuella Azure-datorer (VM) har inbyggd kryptering aktiverad som standard för dataskydd. Temp NVMe-diskar stöder funktionen för datakryptering i vila. En unik datakrypteringsnyckel (DEK) krypterar data för varje temporär NVMe-disk som tilldelats den virtuella datorn. En nyckelkrypteringsnyckel (KEK) hjälper till att skydda DEK. När du tar bort en virtuell dator raderas data på dess temporära NVMe-disk kryptografiskt. Alla virtuella v6-datorer som introduceras från 2024 och senare får sina lokala NVMe-enheter krypterade som standard med hjälp av maskinvarubaserad kryptering med en plattformshanterad nyckel.
- Data krypteras med XTS-AES-256, AES-256-GCM eller ett starkare chiffer.
- Enheten genererar en unik mediakrypteringsnyckel (MEK) för varje disk på den virtuella datorn.
- MEK:et är:
- Genereras och lagras helt i enhetens maskinvara.
- Exponeras aldrig för värden, den virtuella datorn eller någon extern komponent, inklusive operatören eller Azure-systemet.
- Alla krypterings- och dekrypteringsåtgärder utförs på enheten med hjälp av MEK.
- MEK:n förstörs när du tar bort den virtuella datorn, vilket säkerställer att ingen komponent kan komma åt data efteråt.
Vad är förbättrad kryptering i vila?
Förbättrad kryptering i vila är ett annat skyddslager som är tillgängligt på virtuella datorer i Azure V6-serien och Lsv4-serien via stöd för TCG-OPAL standarder. Du behöver inte vidta några åtgärder för den här funktionen, det är standard för dessa typer av virtuella datorer.
- Ett PIN-värde genereras och lagras på ett säkert sätt av Azure-infrastrukturen för varje MEK.
- PIN-koden skickas via en nyckelhärledningsfunktion (KDF) i lagringsenheten för att generera en nyckelkrypteringsnyckel (KEK). PIN-koden fungerar som en plattformshanteringsnyckel (PMK).
- MEK:n krypteras med hjälp av KEK:n och lagras internt i lagringsenheten.
- KEK lagras inte någonstans och genereras dynamiskt av lagringsenheten när PIN-koden används för att autentisera den. Utan den här PIN-koden kan enheten inte dekryptera sina egna lagrade data – även om den används fysiskt.
- Lagringsenheten autentiseras när den virtuella datorn startas och låses när den virtuella datorn stoppas, vilket säkerställer att åtkomst till data endast är tillgänglig när den virtuella datorn körs.
Hur ändrar jag storlek på en virtuell v5-dator eller en äldre virtuell dator med en temporär disk till v6?
Hur kan jag identifiera min temporära NVMe-disk?
Du kan köra följande kommando för Windows:
Get-PhysicalDisk | where { $_.FriendlyName.contains("NVMe Direct Disk")}
Du kan köra följande kommando för Linux:
sudo nvme id-ns /dev/nvme0n1 -b | dd bs=1 skip=384 status=none | sed 's/\x00*$//'
Hur kan jag formatera och initiera temporära NVMe-diskar i Windows när jag skapar en virtuell dator?
Du kan använda GUI eller Azure PowerShell.
Grafiskt användargränssnitt
Dricks
Följande GUI-exempel är avsett för illustrativa syften. Vi rekommenderar att du skapar skript för att automatisera arbetsflödet för produktionsdistributioner.
Välj Windows-tangenten + R för att öppna dialogrutan Kör . Skriv diskmgmt.msc och välj returnyckeln.
Välj ett partitionsformat (MBR eller GPT) och de diskar som ska initieras och välj sedan OK.
Högerklicka på disken som ska partitioneras och välj sedan Ny enkel volym.
Om du vill ange objekt som volymstorlek, enhetsbeteckning, filsystem och volymetikett följer du guiden Ny enkel volym. Välj knappen Nästa för att gå vidare genom guiden.
Om du vill slutföra partitionen och formatet granskar du inställningarna och väljer sedan Slutför.
Bekräfta att de formaterade och initierade NVMe-diskarna visas i verktyget Windows Diskhantering, ungefär som nya volymer (E:) visas i det här exemplet.
Azure PowerShell-skript
Dricks
Följande skript initierar, formaterar och tilldelar enhetsbeteckningar. Den raderar dock alla data på disken. Du bör testa den noggrant på dina virtuella datorer innan du distribuerar den i produktion.
# 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
Hur kan jag formatera och initiera temporära NVMe-diskar i Linux?
Följande skript innehåller ett exempel på initiering av temporära NVMe-diskar i Linux. Skriptet räknar upp alla temporära NVMe-diskar på den virtuella datorn, kombinerar diskarna till en enda RAID 0-matris och skapar en formaterad partition av det angivna filsystemet.
Temp NVMe-diskar särskiljs av modellnumret, som visas som Microsoft NVMe Direct Disk
gästoperativsystemet. Det här skriptet nvme-cli id-ctrl
använder kommandot för att fråga modellnumret för varje NVMe-enhet.
Skriptet söker först efter de temporära NVMe-diskvolymer som redan har skapats (identifieras av filesystem
etiketten). Om en matris verkar finnas verifierar skriptet matrisens integritet och upprepar initieringsprocessen om det behövs. Matrisen initieras igen i följande fall:
- En eller flera temporära matrisdiskar saknas.
- Det finns temporära diskar som inte redan ingår i matrisen.
- Diskmatrisen är i ett på annat sätt ogiltigt eller okänt tillstånd.
- Associerade konfigurationsfiler saknas eller är ogiltiga.
#!/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
Hur kan jag flytta Windows-sidfilen från en OS-disk till en temporär NVMe-disk?
Du kan använda GUI eller Azure PowerShell.
Grafiskt användargränssnitt
Dricks
Följande GUI-exempel är avsett för illustrativa syften. Vi rekommenderar att du skapar skript för att automatisera arbetsflödet för produktionsdistributioner.
Välj Windows-tangenten + R för att öppna dialogrutan Kör . Skriv sysdm.cpl och välj returnyckeln.
Välj fliken Avancerat och välj sedan knappen Inställningar i avsnittet Prestanda .
I dialogrutan Prestandaalternativ väljer du fliken Avancerat och väljer sedan knappen Ändra i avsnittet Virtuellt minne.
Avmarkera kryssrutan Hantera filstorlek för automatisk växling för alla enheter . Om en sidfil är inställd på os-disken väljer du os-disken , väljer alternativet Ingen växlingsfil och väljer sedan knappen Ange . Välj din lokala temporära NVMe-enhet, välj alternativet Systemhanterad storlek och välj sedan knappen Ange . Välj OK för att stänga alla dialogrutor.
Du kan behöva starta om den virtuella datorn för att ändringarna ska börja gälla.
Azure PowerShell-skript
$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
Du kan behöva starta om den virtuella datorn för att ändringarna ska börja gälla.
Hur kan jag flytta Linux-växlingsfilen från en OS-disk till en temporär NVMe-disk?
Välj den NVMe-disk som används för växlingsutrymme:
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
Skapa växlingsutrymme på disken:
root@D2adsv6:/ # mkswap /dev/nvme0n1 Setting up swapspace version 1, size = 75 GiB (80530632704 bytes) no label, UUID=064bdcfb-86ae-49f3-bf9d-b956493e2a1d
Aktivera växlingsutrymmet:
root@D2adsv6:/ # swapon /dev/nvme0n1
Kontrollera att växlingsutrymmet har konfigurerats korrekt:
root@D2adsv6:/ # swapon -s Filename Type Size Used Priority /dev/nvme0n1 partition 78643196 0 -2
Lägg till växlingsutrymmet för
/etc/fstab
att göra det beständigt över omstarter:root@D2adsv6:/ # echo '/dev/nvme0n1 swap swap defaults 0 0' >> /etc/fstab
Vilka överväganden behöver jag vara medveten om för underhållshändelser, omdistributioner av virtuella datorer och omstarter av virtuella datorer?
Temp NVMe-diskar som är anslutna till virtuella V6-datorer är tillfälliga, ungefär som temporära enheter i andra VM-serier. Det innebär att du förlorar alla data på den virtuella datorn efter omdistributionen eller under en underhållshändelse. Mer information om underhållshändelser och driftstopp finns i Förstå omstarter av virtuella datorer: Underhåll kontra stilleståndstid.
Om den virtuella datorn har flyttats till ny maskinvara demonteras dessa enheter och nya omonterade diskar visas för operativsystemet när den säkerhetskopieras. Om den virtuella datorn inte har ändrat maskinvaran kan de temporära NVMe-diskarna fortfarande finnas kvar. Föregående skript för montering av enheterna söker efter omonterade enheter innan det försöker montera.
Det är bästa praxis att köra monteringsskriptet automatiskt varje gång den virtuella datorn startar och fördröja andra startskript som behöver enheterna tills monteringsskriptet har körts.