إدارة كتل الكائنات الثنائية كبيرة الحجم باستخدام PowerShell

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

المتطلبات الأساسية

تكوين كائن سياق لتغليف بيانات الاعتماد

يجب أن يكون كل طلب لـAzure Storage معتمدا. يمكنك تخويل طلب تم إجراؤه من PowerShell باستخدام حساب Microsoft Entra الخاص بك أو باستخدام مفاتيح الوصول إلى الحساب. تستخدم الأمثلة في هذه المقالة تخويل Microsoft Entra مع كائنات السياق. تغلف كائنات السياق بيانات اعتماد Microsoft Entra وتمريرها أثناء عمليات البيانات اللاحقة.

لتسجيل الدخول إلى حساب Azure الخاص بك باستخدام حساب Microsoft Entra، افتح PowerShell واستدع الاتصال-AzAccount cmdlet.

#Connect to your Azure subscription
Connect-AzAccount

بعد تأسيس الاتصال، أنشئ سياق Azure. تنشئ المصادقة باستخدام معرف Microsoft Entra تلقائيا سياق Azure لاشتراكك الافتراضي. في بعض الحالات، قد تحتاج إلى الوصول إلى الموارد في اشتراك مختلف بعد المصادقة. يمكنك تغيير الاشتراك المقترن بجلسة Azure الحالية عن طريق تعديل سياق الجلسة النشطة.

لاستخدام الاشتراك الافتراضي، قم بإنشاء السياق عن طريق استدعاء New-AzStorageContext cmdlet. قم بتضمين المعلمة -UseConnectedAccount بحيث يتم تنفيذ عمليات البيانات باستخدام بيانات اعتماد Microsoft Entra.

#Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount

لتغيير الاشتراكات، استرد كائن السياق باستخدام cmdlet Get-AzSubscription ثم قم بتغيير السياق الحالي باستخدام Set-AzContext. لمزيد من المعلومات، راجع تغيير الاشتراك النشط.

إنشاء حاوية

يتم تخزين جميع بيانات الكائن الثنائي كبير الحجم داخل حاويات، لذلك تحتاج إلى مورد حاوية واحد على الأقل قبل أن تتمكن من تحميل البيانات. إذا لزم الأمر، استخدم المثال التالي لإنشاء حاوية تخزين. لمزيد من المعلومات، راجع إدارة حاويات الكائنات الثنائية كبيرة الحجم باستخدام PowerShell.

#Create a container object
$container = New-AzStorageContainer -Name "mycontainer" -Context $ctx

عند استخدام الأمثلة التالية، تحتاج إلى استبدال قيم العنصر النائب بين قوسين بقيمك الخاصة. لمزيد من المعلومات حول تسجيل الدخول في Azure باستخدام PowerShell، راجع تسجيل الدخول باستخدام Azure PowerShell.

تحميل الكائن الثنائي كبير الحجم

لتحميل ملف إلى كتل الكائنات الثنائية كبيرة الحجم، مرر قيم المعلمة المطلوبة إلى Set-AzStorageBlobContent cmdlet. توفير اسم الملف والمسار باستخدام المعلمة -File واسم الحاوية باستخدام المعلمة -Container. تحتاج أيضا إلى توفير مرجع إلى عنصر السياق مع المعلمة -Context .

ينشئ هذا الأمر كائن ثنائي كبير الحجم إذا لم يكن موجودًا، أو يطالبك بالكتابة على التأكيد إذا كان موجودًا. يمكنك الكتابة على الملف دون تأكيد إذا قمت بتمرير المعلمة -Force إلى cmdlet.

يحدد المثال التالي قيمة معلمة -File لتحميل ملف واحد مسمى. كما يوضح استخدام عامل تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية في PowerShell وcmdlet Get-ChildItem لتحميل ملفات متعددة. يستخدم cmdlet Get-ChildItem المعلمة -Path لتحديد C:\Temp\*.png. يحدد تضمين حرف بدل علامة النجمة (*) كافة الملفات مع ملحق اسم ملف .png. تبحث المعلمة -Recurse عن الدليل المؤقت والدلائل الفرعية الخاصة به.

#Set variables
$path          = "C:\temp\" 
$containerName = "mycontainer"
$filename      = "demo-file.txt"
$imageFiles    = $path + "*.png"
$file          = $path + $filename

#Upload a single named file
Set-AzStorageBlobContent -File $file -Container $containerName -Context $ctx

#Upload multiple image files recursively
 Get-ChildItem -Path $imageFiles -Recurse | Set-AzStorageBlobContent -Container $containerName -Context $ctx

