Auf Englisch lesen Bearbeiten

Freigeben über


Häufig gestellte Fragen zu temporären NVMe-Datenträgern

In diesem Artikel werden einige häufige Fragen zur Unterstützung von temporären NVM Express-Datenträgern (temp NVMe) auf VMs behandelt, die in Azure erstellt werden.

Was sind die Voraussetzungen für die Aktivierung der temporären NVMe-Schnittstelle auf meiner VM?

Um die temporäre NVMe-Schnittstelle auf Ihrer VM zu aktivieren, müssen die folgenden Voraussetzungen erfüllt sein:

  • Wählen Sie eine VM-Familie aus, die NVMe unterstützt (z. B. die v6-VMs).
  • Auswählen eines Betriebssystems, das NVMe unterstützt
  • Stellen Sie sicher, dass Sie eine VM der Generation 2 verwenden, da NVMe nur Images der Generation 2 unterstützt.

Wie unterscheiden sich temporäre NVMe- Datenträger in meinen Dl/D/E_v6 VMs von Remote-NVMe-Datenträgern?

Ein wichtiger Unterschied besteht darin, dass temporäre NVMe-Datenträger vorübergehend sind und Daten auf VMs verschwinden können, aber Daten auf Remote-NVMe-Datenträgern verbleiben. Berücksichtigen Sie diesen Unterschied bei der Auswahl der Speicheroptionen für Ihre VM.

Im Gegensatz zu früheren VMs der D-/E-Serie enthalten die neuen v6-VMs unformatierte NVMe-Datenträger. Kundinnen und Kunden sollten die Datenträger nach dem Start der VM in ein Dateisystem ihrer Wahl initialisieren und formatieren.

Die VMs der Dl/D/E v6-Serie sind für die Verwendung des lokalen temporären NVMe-Datenträgers auf dem Knoten optimiert, der direkt an die VM angefügt ist, anstatt wie zuvor lokale SCSI-Datenträger zu verwenden. Diese Methode ermöglicht mehr Ein- und Ausgabevorgänge pro Sekunde und einen höheren Durchsatz für Ihre Workloads.

Auf welche Änderungen sollte ich mich einstellen, wenn ich meine VMs mit temporären NVMe-Datenträgern konfiguriere?

  • Die Datenträger sollten nach dem Start der VM initialisiert und formatiert werden. Nach benutzerinitiierten Stopps, Deallokationen oder geplanten Wartungsarbeiten und von Azure initiierten automatischen Wiederherstellungsereignissen starten die VMs nur mit leeren temporären NVMe-Festplatten. Die temporären NVMe-Datenträger sind für Anwendungen erst sichtbar, nachdem sie initialisiert und formatiert wurden.

  • Sie können einzelne NVMe-Laufwerke nach dem Start der VM bei Bedarf zu einem einzigen zusammenfassen.

  • Eine Windows-Auslagerungsdatei wird auf den Datenträgern des permanenten Betriebssystems abgelegt (es sei denn, Sie verwenden die Funktion für ephemere Betriebssysteme), aber Sie können sie nach Bedarf auf temporäre NVMe-Datenträger verschieben, nachdem die VM gestartet wurde.

  • Wenn Sie die Funktion des kurzlebigen Betriebssystems verwenden, werden eine oder mehrere NVMe-Datenträger (je nach VM und Imagegröße) in einen langsameren SCSI/VHD-basierten Datenträger umgewandelt, ähnlich wie bei v5 und älteren VMs. Bei den größeren VMs bleiben die übrigen Datenträger als leere, unformatierte NVMe-Laufwerke erhalten.

  • Die Liste der Ressourcen-SKUs in der REST-API zeigt verschiedene Fähigkeiten von VMs auf. Die nächste Iteration der VM-Größen verwendet das schnellere und effizientere NVMe-Protokoll für den lokalen Speicher anstelle des SCSI-Protokolls, das frühere VM-Größen verwenden.

    Für Azure-VMs ist der SCSI-basierte lokale Speicher ein temporärer Ressourcendatenträger, und der MaxResourceVolumeMB-Wert gibt die Größe dieses Datenträgers an. Im Gegensatz dazu gibt der NVMeDiskSizeInMiB-Wert die Größe des NVMe-basierten lokalen Speichers an.

Wie kann ich meine temporären NVMe-Datenträger verschlüsseln?

Temporäre NVMe-Datenträger unterstützen die Funktion der Datenverschlüsselung im Ruhezustand. Für jeden temporären NVMe-Datenträger, der der VM zugewiesen ist, werden dessen Daten durch einen eindeutigen Datenverschlüsselungsschlüssel (Data Encryption Key, DEK) verschlüsselt. Ein Schlüsselverschlüsselungsschlüssel (Key Encryption Key, KEK) schützt die DEK. Wenn Sie eine VM löschen, werden die Daten auf dem temporären NVMe-Datenträger kryptografisch gelöscht. Alle v6-VMs, die ab 2024 eingeführt werden, verfügen standardmäßig über hardwarebasierte Verschlüsselung mit einem Platform Managed Key über ihre lokalen NVMe-Laufwerke.

