الأسئلة المتداولة لأقراص NVMe البعيدة

تتناول هذه المقالة بعض الأسئلة الشائعة حول دعم أقراص NVM Express (NVMe) البعيدة على الأجهزة الظاهرية (VMs) التي تم إنشاؤها في Azure.

ما المتطلبات الأساسية لتمكين واجهة NVMe البعيدة على الجهاز الظاهري الخاص بي؟

يمكنك استخدام DiskControllerType أثناء تكوين الجهاز الظاهري لتحديد نوع وحدة التحكم المفضلة لديك ك NVMe أو واجهة نظام كمبيوتر صغيرة (SCSI). إذا لم تحدد DiskControllerType قيمة، يختار النظام الأساسي تلقائيا وحدة التحكم الافتراضية استنادا إلى تكوين حجم الجهاز الظاهري. إذا تم تكوين حجم الجهاز الظاهري ل SCSI كافتراضي ويدعم NVMe، فإن الجهاز الظاهري يستخدم SCSI ما لم تقم بتحديث DiskControllerType القيمة إلى NVMe.

لتمكين واجهة NVMe على الجهاز الظاهري الخاص بك، يجب أن تفي بالمتطلبات الأساسية التالية:

  • اختر عائلة جهاز ظاهري تدعم NVMe. أحجام الأجهزة الظاهرية Ebsv5 وEbdsv5 فقط مجهزة ب NVMe في الأجهزة الظاهرية من الجيل Intel v5.

  • حدد صورة نظام التشغيل التي تم وضع علامة عليها بدعم NVMe. بعد تحديد عائلة الجهاز الظاهري المدعومة وقيمة صورة نظام التشغيل، تتم مطالبتك بتحديد نوع وحدة تحكم القرص NVMe.

    لقطة شاشة لمطالبة بتحديد نوع وحدة تحكم القرص.

  • اشترك في NVMe عن طريق تحديد نوع وحدة تحكم قرص NVMe في مدخل Microsoft Azure أو في قالب Azure Resource Manager أو Azure CLI أو Azure PowerShell. للحصول على إرشادات خطوة بخطوة، راجع الأسئلة المتداولة حول NVMe العامة.

  • تأكد من أنك تستخدم جهاز ظاهري من الجيل 2، لأن NVMe يدعم صور الجيل 2 فقط.

  • اختر إحدى مناطق Azure حيث يتم تمكين NVMe.

هل يمكنني تشفير أقراص NVMe البعيدة؟

لا توجد طريقة أصلية داخل Azure لتشفير هذه الأقراص. يمكنك تشفيرها داخل نظام التشغيل، ولكن ستحتاج إلى إعادة تشفيرها بعد التثبيت عند بدء التشغيل.

كيف يمكنني تغيير حجم جهاز ظاهري يستند إلى SCSI إلى جهاز ظاهري بعيد يدعم NVMe بحجم مختلف؟

يمكنك استخدام العملية التالية إما:

  • تغيير حجم جهاز ظاهري يستند إلى SCSI تم إنشاؤه باستخدام صورة غير معلمة إلى جهاز ظاهري يدعم NVMe بحجم مختلف دون إعادة إنشاء تكوينات الجهاز الظاهري ودون وضع علامات على الصورة.
  • تغيير حجم جهاز ظاهري يستند إلى SCSI إلى جهاز ظاهري ممكن ل NVMe بحجم مختلف دون إعادة إنشاء تكوينات الجهاز الظاهري.

يمكن أن يكون الجهاز الظاهري المصدر إما:

  • صورة نظام تشغيل بدون علامة تدعم NVMe.
  • صورة نظام تشغيل ذات علامة NVMe.

لتغيير حجم الجهاز الظاهري، استخدم الأمر التالي لتشغيل برنامج نصي Azure PowerShell الذي يعين القيمة الوجهة discontrollertype للجهاز الظاهري ك NVMe:

azure-nvme-VM-update.ps1 [-subscription_id] <String> [-resource_group_name] <String> [-vm_name] <String> [[-disk_controller_change_to] <String>] [-vm_size_change_to] <String> [[-start_vm_after_update] <Boolean>] [[-write_logfile] <Boolean>]

كيف يمكنني التحقق مما إذا تم وضع علامة على صورة على أنها NVMe؟

