البحث عن أقراص Azure المدارة وغير المدارة وحذفها باستخدام Azure PowerShell

ينطبق على: ✔️ أجهزة ظاهرية بنظام التشغيل Linux ✔️ أجهزة ظاهرية بنظام التشغيل Windows ✔️ مجموعات التوسعة المرنة ✔️ مجموعات التوسعة الموحدة

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

إشعار

يمكنك استخدام الأمر Get-AzureDisk للحصول على LastOwnershipUpdateTime لأي قرص. تمثل هذه الخاصية آخر تحديث لحالة القرص. بالنسبة إلى قرص غير مرفق، يظهر هذا الوقت الذي لم يتم فيه توصيل القرص. هذه الخاصية فارغة للأقراص التي تم إنشاؤها حديثا، حتى تتغير حالتها.

الأقراص المدارة: البحث عن الأقراص غير المرفقة وحذفها

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

هام

أولاً، قم بتشغيل البرنامج النصي عن طريق تعيين المتغير deleteUnattachedDisks إلى 0. يتيح لك هذا الإجراء العثور على كافة الأقراص المُدارة غير المرفقة وعرضها.

بعد مراجعة كافة الأقراص غير المرفقة، قم بتشغيل البرنامج النصي مرة أخرى وقم بتعيين المتغير deleteUnattachedDisks إلى 1. يتيح لك هذا الإجراء حذف كافة الأقراص المُدارة غير المرفقة.

# Set deleteUnattachedDisks=1 if you want to delete unattached Managed Disks
# Set deleteUnattachedDisks=0 if you want to see the Id of the unattached Managed Disks
$deleteUnattachedDisks=0
$managedDisks = Get-AzDisk
foreach ($md in $managedDisks) {
    # ManagedBy property stores the Id of the VM to which Managed Disk is attached to
    # If ManagedBy property is $null then it means that the Managed Disk is not attached to a VM
    if($md.ManagedBy -eq $null){
        if($deleteUnattachedDisks -eq 1){
            Write-Host "Deleting unattached Managed Disk with Id: $($md.Id)"
            $md | Remove-AzDisk -Force
            Write-Host "Deleted unattached Managed Disk with Id: $($md.Id) "
        }else{
            $md.Id
        }
    }
 }

الأقراص غير المدارة: البحث عن الأقراص غير المرفقة وحذفها

الأقراص غير المُدارة هي ملفات VHD التي يتم تخزينها كـ كائنات ثنائية كبيرة الحجم للصفحات في حسابات تخزين Azure. يبحث البرنامج النصي التالي عن الأقراص غير المُدارة غير المرفقة (كائنات ثنائية كبيرة الحجم للصفحات) من خلال فحص قيمة الخاصية LeaseStatus. عند إرفاق قرص غير مدار بجهاز ظاهري، يتم تعيين الخاصية LeaseStatus إلى "Locked". عند عدم إرفاق قرص غير مدار، يتم تعيين الخاصية LeaseStatus إلى "Unlocked". يقوم البرنامج النصي بفحص كافة الأقراص غير المُدارة في كافة حسابات تخزين Azure في اشتراك Azure. عندما يحدد البرنامج النصي موقع قرص غير مدار مع خاصية LeaseStatus تم تعيينها إلى "Unlocked"، يحدد البرنامج النصي أن القرص غير مرفق.

هام

أولاً، قم بتشغيل البرنامج النصي عن طريق تعيين المتغير deleteUnattachedVHDs إلى $false. يتيح لك هذا الإجراء العثور على كافة VHDs غير المُدارة وغير المرفقة وعرضها.

بعد مراجعة كافة الأقراص غير المرفقة، قم بتشغيل البرنامج النصي مرة أخرى وقم بتعيين المتغير deleteUnattachedVHDs إلى $true. يتيح لك هذا الإجراء حذف جميع VHDs غير المدارة وغير المرفقة.

# Set deleteUnattachedVHDs=$true if you want to delete unattached VHDs
# Set deleteUnattachedVHDs=$false if you want to see the Uri of the unattached VHDs
$deleteUnattachedVHDs=$false
$storageAccounts = Get-AzStorageAccount
foreach($storageAccount in $storageAccounts){
    $storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageAccount.ResourceGroupName -Name $storageAccount.StorageAccountName)[0].Value
    $context = New-AzStorageContext -StorageAccountName $storageAccount.StorageAccountName -StorageAccountKey $storageKey
    $containers = Get-AzStorageContainer -Context $context
    foreach($container in $containers){
        $blobs = Get-AzStorageBlob -Container $container.Name -Context $context
        #Fetch all the Page blobs with extension .vhd as only Page blobs can be attached as disk to Azure VMs
        $blobs | Where-Object {$_.BlobType -eq 'PageBlob' -and $_.Name.EndsWith('.vhd')} | ForEach-Object { 
            #If a Page blob is not attached as disk then LeaseStatus will be unlocked
            if($_.ICloudBlob.Properties.LeaseStatus -eq 'Unlocked'){
                    if($deleteUnattachedVHDs){
                        Write-Host "Deleting unattached VHD with Uri: $($_.ICloudBlob.Uri.AbsoluteUri)"
                        $_ | Remove-AzStorageBlob -Force
                        Write-Host "Deleted unattached VHD with Uri: $($_.ICloudBlob.Uri.AbsoluteUri)"
                    }
                    else{
                        $_.ICloudBlob.Uri.AbsoluteUri
                    }
            }
        }
    }
}

الخطوات التالية

لمزيد من المعلومات، راجع حذف حساب تخزين وتحديد الأقراص المعزولة باستخدام PowerShell