تعرض النتيجة اسم حساب التخزين، اسم حاوية التخزين، وتوفر قائمة الملفات التي تم تحميلها.

   AccountName: demostorageaccount, ContainerName: demo-container

Name              BlobType   Length  ContentType                LastModified          AccessTier  IsDeleted
----              --------   ------  -----------                ------------          ----------  ---------
demo-file.txt     BlockBlob  222     application/octet-stream   2021-12-14 01:38:03Z  Cool        False     
hello-world.png   BlockBlob  14709   application/octet-stream   2021-12-14 01:38:03Z  Cool        False
hello-world2.png  BlockBlob  12472   application/octet-stream   2021-12-14 01:38:03Z  Cool        False
hello-world3.png  BlockBlob  13537   application/octet-stream   2021-12-14 01:38:03Z  Cool        False

سرد الكيانات الثنائية كبيرة الحجم

يتم استخدام cmdlet Get-AzStorageBlob لسرد الكائنات الثنائية كبيرة الحجم المخزنة داخل حاوية. يمكنك استخدام أساليب مختلفة لتحديد نطاق البحث. استخدم المعلمة -Container و-Name لسرد كائن ثنائي كبير الحجم معين داخل حاوية معروفة. لإنشاء قائمة غير المصفاة من كافة الكائنات الثنائية كبيرة الحجم داخل حاوية معينة، استخدم المعلمة -Container وحدها، بدون قيمة -Name.

لا يوجد أي قيود على عدد الحاويات أو الكائنات الثنائية كبيرة الحجم التي قد تكون لدى حساب التخزين. لتجنب استرداد الآلاف من الكائنات الثنائية كبيرة الحجم، من المستحسن الحد من كمية البيانات التي يتم إرجاعها. عند استرداد الكائنات الثنائية كبيرة الحجم المتعددة، يمكنك استخدام المعلمة -Prefix لتحديد الكائنات الثنائية كبيرة الحجم التي تبدأ أسماؤها بسلسلة معينة. يمكنك أيضا استخدام المعلمة -Name مع حرف بدل لتحديد أسماء الملفات أو أنواعها.

يمكن استخدام المعلمة -MaxCount لتحديد عدد الكائنات الثنائية كبيرة الحجم غير المصفاة التي تم إرجاعها من حاوية. يتم فرض حد خدمة 5,000 على كافة موارد Azure. يضمن هذا الحد استرداد كميات البيانات القابلة للإدارة ولا يتأثر الأداء. إذا كان عدد الحاويات التي تم إرجاعها يتجاوز القيمة -MaxCount أو حد الخدمة، فسيتم إرجاع رمز مميز للمتابعة. يسمح لك هذا الرمز المميز باستخدام طلبات متعددة لاسترداد أي عدد من الكائنات الثنائية كبير الحجم. يتوفر مزيد من المعلومات حول تعداد موارد كائن ثنائي كبير الحجم.

يوضح المثال التالي عدة نُهج تستخدم لتوفير قائمة الكائنات الثنائية كبيرة الحجم. يسرد النهج الأول كائن ثنائي كبير الحجم واحد ضمن مورد حاوية معينة. يستخدم النهج الثاني حرف بدل لسرد جميع .jpg الملفات مع بادئة لويس. يقتصر البحث على خمس حاويات باستخدام المعلمة -MaxCount. يستخدم النهج الثالث المعلمات -MaxCount و-ContinuationToken للحد من استرداد كافة الكائنات الثنائية كبيرة الحجم داخل حاوية.

#Set variables
$namedContainer  = "named-container"
$demoContainer   = "mycontainer"
$containerPrefix = "demo"

$maxCount = 1000
$total     = 0
$token     = $Null

#Approach 1: List all blobs in a named container
Get-AzStorageBlob -Container $namedContainer -Context $ctx

#Approach 2: Use a wildcard to list blobs in all containers
Get-AzStorageContainer -MaxCount 5 -Context $ctx | Get-AzStorageBlob -Blob "*louis*.jpg" 