Wie kann ich die Größe einer v5- oder älteren VM mit einem temporären Datenträger in v6 ändern?

Wie kann ich meinen temporären NVMe-Datenträger identifizieren?

Sie können den folgenden Befehl unter Windows ausführen:

Get-PhysicalDisk | where { $_.FriendlyName.contains("NVMe Direct Disk")}

Sie können den folgenden Befehl unter Linux ausführen:

sudo nvme id-ns /dev/nvme0n1 -b | dd bs=1 skip=384 status=none | sed 's/\x00*$//'

Wie kann ich temporäre NVMe-Datenträger in Windows formatieren und initialisieren, wenn ich eine VM erstelle?

Sie können hierzu die GUI oder Azure PowerShell verwenden.

GUI

Tipp

Das folgende GUI-Beispiel dient zur Veranschaulichung. Sie sollten Skripts zum Automatisieren dieses Workflows für Produktionsbereitstellungen zu erstellen.

  1. Wählen Sie die Windows-Logo-Taste+R, um das Dialogfeld Ausführen zu öffnen. Geben Sie diskmgmt.msc ein, und drücken Sie die Eingabetaste.

    Screenshot der Eingabe eines Befehls zur Datenträgerverwaltung im Dialogfeld „Ausführen“.

  2. Wählen Sie einen Partitionsstil (MBR oder GPT) und die zu initialisierenden Datenträger aus, und wählen Sie dann OK aus.

    Screenshot des Dialogfelds zum Initialisieren eines Datenträgers für die Datenträgerverwaltung.

  3. Klicken Sie mit der rechten Maustaste auf den Datenträger, der partitioniert werden soll, und wählen Sie dann Neues einfaches Volume aus.

    Screenshot des Menüs zum Auswählen eines neuen Volumetypen.

  4. Folgen Sie dem Assistenten für neue einfache Volumes, um Elemente wie Volumegröße, Laufwerkbuchstabe, Dateisystem und Volumebezeichnung anzugeben. Wählen Sie die Schaltfläche Weiter aus, um den Assistenten zu durchlaufen.

    Screenshot der Angabe der Volumegröße im Assistenten für neue einfache Volumes

    Screenshot der Angabe des Laufwerkbuchstabens im Assistenten für neue einfache Volumes

    Screenshot der Angabe der Partitionsformatierung im Assistenten für neue einfache Volumes.

  5. Überprüfen Sie Ihre Einstellungen, und wählen Sie dann Fertig stellen aus, um die Partition und die Formatierung fertigzustellen.

    Screenshot des Assistenten zum Abschließen des Assistenten für neue einfache Volumes

  6. Stellen Sie sicher, dass die formatierten und initialisierten NVMe-Datenträger in der Windows-Datenträgerverwaltung angezeigt werden, ähnlich wie Neues Volume (E:) in diesem Beispiel angezeigt wird.

    Screenshot des Datenträgerverwaltungstools mit einem neuen Volume.

Azure PowerShell-Skript

Tipp

Das folgende Skript initialisiert, formatiert und weist Laufwerkbuchstaben zu. Es löscht jedoch alle Daten auf dem Datenträger. Sie sollten es gründlich auf Ihren VMs testen, bevor Sie es in der Produktion bereitstellen.

# 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

Wie kann ich temporäre NVMe-Datenträger unter Linux formatieren und initialisieren?

Das folgende Skript enthält ein Beispiel für die Initialisierung temporärer NVMe-Datenträger unter Linux. Das Skript listet alle temporären NVMe-Datenträger auf der VM auf, kombiniert die Datenträger zu einem einzigen RAID 0-Array und erstellt eine formatierte Partition des angegebenen Dateisystems.

Temporäre NVMe-Datenträger werden durch die Modellnummer unterschieden, die als Microsoft NVMe Direct Disk für das Gastbetriebssystem angezeigt wird. Dieses Skript verwendet den Befehl nvme-cli id-ctrl, um die Modellnummer jedes NVMe-Geräts abzufragen.

Das Skript sucht zunächst nach bereits erstellten temporären NVMe-Datenträgervolumes (identifiziert durch die Bezeichnung filesystem). Wenn ein Array vorhanden zu sein scheint, überprüft das Skript die Integrität des Arrays und wiederholt den Initialisierungsprozess bei Bedarf. Das Array wird in den folgenden Fällen neu initialisiert:

  • Mindestens ein temporärer Arraydatenträger fehlt.
  • Es gibt temporäre Datenträger, die noch nicht in das Array integriert sind.
  • Das Datenträgerarray befindet sich in einem anderen ungültigen oder unbekannten Zustand.
  • Zugeordnete Konfigurationsdateien fehlen oder sind ungültig.