للتحقق مما إذا تم وضع علامة على صورة على أنها NVMe، استخدم الأمر التالي:

az vm image show --urn URN_OF_IMAGE

كيف أعمل وضع علامة على صورة تدعم NVMe للأقراص البعيدة؟

لوضع علامة على صورة تدعم NVMe، اتبع الخطوات التالية:

  1. قم بتحميل قرص ثابت ظاهري مدعوم من NVMe (VHD) إلى حساب التخزين الخاص بك. AzCopy هو طريقة سريعة، ولكن يمكنك أيضا استخدام المدخل للتحميل.

    azcopy copy <local path to your VHD> <container in your storage account>
    
  2. إنشاء معرض صور باستخدام Azure PowerShell أو المدخل أو Azure CLI.

  3. إنشاء تعريف صورة. تأكد من تضمين --feature DiskControllerTypes=SCSI,NVMe.

    فيما يلي مثال على Azure CLI:

    az sig image-definition create --resource-group <resourceGroupName> --gallery-name <galleryName> --gallery-image-definition <imageName> --publisher <publisher> --offer <offerName> --sku <skuName> --os-type <osType> --os-state <osState> --feature DiskControllerTypes=SCSI,NVMe
    
  4. أنشئ إصدار الصورة ضمن المعرض الذي يحمل علامة NVMe باستخدام VHD المدعوم من NVMe.

    فيما يلي مثال على Azure CLI:

    az sig image-version create --resource-group <resourceGroupName> --gallery-name <galleryName> --gallery-image-definition <imageName> --gallery-image-version <version> --target-regions <region1> <region2> --replica-count <replicaCount> --os-vhd-uri <NVMe-supported vhd uri> --os-vhd-storage-account <storageAccount>
    

كيف أعمل تكوين قالب ARM لإنشاء الجهاز الظاهري؟

يمكنك استخدام ملحق البرنامج النصي المخصص Azure بالاقتران مع قوالب Azure Resource Manager (قوالب ARM). يسمح لك هذا الحل بتنزيل البرامج النصية وتشغيلها على أجهزة Azure الظاهرية وهو متوافق مع كل من Windows وLinux. للحصول على إرشادات مفصلة، راجع وثائق ملحق البرنامج النصي المخصص Azure لنظامي التشغيل Windows وLinux.

ماذا يحدث إذا كنت أريد استخدام عائلة جهاز ظاهري أخرى لا تدعم أقراص NVMe البعيدة؟

إذا حددت عائلة جهاز ظاهري غير معتمدة، فستتلقى رسالة الخطأ هذه: "لا يمكن تشغيل حجم الجهاز الظاهري المحدد باستخدام DiskControllerType. تحقق من أن نوع وحدة تحكم القرص المتوفرة هو أحد أنواع وحدة تحكم القرص المدعومة لحجم الجهاز الظاهري."

تأكد من تحديد عائلة جهاز ظاهري تدعم واجهة NVMe. لتحديد أنواع وحدات تحكم القرص المدعومة لحجم الجهاز الظاهري، راجع قائمة وحدات SKU للمورد في واجهة برمجة تطبيقات REST.

ما هي خيارات تخزين قرص Azure المتوافقة مع أقراص NVMe البعيدة؟

يمكن دمج أحجام NVMe مع Azure Premium SSD v1 و Premium SSD v2 و Ultra Disk Storage. لمزيد من المعلومات حول عروض قرص Azure، راجع أنواع الأقراص المدارة من Azure.

هل يدعم Azure تغيير الحجم المباشر على الأقراص ذات أحجام الأجهزة الظاهرية NVMe؟

يتم دعم تغيير الحجم المباشر ل NVMe على أقراص Azure Premium SSD v1 وأقراص SSD القياسية وأقراص HDD القياسية. يمكنك أيضا إضافة أقراص NVMe دون إعادة تشغيل الجهاز الظاهري.

كيف يمكنني تحديد أقراص NVMe البعيدة على جهاز Linux الظاهري؟

  1. الحصول على الحزمة nvme-cli :

    sudo apt install nvme-cli
    
  2. قم بتشغيل الأمر NVMe list لإحضار تفاصيل قرص NVMe:

    sudo nvme list
    

    لقطة شاشة لإرشادات تحديد أقراص NVMe على جهاز ظاهري يعمل بنظام Linux.

    لقطة شاشة لإرشادات اختيار معرف مساحة الاسم في مدخل Linux.

    فيما يلي كيفية ظهور البيانات استجابة لأوامر Azure PowerShell:

    لقطة شاشة لمثال استجابة لأمر Azure PowerShell.