#Approach 3: List batches of blobs using MaxCount and ContinuationToken parameters
Do
{
     #Retrieve blobs using the MaxCount parameter
     $blobs = Get-AzStorageBlob -Container $demoContainer `
         -MaxCount $maxCount `
         -ContinuationToken $token `
         -Context $ctx
     $blobCount = 1
     
     #Loop through the batch
     Foreach ($blob in $blobs)
     {
         #To-do: Perform some work on individual blobs here

         #Display progress bar
         $percent = $($blobCount/$maxCount*100)
         Write-Progress -Activity "Processing blobs" -Status "$percent% Complete" -PercentComplete $percent
         $blobCount++
     }

     #Update $total
     $total += $blobs.Count
      
     #Exit if all blobs processed
     If($blobs.Length -le 0) { Break; }
      
     #Set continuation token to retrieve the next batch
     $token = $blobs[$blobs.Count -1].ContinuationToken
 }
 While ($null -ne $token)
 Write-Host "`n`n   AccountName: $($ctx.StorageAccountName), ContainerName: $demoContainer `n"
 Write-Host "Processed $total blobs in $namedContainer."

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

   AccountName: demostorageaccount, ContainerName: named-container

Name                 BlobType    Length    ContentType    LastModified          AccessTier    IsDeleted
----                 --------    ------    -----------    ------------          ----------    ---------
index.txt            BlockBlob   222       text/plain     2021-12-15 22:00:10Z  Cool          False
miles-davis.txt      BlockBlob   23454     text/plain     2021-12-15 22:17:59Z  Cool          False
cab-calloway.txt     BlockBlob   18419     text/plain     2021-12-15 22:17:59Z  Cool          False
benny-goodman.txt    BlockBlob   17726     text/plain     2021-12-15 22:17:59Z  Cool          False


   AccountName: demostorageaccount, ContainerName: demo-container

Name                 BlobType    Length    ContentType    LastModified          AccessTier    IsDeleted
----                 --------    ------    -----------    ------------          ----------    ---------
louis-armstrong.jpg  BlockBlob   211482    image/jpeg     2021-12-14 01:38:03Z  Cool          False
louis-jordan.jpg     BlockBlob   55766     image/jpeg     2021-12-14 01:38:03Z  Cool          False
louis-prima.jpg      BlockBlob   290651    image/jpeg     2021-12-14 01:38:03Z  Cool          False


   AccountName: demostorageaccount, ContainerName: demo-container

Processed 5257 blobs in demo-container.

تنزيل كائن ثنائي كبير الحجم

اعتمادًا على حالة الاستخدام الخاصة بك، يمكن استخدام cmdlet Get-AzStorageBlobContent لتنزيل كائن ثنائي كبير الحجم واحد أو كائنات متعددة. كما هو الحال مع معظم العمليات، يتطلب كلا النهجين كائن سياق.

لتنزيل كائن ثنائي كبير الحجم واحد مسمى، يمكنك استدعاء cmdlet مباشرة وتوفير قيم للمعلمات -Blob و-Container. يتم تنزيل الكائن الثنائي كبير الحجم إلى دليل PowerShell العامل بشكل افتراضي، ولكن يمكن تحديد موقع بديل. لتغيير الموقع الهدف، يجب تمرير مسار صالح موجود مع المعلمة -Destination. نظرا لعدم تمكن العملية من إنشاء وجهة، فإنها تفشل مع وجود خطأ إذا لم يكن المسار المحدد موجودا.

يمكن تنزيل كائنات ثنائية كبيرة الحجم متعددة عن طريق الجمع بين cmdlet Get-AzStorageBlob وعامل تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية في PowerShell. أولًا، أنشئ قائمة كائنات ثنائية كبيرة الحجم مع cmdlet Get-AzStorageBlob. بعد ذلك، استخدم عامل تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية وcmdlet Get-AzStorageBlobContent لاسترداد الكائنات الثنائية كبيرة الحجم من الحاوية.

يوفر نموذج التعليمات البرمجية التالي مثالاً على نهج تنزيل فردية ومتعددة. كما يقدم نهجًا مبسطًا للبحث في جميع الحاويات عن ملفات محددة باستخدام حرف بدل. نظرًا لأن بعض البيئات قد تحتوي على مئات الآلاف من الموارد، فمن المستحسن استخدام المعلمة -MaxCount.

#Set variables
$containerName = "mycontainer"
$path          = "C:\temp\downloads\"
$blobName      = "demo-file.txt"
$fileList      = "*.png"
$pipelineList  = "louis*"
$maxCount      = 10

#Download a single named blob
Get-AzStorageBlobContent -Container $containerName -Blob $blobName -Destination $path -Context $ctx

#Download multiple blobs using the pipeline
Get-AzStorageBlob -Container $containerName -Blob $fileList -Context $ctx | Get-AzStorageBlobContent

#Use wildcard to download blobs from all containers
Get-AzStorageContainer -MaxCount $maxCount `
     -Context $ctx | Get-AzStorageBlob `
     -Blob "louis*" | Get-AzStorageBlobContent

تعرض النتيجة حساب التخزين وأسماء الحاويات وتوفر قائمة من الملفات التي تم تنزيلها.

   AccountName: demostorageaccount, ContainerName: demo-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
demo-file.txt        BlockBlob  222     application/octet-stream 2021-12-14 01:38:03Z  Unknown     False
hello-world.png      BlockBlob  14709   application/octet-stream 2021-12-14 01:38:03Z  Unknown     False
hello-world2.png     BlockBlob  12472   application/octet-stream 2021-12-14 01:38:03Z  Unknown     False
hello-world3.png     BlockBlob  13537   application/octet-stream 2021-12-14 01:38:03Z  Unknown     False

   AccountName: demostorageaccount, ContainerName: public-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
louis-armstrong.jpg  BlockBlob  211482  image/jpeg               2021-12-14 18:56:03Z  Unknown     False

   AccountName: demostorageaccount, ContainerName: read-only-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
louis-jordan.jpg     BlockBlob  55766   image/jpeg               2021-12-14 18:56:21Z  Unknown     False

   AccountName: demostorageaccount, ContainerName: hidden-container

Name                 BlobType   Length  ContentType              LastModified          AccessTier  IsDeleted
----                 --------   ------  -----------              ------------          ----------  ---------
louis-prima.jpg      BlockBlob  290651  image/jpeg               2021-12-14 18:56:45Z  Unknown     False

إدارة خصائص الكائن الثنائي كبير الحجم وبيانات التعريف

تعرض الحاوية كلاً من خصائص النظام وبيانات التعريف المعرفة من قبل المستخدم. توجد خصائص النظام على كل مورد من موارد Blob Storage. بعض الخصائص للقراءة فقط، بينما يمكن قراءة خصائص أخرى أو تعيينها. تحت الأغلفة، تُعيّن بعض خصائص النظام إلى عناوين HTTP قياسية معينة.

تتكون بيانات التعريف المعرفة من قبل المستخدم من زوج واحد أو أكثر من أزواج اسم-قيمة التي تحددها لمورد Blob Storage. يمكنك استخدام بيانات التعريف لتخزين هذه القيم مع المورد. قيم بيانات التعريف هي لأغراضك فقط، ولا تؤثر على كيفية تصرف المورد.

قراءة خصائص كائن ثنائي كبير الحجم

لقراءة خصائص كائن ثنائي كبير الحجم أو بيانات التعريف يجب أولاً استرداد كائن ثنائي كبير الحجم من الخدمة. استخدم cmdlet Get-AzStorageBlob لاسترداد خصائص كائن ثنائي كبير الحجم وبيانات التعريف الخاصة به، ولكن ليس محتواه. بعد ذلك، استخدم الأسلوب BlobClient.GetProperties لجلب خصائص كائن ثنائي كبير الحجم. يمكن بعد ذلك قراءة الخصائص أو بيانات التعريف أو إعدادها حسب الحاجة.

يسترد المثال التالي كائن ثنائي كبير الحجم ويسرد خصائصه.

$blob = Get-AzStorageBlob -Blob "blue-moon.mp3" -Container "mycontainer" -Context $ctx
$properties = $blob.BlobClient.GetProperties()
Echo $properties.Value

تعرض النتيجة قائمة بخصائص الكائن الثنائي كبير الحجم كما هو موضح في المثال التالي.

LastModified                         : 11/16/2021 3:42:07 PM +00:00
CreatedOn                            : 11/16/2021 3:42:07 PM +00:00
Metadata                             : {}
BlobType                             : Block
LeaseDuration                        : Infinite
LeaseState                           : Available
LeaseStatus                          : Unlocked
ContentLength                        : 2163298
ContentType                          : audio/mpeg
ETag                                 : 0x8D9C0AA9E0CBA78
IsServerEncrypted                    : True
AccessTier                           : Cool
IsLatestVersion                      : False
TagCount                             : 0
ExpiresOn                            : 1/1/0001 12:00:00 AM +00:00
LastAccessed                         : 1/1/0001 12:00:00 AM +00:00
HasLegalHold                         : False

قراءة وكتابة بيانات التعريف لكائن ثنائي كبير الحجم

بيانات تعريف كائن ثنائي كبير الحجم هي مجموعة اختيارية من أزواج الاسم/القيم المقترنة بكائن ثنائي كبير الحجم. كما هو موضح في المثال السابق، لا توجد بيانات تعريف مقترنة بكائن ثنائي كبير الحجم في البداية، على الرغم من أنه يمكن إضافته عند الضرورة. لتحديث بيانات تعريف الكائن الثنائي كبير الحجم، استخدم BlobClient.UpdateMetadata الأسلوب . يقبل هذا الأسلوب أزواج قيم المفاتيح المخزنة في كائن عام IDictionary فقط. لمزيد من المعلومات، راجع تعريف فئة BlobClient.

يقوم المثال أدناه بالتحديث أولاً ثم يقوم بتنفيذ بيانات تعريف كائن ثنائي كبير الحجم، ثم يستردها. يتم مسح عينة الكائنات الثنائية كبيرة الحجم من الذاكرة للتأكد من عدم قراءة بيانات التعريف من الكائن الموجود في الذاكرة.

#Set variable
$container = "mycontainer"
$blobName  = "blue-moon.mp3"

#Retrieve blob
$blob = Get-AzStorageBlob -Blob $blobName -Container $container -Context $ctx

#Create IDictionary, add key-value metadata pairs to IDictionary
$metadata = New-Object System.Collections.Generic.Dictionary"[String,String]"
$metadata.Add("YearWritten","1934")
$metadata.Add("YearRecorded","1958")
$metadata.Add("Composer","Richard Rogers")
$metadata.Add("Lyricist","Lorenz Hart")
$metadata.Add("Artist","Tony Bennett")

#Update metadata
$blob.BlobClient.SetMetadata($metadata, $null)

#Flush blob from memory, retrieve updated blob, retrieve properties
$blob = $null
$blob = Get-AzStorageBlob -Blob $blobName -Container $container -Context $ctx
$properties = $blob.BlobClient.GetProperties()
 
#Display metadata
Echo $properties.Value.Metadata

ترجع النتيجة بيانات التعريف المحدثة حديثا للكائن الثنائي كبير الحجم كما هو موضح في المثال التالي.

Key          Value         
---          -----         
YearWritten  1934          
YearRecorded 1958          
Composer     Richard Rogers
Lyricist     Lorenz Hart   
Artist       Tony Bennett

نسخ العمليات للكائنات الثنائية كبيرة الحجم

هناك العديد من السيناريوهات التي يمكن فيها نسخ أنواع مختلفة من الكائنات الثنائية كبيرة الحجم. تقتصر الأمثلة في هذه المقالة على كتل الكائنات الثنائية كبيرة الحجم.

نسخ كائن ثنائي كبير الحجم من المصدر إلى كائن ثنائي كبير الحجم في الوجهة

للحصول على عملية نسخ مبسطة داخل نفس حساب التخزين، استخدم cmdlet Copy-AzStorageBlob. نظرًا لأن العملية تقوم بنسخ كائن ثنائي كبير الحجم داخل نفس حساب التخزين، فهي عملية متزامنة. العمليات عبر الحسابات غير متزامنة.

يجب عليك مراعاة استخدام AzCopy للسهولة والأداء، خاصة عند نسخ كائنات ثنائية كبيرة الحجم بين حسابات التخزين. AzCopy هو أداة سطر الأوامر التي يمكنك استخدامها لنسخ كائنات ثنائية كبيرة الحجم أو ملفات إلى أو من حساب تخزين. تعرف على المزيد حول كيفية البدء باستخدام AzCopy.

ينسخ المثال أدناه كائن ثنائي كبير الحجم bannerphoto.png من حاوية الصور إلى مجلد الصور داخل حاوية الأرشيف. توجد الحاويتان داخل نفس حساب التخزين. تتحقق النتيجة من نجاح عملية النسخ.

$blobname = "bannerphoto.png"
Copy-AzStorageBlob -SrcContainer "photos" `
     -SrcBlob $blobname -DestContainer "archive" `
     -DestBlob $("photos/$blobname") -Context $ctx

AccountName: demostorageaccount, ContainerName: archive

Name                BlobType   Length  ContentType  LastModified          AccessTier  IsDeleted  VersionId
----                --------   ------  -----------  ------------          ----------  ---------  ---------
photos/bannerphoto  BlockBlob  12472   image/png    2021-11-27 23:11:43Z  Cool        False

يمكنك استخدام المعلمة -Force للكتابة على كائن ثنائي كبير الحجم موجود بنفس الاسم في الوجهة. تستبدل هذه العملية بشكل فعال الكائن الثنائي كبير الحجم في الوجهة. كما أنه يزيل أي كتل غير ملتزم بها ويكتب بيانات التعريف الخاصة بالكائن الثنائي كبير الحجم في الوجهة.

نسخ لقطة إلى كائن ثنائي كبير الحجم في الوجهة باسم مختلف

يكون الكائن الثنائي كبير الحجم في الوجهة الناتج عبارة عن كائن ثنائي كبير الحجم قابل للكتابة وليس لقطة.

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

لا يمكن تعديل كائن ثنائي كبير الحجم في الوجهة أثناء إجراء عملية النسخ. يمكن أن يحتوي الكائنات الثنائية كبيرة الحجم في الوجهة على عملية نسخ معلقة واحدة فقط. بمعنى آخر، لا يمكن أن يكون الكائن الثنائي كبير الحجم وجهة لعمليات النسخ المعلقة المتعددة.

عند نسخ كائن ثنائي كبير الحجم داخل نفس حساب التخزين، تكون عملية متزامنة. عمليات النسخ عبر الحسابات غير متزامنة.

يتم نسخ الكائن الثنائي كبير الحجم أو الملف من المصدر بالكامل دومًا. نسخ نطاق من وحدات البايت أو مجموعة من الكتل غير مدعوم.

عند نسخ كائن ثنائي كبير الحجم، يتم نسخ خصائص النظام إلى كائن ثنائي كبير الحجم في الوجهة بنفس القيم.

كما يوضح كيفية إجهاض عملية نسخ غير متزامنة.

كائنات ثنائية كبيرة الحجم للقطة

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

لا تؤثر أي عقود إيجار مقترنة بالكائن الثنائي كبير الحجم الأساسي على اللقطة. لا يمكنك الحصول على عقد إيجار على لقطة. اقرأ المزيد عن لقطات كائن ثنائي كبير الحجم.

يسترد نموذج التعليمات البرمجية التالي كائن ثنائي كبير الحجم من حاوية تخزين وتنشئ لقطة منه.

$blob = Get-AzStorageBlob -Container "manuscripts" -Blob "novels/fast-cars.docx" -Context $ctx
$blob.BlobClient.CreateSnapshot()

تعيين طبقة كائن ثنائي كبير الحجم

عند تغيير طبقة كائن ثنائي كبير الحجم، فأنت تنقل كائن ثنائي كبير الحجم وكافة البيانات الخاصة به إلى الطبقة الهدف. لإجراء التغيير، قم باسترداد كائن ثنائي كبير الحجم باستخدام Get-AzStorageBlob cmdlet، واستدعاء BlobClient.SetAccessTier الأسلوب . يمكن استخدام هذا الأسلوب لتغيير الطبقة بين الساخنة والباردة والأرشيف.

يتم تغيير المستويات من بارد أو ساخن إلى أرشيف على الفور تقريبا. بعد نقل كائن ثنائي كبير الحجم إلى طبقة الأرشيف ، يتم اعتباره غير متصل، ولا يمكن قراءته أو تعديله. قبل أن تتمكن من قراءة بيانات blob المؤرشفة أو تعديلها، تحتاج إلى إعادة ترطيبها إلى مستوى عبر الإنترنت. اقرأ المزيد حول إعادة ترطيب Blob من طبقة الأرشيف.

يعين نموذج التعليمات البرمجية التالي الطبقة إلى hot لجميع الكائنات الثنائية كبيرة الحجم داخل الحاوية archive .

$blobs = Get-AzStorageBlob -Container archive -Context $ctx
Foreach($blob in $blobs) {
    $blob.BlobClient.SetAccessTier("Hot")
}

العمليات باستخدام علامات كائن ثنائي كبير الحجم

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

يوضح المثال التالي كيفية إضافة علامات فهرس كائن ثنائي كبير الحجم إلى سلسلة من الكائنات الثنائية كبيرة الحجم. يقرأ المثال البيانات من ملف XML ويستخدمها لإنشاء علامات فهرسة على العديد من الكائنات الثنائية كبيرة الحجم. لاستخدام نموذج التعليمات البرمجية، قم بإنشاء ملف blob-list.xml محلي في الدليل C:\temp. يتم توفير بيانات XML في المثال التالي.

<Venue Name="House of Prime Rib" Type="Restaurant">
  <Files>
    <File path="transactions/12027121.csv" />
    <File path="campaigns/radio-campaign.docx" />
    <File path="photos/bannerphoto.png" />
    <File path="archive/completed/2020review.pdf" />
    <File path="logs/2020/01/01/logfile.txt" />
  </Files>
</Venue>

ينشئ نموذج التعليمات البرمجية جدول تجزئة ويعين المتغير $tags إليه. بعد ذلك، فإنه يستخدم Get-Content وcmdlets Get-Data لإنشاء كائن استنادًا إلى بنية XML. ثم يضيف أزواج قيم المفاتيح إلى جدول التجزئة لاستخدامها كقيم العلامة. وأخيرًا، فإنه يكرر خلال كائن XML ويقوم بإنشاء علامات لكل File عقدة.

#Set variables
$filePath = "C:\temp\blob-list.xml"
$tags     = @{}

#Get data, set tag key-values
[xml]$data = Get-Content -Path $filepath
$tags.Add("VenueName", $data.Venue.Name)
$tags.Add("VenueType", $data.Venue.Type)
 
#Loop through files and add tag
$data.Venue.Files.ChildNodes | ForEach-Object {
    #break the path: container name, blob
    $path = $_.Path -split "/",2
   
    #set apply the blob tags
    Set-AzStorageBlobTag -Container $location[0] -Blob $location[1] -Tag $tags -Context $ctx
 }

حذف الـ Blobs

يمكنك حذف كائن ثنائي كبير الحجم واحد أو سلسلة من الكائنات الثنائية كبيرة الحجم باستخدام cmdlet Remove-AzStorageBlob. عند حذف الكائنات الثنائية كبيرة الحجم المتعددة، يمكنك استخدام العمليات الشرطية أو الحلقات أو البنية الأساسية لبرنامج ربط العمليات التجارية PowerShell كما هو موضح في الأمثلة التالية.

التحذير

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

#Create variables
$containerName  = "mycontainer"
$blobName       = "demo-file.txt"
$prefixName     = "file"

#Delete a single, named blob
Remove-AzStorageBlob -Blob $blobName -Container $containerName -Context $ctx

#Iterate a loop, deleting blobs
for ($i = 1; $i -le 3; $i++) { 
    Remove-AzStorageBlob -Blob (-join($prefixName, $i, ".txt")) -Container $containerName -Context $ctx
} 

#Retrieve blob list, delete using a pipeline
Get-AzStorageBlob -Prefix $prefixName -Container $containerName -Context $ctx | Remove-AzStorageBlob

في بعض الحالات، من الممكن استرداد الكائنات الثنائية كبيرة الحجم التي تم حذفها. إذا تم تمكين خيار حماية بيانات الحذف المبدئي لحساب التخزين الخاص بك، تقوم المعلمة -IncludeDeleted بإرجاع الكائنات الثنائية كبيرة الحجم المحذوفة خلال فترة الاستبقاء المقترنة. لمعرفة المزيد حول الحذف المبدئي، راجع مقالة حذف مبدئي للكائنات الثنائية كبيرة الحجم.

استخدم المثال التالي لاسترداد قائمة الكائنات الثنائية كبيرة الحجم المحذوفة ضمن فترة الاستبقاء المُقترنة بالحاوية. تعرض النتيجة قائمة الكائنات الثنائية كبيرة الحجم المحذوفة مؤخرًا.

#Retrieve a list of blobs including those recently deleted
Get-AzStorageBlob -Prefix $prefixName -IncludeDeleted -Context $ctx

AccountName: demostorageaccount, ContainerName: demo-container

Name       BlobType   Length  ContentType                LastModified          AccessTier    IsDeleted
----       --------   ------  -----------                ------------          ----------    ---------
file.txt   BlockBlob  22      application/octet-stream   2021-12-16 20:59:41Z  Cool          True
file2.txt  BlockBlob  22      application/octet-stream   2021-12-17 00:14:24Z  Cool          True
file3.txt  BlockBlob  22      application/octet-stream   2021-12-17 00:14:24Z  Cool          True
file4.txt  BlockBlob  22      application/octet-stream   2021-12-17 00:14:25Z  Cool          True

استعادة كائن ثنائي محذوف

كما هو مذكور في قسم قائمة الكائنات الثنائية كبيرة الحجم، يمكنك تكوين خيار حماية بيانات الحذف المبدئي على حساب التخزين الخاص بك. عند التمكين، يمكن استعادة النقاط الثنائية الكبيرة المحذوفة خلال فترة الاحتفاظ المرتبطة. يمكنك أيضًا استخدام الإصدار للاحتفاظ بالإصدارات السابقة من النقاط الكبيرة لكل عملية استرداد واستعادة.

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

يستعيد نموذج التعليمات البرمجية التالي كافة الكرات الثنائية الكبيرة المحذوفة أو إذا تم تمكين تعيين الإصدار، يستعيد أحدث إصدار لكائن ثنائي الحجم. يحدد أولًا ما إذا كان تعيين الإصدار ممكّنًا باستخدام الأمر cmdlet Get-AzStorageBlobServiceProperty.

إذا تم تمكين تعيين الإصدار، يقوم Get-AzStorageBlob cmdlet باسترداد قائمة بجميع إصدارات blob المسماة بشكل فريد. بعد ذلك، يتم استرداد إصدارات الكائن ثنائي الحجم الموجودة في القائمة وترتيبها حسب التاريخ. إذا لم يتم العثور على إصدارات بقيمة السمة LatestVersion، فسيتم استخدام الأمر cmdlet Copy-AzBlob لعمل نسخة نشطة من أحدث إصدار.

إذا تم تعطيل تعيين الإصدار، فسيتم استخدام الطريقة BlobBaseClient.Undelete لاستعادة كل كائن ثنائي تم حذفه بشكل بسيط في الحاوية.

قبل أن تتمكن من اتباع هذا المثال، تحتاج إلى تمكين الحذف المبدئي أو تعيين الإصدار على حساب تخزين واحد على الأقل.

هام

يقوم المثال التالي بتعداد مجموعة من الكائنات الثنائية كبيرة الحجم وتخزينها في الذاكرة قبل معالجتها. إذا تم تمكين تعيين الإصدار، يتم أيضا فرز الكائنات الثنائية كبيرة الحجم. استخدام المعلمة -ContinuationToken مع $maxCount متغير يحد من عدد الكائنات الثنائية كبيرة الحجم داخل المجموعة للحفاظ على الموارد. إذا كانت الحاوية تحتوي على ملايين الكائنات الثنائية كبيرة الحجم، فسيكون هذا مكلفا للغاية. يمكنك ضبط قيمة المتغير، على الرغم من $maxCount أنه إذا كانت الحاوية تحتوي على ملايين الكائنات الثنائية كبيرة الحجم، فسيعالج البرنامج النصي الكائنات الثنائية كبيرة الحجم ببطء.

لمعرفة المزيد حول خيار حماية بيانات الحذف المبدئي، راجع مقالة حذف مبدئي للكائنات الثنائية كبيرة الحجم.

$accountName   ="myStorageAccount"
$groupName     ="myResourceGroup"
$containerName ="mycontainer"
$maxCount      = 1000
$token         = $null


$blobSvc = Get-AzStorageBlobServiceProperty `
    -StorageAccountName $accountName `
    -ResourceGroupName $groupName

# If soft delete is enabled
if($blobSvc.DeleteRetentionPolicy.Enabled)
{
    # If versioning is enabled
    if($blobSvc.IsVersioningEnabled -eq $true)
    {
        # Set context
        $ctx = New-AzStorageContext `
            -StorageAccountName $accountName `
            -UseConnectedAccount
        do
        {
            # Get all blobs and versions using -Unique 
            # to avoid processing duplicates/versions
            $blobs = Get-AzStorageBlob `
                -Container $containerName `
                -Context $ctx -IncludeVersion | `
                    Where-Object {$_.VersionId -ne $null} | `
                    Sort-Object -Property Name -Unique

            # Iterate the collection
            foreach ($blob in $blobs)
            {
                # Process versions
                if($blob.VersionId -ne $null)
                {
            
                    # Get all versions of the blob, newest to oldest
                    $delBlob = Get-AzStorageBlob `
                        -Container $containerName `
                        -Context $ctx `
                        -Prefix $blob.Name `
                        -IncludeDeleted -IncludeVersion  | `
                            Sort-Object -Property VersionId -Descending

                    # Verify that the newest version is NOT the latest (that the version is "deleted")
                    if (-Not $delBlob[0].IsLatestVersion)
                    {
                        $delBlob[0] | Copy-AzStorageBlob `
                            -DestContainer $containerName `
                            -DestBlob $delBlob[0].Name
                    }
                
                    #Dispose the temporary object
                    $delBlob = $null
                }
            }
            $token = $blobs[$blobs.Count -1].ContinuationToken;
        }
        while ($null -ne $token)
    }

    # Otherwise (if versioning is disabled)
    else
    {
        $blobs = Get-AzStorageBlob `
            -Container $containerName `
            -Context $ctx -IncludeDeleted | `
                Where-Object {$_.IsDeleted}
        foreach($blob in $blobs)
        {
            if($blob.IsDeleted) { $blob.BlobBaseClient.Undelete() }
        }
    }
}
else
{
    echo "Sorry, the delete retention policy is not enabled."
}

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