#!/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

Wie kann ich die Windows-Auslagerungsdatei von einem Betriebssystemdatenträger auf einen temporären NVMe-Datenträger verschieben?

Sie können hierzu die GUI oder Azure PowerShell verwenden.

GUI

Tipp

Das folgende GUI-Beispiel dient zur Veranschaulichung. Sie sollten Skripts zum Automatisieren dieses Workflows für Produktionsbereitstellungen zu erstellen.

  1. Wählen Sie die Windows-Logo-Taste+R, um das Dialogfeld Ausführen zu öffnen. Geben Sie sysdm.cpl ein, und drücken Sie die Eingabetaste.

    Screenshot des Dialogfelds „Ausführen“, in dem „sysdm.cpl“ geöffnet wird.

  2. Wählen Sie die Registerkarte Erweitert und dann im Abschnitt Leistung Einstellungen aus.

    Screenshot der Schaltfläche für Leistungseinstellungen auf der Registerkarte Erweitert der Systemeigenschaften.

  3. Wählen Sie im Dialogfeld Leistungsoptionen die Registerkarte Erweitert aus und wählen Sie dann die Schaltfläche Ändern im Bereich Virtueller Arbeitsspeicher aus.

    Screenshot der Registerkarte „Erweitert“ der Leistungsoptionen.

  4. Deaktivieren Sie das Kontrollkästchen Auslagerungsdateigröße für alle Laufwerke automatisch verwalten. Wenn eine Auslagerungsdatei auf Ihren Betriebssystemdatenträger festgelegt ist, wählen Sie Ihren Betriebssystemdatenträger aus, wählen Sie die Option Keine Auslagerungsdatei aus, und wählen Sie dann die Schaltfläche Festlegen aus. Wählen Sie Ihr lokales temporäres NVMe-Laufwerk aus, und klicken Sie auf das Optionsfeld Größe wird vom System verwaltet und dann auf Festlegen. Klicken Sie zum Schließen sämtlicher Dialogfelder auf OK.

    Screenshot des Dialogfelds für virtuellen Arbeitsspeicher.

Sie müssen Ihre VM möglicherweise neu starten, damit diese Änderungen wirksam werden.

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

Sie müssen Ihre VM möglicherweise neu starten, damit diese Änderungen wirksam werden.

Wie kann ich die Linux-Auslagerungsdatei von einem Betriebssystemdatenträger auf einen temporären NVMe-Datenträger verschieben?

  1. Auswahl des NVMe-Datenträgers, der für den Auslagerungsbereich verwendet wird:

    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. Erstellen des Auslagerungsbereichs auf dem Datenträger:

    root@D2adsv6:/ # mkswap /dev/nvme0n1
    Setting up swapspace version 1, size = 75 GiB (80530632704 bytes)
    no label, UUID=064bdcfb-86ae-49f3-bf9d-b956493e2a1d
    
  3. Aktivieren des Auslagerungsbereichs:

    root@D2adsv6:/ # swapon /dev/nvme0n1
    
  4. Überprüfen, ob der Auslagerungsbereich ordnungsgemäß eingerichtet wurde:

    root@D2adsv6:/ # swapon -s
    Filename                                Type            Size    Used    Priority
    /dev/nvme0n1                            partition       78643196        0       -2
    
  5. Anfügen des Auslagerungsbereichs an /etc/fstab, damit er auch bei Neustarts persistent ist:

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

Was muss ich bei Wartungsereignissen, erneuten VM-Bereitstellungen und VM-Neustarts beachten?

Temporäre NVMe-Datenträger, die an V6-VMs angefügt sind, sind kurzlebig, ähnlich wie temporäre Laufwerke in anderen VM-Serien. Das bedeutet, dass nach erneuten Bereitstellen oder während eines Wartungsereignisses alle Daten auf der VM verloren gehen. Weitere Informationen zu Wartungsereignissen und Ausfallzeiten finden Sie unter Grundlegendes zu VM-Neustarts – Wartung vs. Downtime.

Wenn die VM auf neue Hardware verschoben wurde, werden diese Laufwerke nicht bereitgestellt, und neue nicht bereitgestellte Datenträger werden dem Betriebssystem angezeigt, wenn er wieder bereitgestellt wird. Wenn die Hardware der VM nicht geändert wurde, sind die temporären NVMe-Datenträger möglicherweise noch vorhanden. Die obigen Skripts für das Einbinden der Laufwerke suchen nach nicht eingebundenen Laufwerken, bevor die Einbindung versucht wird.

Es empfiehlt sich, das Einbindungsskript bei jedem Start der VM automatisch auszuführen und alle anderen Startup-Skripts zu verzögern, die die Laufwerke benötigen, bis das Einbindungsskript nicht mehr ausgeführt wird.