كيف يمكنني تحديد أقراص NVMe على جهاز ظاهري يعمل بنظام Windows؟

افتح Azure PowerShell واستخدم الأمر التالي:

wmic diskdrive get model,scsilogicalunit

لقطة شاشة لأمر PowerShell مثال لاستخدام NVMe على Windows.

يتم تقديم الأقراص المرفقة في ASAP في الضيف مع سلسلة Virtual_Disk NVME Premiumالنموذج . تحتوي الوحدة المنطقية SCSI على قيمة معرف LUN المرئي للمدخل الذي زاد بمقدار 1.

فيما يلي لقطة لكيفية ظهور أقراص NVMe في Windows VM الممكن ل NVMe:

لقطة شاشة تعرض مثالا لأمر Azure PowerShell لتحديد قرص NVMe على جهاز ظاهري يعمل بنظام Windows.

تظهر اللقطة التالية إخراج الضيف لأقراص البيانات المرفقة في LUN 0 وLUN 4 (CRP). معرف LUN يعادل معرف مساحة الاسم.

لقطة شاشة تعرض مثالا على كيفية ظهور أقراص NVMe في Windows VM ممكن ل NVMe.

هل يمكنني تحويل جهاز ظاهري يستند إلى SCSI إلى جهاز ظاهري ممكن بواسطة NVMe مع الاحتفاظ بنفس حجم وحدة المعالجة المركزية الظاهرية للجهاز الظاهري باستخدام صورة نظام تشغيل ذات علامة NVMe؟

يتم دعم هذا السيناريو فقط على أنظمة تشغيل Linux ولا يتم دعمه على أنظمة تشغيل Windows.

هل الأقراص المشتركة في الأقراص البعيدة مدعومة مع الأجهزة الظاهرية التي تدعم NVMe؟

يتم دعم ميزة القرص المشترك لأقراص Premium SSD وPremium SSD v2 و Ultra Disk Storage.

هل يمكنني استخدام Azure PowerShell أو Azure CLI لإنشاء جهاز ظاهري باستخدام قرص نظام التشغيل من كائن ثنائي كبير الحجم موجود مع تمكين NVMe؟

هذا غير ممكن حاليا. بدلا من ذلك، يمكنك استخدام الحل البديل REST API التالي لإنشاء جهاز ظاهري مع قرص نظام التشغيل من كائن ثنائي كبير الحجم موجود مع تمكين NVMe:

$subscriptionID = '<Your Subscription ID>'
$resourceGroupName = '<Your Resource Group Name>'
$storageAccountName = '<Your Account Name>'
$storageAccountContainer = '<Your Account Container>'
$blobName = 'blob-nvme_OsDisk_1.vhd'

$diskName = 'test'
$diskSkuName = 'Standard_LRS'
$diskSizeGB = 30
$osType = 'Linux' 
$hyperVGeneration = 'V2'
$location = 'eastus'

$azContext = Get-AzContext
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
$token = ($profileClient.AcquireAccessToken($azContext.Subscription.TenantId)).AccessToken

$body = @{
    location = $location
    sku = @{ name = $diskSkuName }
    properties = @{
        osType                  = $osType
        hyperVGeneration        = $hyperVGeneration
        supportedCapabilities   = @{diskControllerTypes = 'SCSI, NVMe'}
        diskSizeGB              = $diskSizeGB
        creationData = @{
            storageAccountId	= "/subscriptions/$subscriptionID/resourceGroups/$resourceGroupName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"

            sourceUri           = "https://$storageAccountName.blob.core.windows.net/$storageAccountContainer/$blobName"
            createOption		= 'Import'
        }
    }
}

$apiVersion='2023-10-02'
$restUri = "https://management.azure.com/subscriptions/$subscriptionID/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/disks/$diskName`?api-version=$apiVersion"
$authHeader = @{
    'Content-Type'='application/json'
    'Authorization'='Bearer ' + $token
}

Invoke-RestMethod `
    -Uri $restUri `
    -Method 'Put' `
    -Headers $authHeader `
    -Body ($body | ConvertTo-Json)