In dit artikel vindt u enkele veelgestelde vragen over ondersteuning voor tijdelijke NVMe-schijven (Non-Volatile Memory Express) op virtuele machines (VM's) die zijn gemaakt in Azure. In dit artikel verwijst de term 'tijdelijke schijf' naar de tijdelijke schijf die is gemaakt op lokale SSD.
Wat zijn de vereisten voor het maken van tijdelijke schijf die gebruikmaakt van de NVMe-interface voor mijn VM?
NVMe-ondersteuning voor lokale tijdelijke schijven varieert op het niveau van een virtuele machine (VM). Alle nieuwe virtuele v6-machines met lokale schijf ondersteunen NVMe-tijdelijke schijven, maar v5-VM's en eerdere versies bieden mogelijk geen ondersteuning voor lokale NVMe-tijdelijke schijven, omdat de meeste van deze grootten lokale schijven zich op de SCSI-interface bevinden. Sommige VM-families, zoals L-serie, hebben lokaal NVMe-SCHIJVEN gekoppeld vanaf vm's van de Lsv2-generatie. Raadpleeg de overzichten van de VM-serie om te bepalen of NVMe-tijdelijke schijven worden ondersteund. Houd er ook rekening mee dat uw gastbesturingssysteem ondersteuning voor NVMe-stuurprogramma's moet hebben om lokale NVMe te kunnen gebruiken, die de meeste recente versies van het besturingssysteem standaard hebben.
Hoe verschillen tijdelijke NVMe-schijven in mijn Dl/D/E_v6-VM's van externe NVMe-schijven?
Een belangrijk verschil is dat tijdelijke NVMe-schijven tijdelijk zijn en dat gegevens op de VM's kunnen verdwijnen, maar gegevens op externe NVMe-schijven blijven behouden. Houd rekening met dit verschil wanneer u de opslagopties van uw VIRTUELE machine kiest.
In tegenstelling tot de vorige VM's uit de D/E-serie, worden de nieuwe v6-VM's geleverd met onbewerkte, niet-opgemaakte NVMe-schijven. Klanten moeten de schijven initialiseren en formatteren in een bestandssysteem van hun voorkeur nadat de VIRTUELE machine is opgestart.
De VM's uit de Dl/D/E v6-serie zijn geoptimaliseerd voor het gebruik van de lokale tijdelijke NVMe-schijf op het knooppunt dat rechtstreeks aan de VIRTUELE machine is gekoppeld in plaats van eerder gebruikte lokale SCSI-schijven (Small Computer System Interface). Met deze methode kunt u hogere invoer-/uitvoerbewerkingen per seconde en hogere doorvoer voor uw workloads uitvoeren.
Welke wijzigingen moet ik voorbereiden bij het configureren van mijn VM's met tijdelijke NVMe-schijven?
Schijven moeten worden geïnitialiseerd en geformatteerd nadat de VM is gestart. Nadat door de gebruiker geïnitieerde stops, deallocations of gepland onderhoud en door Azure geïnitieerde automatische herstelgebeurtenissen zijn gestart, starten de VM's met alleen onbewerkte tijdelijke NVMe-schijven. Er zijn geen tijdelijke NVMe-schijven zichtbaar voor toepassingen totdat ze zijn geïnitialiseerd en geformatteerd.
U kunt afzonderlijke NVMe-stations naar behoefte omvatten nadat de VIRTUELE machine is opgestart.
Er wordt een Windows-paginabestand op permanente besturingssysteemschijven geplaatst (tenzij u de tijdelijke functie van het besturingssysteem gebruikt), maar u kunt het indien nodig verplaatsen naar tijdelijke NVMe-schijven nadat de VM is gestart.
Als u deze functie gebruikt, converteert u een of meer NVMe-schijven (afhankelijk van de VM en de grootte van de installatiekopieën) naar een tragere SCSI-/VHD-schijf, vergelijkbaar met de manier waarop deze zich op v5 en oudere VM's bevond. Voor de grotere VM-grootten blijven de resterende stations ongewijzigd als onbewerkte, niet-opgemaakte NVMe.
De lijst met resource-SKU's (Stock Keeping Units) in de REST API biedt verschillende mogelijkheden van virtuele machines. De volgende iteratie van VM-grootten maakt gebruik van het snellere en efficiëntere NVMe-protocol voor lokale opslag, in plaats van het SCSI-protocol dat in eerdere VM-grootten wordt gebruikt.
Voor virtuele Azure-machines is lokale opslag op basis van SCSI een tijdelijke resourceschijf en de
MaxResourceVolumeMBwaarde geeft de grootte van deze schijf aan. De waarde geeft daarentegenNVMeDiskSizeInMiBde grootte van lokale opslag op basis van NVMe aan.
Wat is de minimale versleuteling die door Azure wordt aangeboden voor de tijdelijke NVMe-schijven?
Alle lokale NVMe-schijven op virtuele Azure-machines (VM's) hebben standaard ingebouwde versleuteling ingeschakeld voor gegevensbeveiliging. Tijdelijke NVMe-schijven ondersteunen de functie van dataversleuteling-at-rest. Met een unieke gegevensversleutelingssleutel (DEK) worden de gegevens versleuteld voor elke tijdelijke NVMe-schijf die aan de VIRTUELE machine is toegewezen. Een sleutelversleutelingssleutel (KEK) helpt de DEK te beveiligen. Wanneer u een virtuele machine verwijdert, worden de gegevens op de tijdelijke NVMe-schijf cryptografisch gewist. Alle v6-VM's die vanaf 2024 worden geïntroduceerd, hebben hun lokale NVMe-stations standaard versleuteld met behulp van hardwaregebaseerde versleuteling met een door platform beheerde sleutel.
- Gegevens worden versleuteld met XTS-AES-256, AES-256-GCM of een sterkere codering.
- Het apparaat genereert een unieke MEK (Media Encryption Key) voor elke schijf in de VIRTUELE machine.
- De MEK is:
- Volledig gegenereerd en opgeslagen in de hardware van het apparaat.
- Nooit blootgesteld aan de host, VM of een extern onderdeel, met inbegrip van de operator of het Azure-systeem.
- Alle versleutelings- en ontsleutelingsbewerkingen vinden plaats op het apparaat met behulp van de MEK.
- De MEK wordt vernietigd wanneer u uw VIRTUELE machine verwijdert, zodat er achteraf geen enkel onderdeel toegang heeft tot de gegevens.
Wat is Enhanced Encryption at Rest?
Verbeterde versleuteling-at-rest is een andere beveiligingslaag die beschikbaar is op vm's uit de Azure V6-serie en Lsv4-serie via ondersteuning voor TCG-OPAL standaarden. U hoeft geen actie te ondernemen voor deze functie. Dit is de standaardinstelling voor deze VM-typen.
- Er wordt een pincodewaarde gegenereerd en veilig opgeslagen door de Azure-infrastructuur voor elke MEK.
- De pincode wordt doorgegeven via een KDF (Key Derivation Function) binnen het opslagapparaat om een KEK (Key Encrypting Key) te genereren. De pincode fungeert als een platformbeheersleutel (PMK).
- De MEK wordt versleuteld met behulp van de KEK en intern opgeslagen in het opslagapparaat.
- De KEK wordt nergens opgeslagen en wordt dynamisch gegenereerd door het opslagapparaat wanneer de pincode wordt gebruikt om deze te verifiëren. Zonder deze pincode kan het apparaat zijn eigen opgeslagen gegevens niet ontsleutelen, zelfs als het fysiek toegankelijk is.
- Het opslagapparaat wordt geverifieerd wanneer de virtuele machine wordt gestart en wordt vergrendeld wanneer de VIRTUELE machine wordt gestopt, waardoor de toegang tot gegevens alleen beschikbaar is wanneer de VIRTUELE machine wordt uitgevoerd.
Hoe kan ik het formaat van een v5- of oudere VIRTUELE machine wijzigen met een tijdelijke schijf naar v6?
Hoe kan ik mijn tijdelijke NVMe-schijf identificeren?
U kunt de volgende opdracht voor Windows uitvoeren:
Get-PhysicalDisk | where { $_.FriendlyName.contains("NVMe Direct Disk")}
U kunt de volgende opdracht uitvoeren voor Linux:
sudo nvme id-ns /dev/nvme0n1 -b | dd bs=1 skip=384 status=none | sed 's/\x00*$//'
Hoe kan ik tijdelijke NVMe-schijven in Windows formatteren en initialiseren wanneer ik een VIRTUELE machine maak?
U kunt de GUI of Azure PowerShell gebruiken.
Grafische gebruikersinterface
Aanbeveling
Het volgende GUI-voorbeeld is bedoeld voor illustratieve doeleinden. U wordt aangeraden scripts te maken om deze werkstroom voor productie-implementaties te automatiseren.
Selecteer de Windows-logotoets + R om het dialoogvenster Uitvoeren te openen. Typ diskmgmt.msc en selecteer de Enter-toets.
Selecteer een partitiestijl (MBR of GPT) en de schijven die moeten worden geïnitialiseerd en selecteer vervolgens OK.
Klik met de rechtermuisknop op de schijf die u wilt partitioneren en selecteer vervolgens Nieuw eenvoudig volume.
Als u items zoals volumegrootte, stationsletter, bestandssysteem en volumelabel wilt opgeven, volgt u de wizard Nieuw eenvoudig volume. Selecteer de knop Volgende om door de wizard te gaan.
Als u de partitie en indeling wilt voltooien, controleert u uw instellingen en selecteert u Voltooien.
Controleer of de geformatteerde en geïnitialiseerde NVMe-schijven worden weergegeven in het hulpprogramma Windows Disk Management, vergelijkbaar met hoe nieuw volume (E:) in dit voorbeeld wordt weergegeven.
Azure PowerShell-script
Aanbeveling
Met het volgende script worden stationsletters geïnitialiseerd, opgemaakt en toegewezen. Alle gegevens op de schijf worden echter gewist. U moet deze grondig testen op uw VM's voordat u deze implementeert in productie.
# 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
Hoe kan ik tijdelijke NVMe-schijven formatteren en initialiseren in Linux?
Het volgende script bevat een voorbeeld van het initialiseren van tijdelijke NVMe-schijven in Linux. Het script bevat alle tijdelijke NVMe-schijven op de VIRTUELE machine, combineert de schijven in één RAID 0-matrix en maakt een geformatteerde partitie van het opgegeven bestandssysteem.
Tijdelijke NVMe-schijven worden onderscheiden door het modelnummer, dat lijkt op Microsoft NVMe Direct Disk het gastbesturingssystemen. Dit script gebruikt de opdracht om het nvme-cli id-ctrl modelnummer van elk NVMe-apparaat op te vragen.
Het script controleert eerst op eventuele reeds gemaakte tijdelijke NVMe-schijfvolumes (geïdentificeerd door het filesystem label). Als een matrix aanwezig lijkt te zijn, verifieert het script de integriteit van de matrix en herhaalt het initialisatieproces indien nodig. In de volgende gevallen wordt de matrix opnieuw geïnitialiseerd:
- Een of meer tijdelijke schijven van matrices ontbreken.
- Er zijn tijdelijke schijven die nog niet zijn opgenomen in de matrix.
- De schijfmatrix heeft een ongeldige of onbekende status.
- Gekoppelde configuratiebestanden ontbreken of zijn ongeldig.
#!/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
Hoe kan ik het Windows-paginabestand van een besturingssysteemschijf verplaatsen naar een tijdelijke NVMe-schijf?
U kunt de GUI of Azure PowerShell gebruiken.
Grafische gebruikersinterface
Aanbeveling
Het volgende GUI-voorbeeld is bedoeld voor illustratieve doeleinden. U wordt aangeraden scripts te maken om deze werkstroom voor productie-implementaties te automatiseren.
Selecteer de Windows-logotoets + R om het dialoogvenster Uitvoeren te openen. Typ sysdm.cpl en selecteer de Enter-toets.
Selecteer het tabblad Geavanceerd en selecteer vervolgens de knop Instellingen in de sectie Prestaties .
Selecteer in het dialoogvenster Prestatieopties het tabblad Geavanceerd en selecteer vervolgens de knop Wijzigen in de sectie Virtueel geheugen .
Schakel het selectievakje Wisselbestandsgrootte automatisch beheren uit voor alle stations . Als een paginabestand is ingesteld op uw besturingssysteemschijf, selecteert u de besturingssysteemschijf, selecteert u de optie Geen wisselbestand en selecteert u vervolgens de knop Instellen . Selecteer uw lokale tijdelijke NVMe-station, selecteer de optie Door het systeem beheerde grootte en selecteer vervolgens de knop Instellen . Selecteer OK om alle dialoogvensters te sluiten.
Mogelijk moet u de VM opnieuw opstarten om deze wijzigingen van kracht te laten worden.
Azure PowerShell-script
$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
Mogelijk moet u de VM opnieuw opstarten om deze wijzigingen van kracht te laten worden.
Hoe kan ik het Linux-wisselbestand van een besturingssysteemschijf verplaatsen naar een tijdelijke NVMe-schijf?
Selecteer de NVMe-schijf die wordt gebruikt voor wisselruimte:
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 diskMaak wisselruimte op de schijf:
root@D2adsv6:/ # mkswap /dev/nvme0n1 Setting up swapspace version 1, size = 75 GiB (80530632704 bytes) no label, UUID=064bdcfb-86ae-49f3-bf9d-b956493e2a1dSchakel de wisselruimte in:
root@D2adsv6:/ # swapon /dev/nvme0n1Controleer of de wisselruimte juist is ingesteld:
root@D2adsv6:/ # swapon -s Filename Type Size Used Priority /dev/nvme0n1 partition 78643196 0 -2Voeg de wisselruimte toe om deze permanent te
/etc/fstabmaken bij opnieuw opstarten:root@D2adsv6:/ # echo '/dev/nvme0n1 swap swap defaults 0 0' >> /etc/fstab
Waar moet ik rekening mee houden voor onderhoudsgebeurtenissen, VM-herployments en vm-herstarts?
Tijdelijke NVMe-schijven die zijn gekoppeld aan V6-VM's zijn kortstondig, vergelijkbaar met tijdelijke stations op andere VM-serie. Dit betekent dat u alle gegevens op de VM kwijtraakt na het opnieuw implementeren of tijdens een onderhoudsgebeurtenis. Zie Voor meer informatie over onderhoudsevenementen en downtime informatie over het opnieuw opstarten van vm's: Onderhoud versus downtime.
Als de virtuele machine naar nieuwe hardware is verplaatst, worden deze stations ontkoppeld en worden nieuwe niet-gekoppelde schijven weergegeven aan het besturingssysteem wanneer deze weer wordt weergegeven. Als de VM geen hardware heeft gewijzigd, zijn de tijdelijke NVMe-schijven mogelijk nog steeds aanwezig. Het voorgaande script voor het koppelen van de stations controleert op niet-gekoppelde stations voordat deze probeert te koppelen.
Het is een aanbevolen procedure om het koppelingsscript automatisch uit te voeren telkens wanneer de VIRTUELE machine wordt gestart en alle andere opstartscripts die de stations nodig hebben, uit te stellen totdat het koppelingsscript is uitgevoerd.