إدارة كتل الكائنات الثنائية كبيرة الحجم باستخدام PowerShell
يدعم مخزن البيانات الثنائية كبيرة الحجم، والبيانات الثنائية كبيرة الحجم الملحقة، وبيانات الصفحة الثنائية كبيرة الحجم. تم تحسين كتل الكائنات الثنائية كبيرة الحجم لتحميل كميات كبيرة من البيانات بكفاءة. تعتبر الكائنات الثنائية كبيرة الحجم للكتل مثالية لتخزين الصور والمستندات وأنواع البيانات الأخرى التي لا تخضع لعمليات القراءة والكتابة العشوائية. توضح هذه المقالة كيفية العمل مع كتل الكائنات الثنائية كبيرة الحجم.
المتطلبات الأساسية
اشتراك Azure. راجع الحصول على الإصدار التجريبي المجاني من Azure .
وحدة Azure PowerShell النمطية
Az
، وهي وحدة PowerShell الموصى بها للتفاعل مع Azure. لبدء استخدام الوحدة النمطية Az PowerShell، راجع تثبيت Azure 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."
}