مشاركة عبر


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

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

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

للوصول إلى Azure Storage، يلزم الحصول على أحد اشتراكات Azure. إذا لم يكن لديك اشتراك بالفعل، فأنشئ حسابًا مجانيًا قبل أن تبدأ.

يتم الوصول إلى Azure Storage من خلال حساب تخزين. بالنسبة للتشغيل السريع هذا، أنشئ حساب تخزين باستخدام مدخل Azure أو Azure PowerShell أو Azure CLI. للمساعدة في إنشاء حساب تخزين، راجع إنشاء حساب تخزين.

إعداد البيئة الخاصة بك لـ Azure CLI

  • تتطلب هذه المقالة الإصدار 2.0.46، أو إصداراً أحدث من Azure CLI. إذا كنت تستخدم Azure Cloud Shell، يتم تثبيت أحدث إصدار بالفعل.

السماح بالوصول إلى Blob storage

يمكنك تخويل الوصول إلى تخزين Blob من Azure CLI إما باستخدام بيانات اعتماد Microsoft Entra أو باستخدام مفتاح الوصول إلى حساب التخزين. يوصى باستخدام بيانات اعتماد Microsoft Entra، وتستخدم أمثلة هذه المقالة معرف Microsoft Entra حصريا.

تعمل أوامر Azure CLI لعمليات البيانات مقابل Blob storage على دعم المعلمة --auth-mode، والتي تمكنك من تحديد طريقة تخويل إحدى العمليات المعينة. قم بتعيين المعلمة --auth-mode لتسجيل الدخول لتخويلها باستخدام بيانات اعتماد Microsoft Entra. لا تدعم عمليات بيانات تخزين Blob سوى المعلمة --auth-mode فقط. تستخدم عمليات الإدارة، مثل إنشاء مجموعة موارد أو حساب تخزين، بيانات اعتماد Microsoft Entra تلقائيا للتخويل. للحصول على مزيد من المعلومات، راجع اختيار كيفية تخويل الوصول إلى بيانات الكائنات الثنائية كبيرة الحجم باستخدام Azure CLI.

شغّل الأمر login لفتح المتصفح واتصل باشتراك Azure.


az login

إنشاء حاوية

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


#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

# Create a container object
az storage container create \
    --name $containerName \
    --account-name $storageAccount
    --auth-mode login

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

تحميل كائنات Blob

يوفر Azure CLI أوامر تقوم بتنفيذ العمليات على مورد واحد أو على موارد متعددة، وفقا لمتطلباتك.

لتحميل ملف إلى كتل الكائنات الثنائية كبيرة الحجم، مرر قيم المعلمة المطلوبة إلى الأمر az storage blob upload. توفير اسم الملف ومسار المصدر باستخدام المعلمة --file واسم حاوية الوجهة باستخدام المعلمة --container-name. ستحتاج أيضا إلى توفير المعلمة --account-name. ينشئ هذا الأمر كائن ثنائي كبير الحجم جديد أو يحل محل الكائن الثنائي كبير الحجم الأصلي إذا كان موجود بالفعل.

يمكنك استخدام الأمر az storage blob upload-batch لتحميل كائنات ثنائية كبير الحجم متعددة بشكل متكرر إلى حاوية تخزين. يمكنك استخدام مطابقة نمط اسم ملف Unix لتحديد نطاق الملفات لتحميلها باستخدام المعلمة --pattern. الأنماط المدعومة هي * و? و[seq] و[!seq]. لمعرفة المزيد، راجع وثائق Python حول مطابقة نمط اسم ملف Unix .

في المثال التالي، تستخدم العملية الأولى الأمر az storage blob upload لتحميل ملف واحد مسمى. يتم تحديد ملف المصدر وحاوية تخزين الوجهة باستخدام المعلمتين --file و --container-name.

توضح العملية الثانية استخدام الأمر az storage blob upload-batch لتحميل ملفات متعددة. --if-modified-since تضمن المعلمة تحميل الملفات التي تم تعديلها خلال الأيام السبعة الماضية فقط. يجب توفير القيمة التي توفرها هذه المعلمة بتنسيق UTC.


#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
lastModified=$(date +%Y:%m:%d -d "7 days ago")

path="C:\\temp\\"
filename="demo-file.txt"
imageFiles="*.png"
file="$path$filename"

#Upload a single named file
az storage blob upload \
    --file $file \
    --container-name $containerName \
    --account-name $storageAccount \
    --auth-mode login

#Upload multiple image files recursively
az storage blob upload-batch \
    --destination $containerName \
    --source $path \
    --pattern *.png \
    --account-name $storageAccount \
    --auth-mode login \
    --if-modified-since $lastModified

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

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

استخدم المعلمة --prefix لتحديد ملف واحد معروف أو نطاق الملفات التي تبدأ أسماؤها بسلسلة محددة. يمكنك تحديد دليل ظاهري كجزء من المعلمة --prefix .

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

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

يوضح المثال التالي عدة نُهج تستخدم لتوفير قائمة الكائنات الثنائية كبيرة الحجم. يسرد النهج الأول جميع الكائنات الثنائية كبيرة الحجم داخل حاوية محددة. يستخدم الأسلوب الثاني المعلمة --prefix لسرد كافة الكائنات الثنائية كبيرة الحجم في الحاويات التي تبدأ بالبادئة المحددة. يستخدم الأسلوب الثالث المعلمة --num-results للحد من النتائج التي تم إرجاعها والمعلمة --show-next-marker لتضمين رمز المتابعة في النتائج. عندما يكون رمز المتابعة موجودا في النتائج، يتم تمريره إلى الاستدعاء az storage blob list اللاحق لاسترداد المجموعة التالية من النتائج.

لمزيد من المعلومات، راجع مرجع قائمة az storage blob.

#!/bin/bash
storageAccount="<storage-account>"
containerName="<container-name>"
blobPrefix="<prefix-string>"
numResults=5

#Approach 1: List all blobs in a container by name.

az storage blob list \
    --account-name $storageAccount \
    --container $containerName \
    --query "[].name" \
    --auth-mode login \
    --output tsv

#Approach 2: Use the --prefix parameter to list blobs starting with specified prefix.

az storage blob list \
    --account-name $storageAccount \
    --container $containerName \
    --prefix $blobPrefix \
    --query "[].name" \
    --auth-mode login \
    --output tsv

#Approach 3: Use the continuation token to return the complete set of results.

get_blobs() {
    if [ -z "$nextMarker" ]; then
        az storage blob list --container-name $containerName --num-results $numResults --account-name $storageAccount --show-next-marker --only-show-errors --auth-mode login
    else
        az storage blob list --container-name $containerName --num-results $numResults --marker $nextMarker --account-name $storageAccount --show-next-marker --only-show-errors --auth-mode login
    fi
}
 
total=0
nextMarker=""
while true; do
    blobs=$(get_blobs $containerName $numResults $storageAccount $nextMarker) 
    nextMarker=""
    blobsLength=$(echo $blobs | jq length)
    
    if [ $blobsLength -le 0 ]; then
        break
    fi
    
    blobIndex=0
    while read blob; do
        if [ $blobIndex -eq $(($blobsLength-1)) ]; 
        then
            nextMarker="$(echo $blob | jq -r .nextMarker)"
        else
            blobName=$(echo $blob | jq .name)
            echo "blobname: $blobName"
        fi
        ((blobIndex++))
    done <<<$(echo $blobs | jq -c '.[]')
 
    total=$(($total+$blobsLength-1))
    echo "Processed $total blobs so far"
    # echo "nextMarker: $nextMarker"
    if [ "${nextMarker}" = "null" ]; then
        echo -e "\nAccountName: $storageAccount, ContainerName: $containerName "
        echo "Processed $total blobs in total."
        break
    fi
done

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

بناء على حالة الاستخدام الخاصة بك، ستستخدم إما الأمر az storage blob download أو az storage blob download-batch لتنزيل كائن ثنائي كبير الحجم. لتنزيل كائن ثنائي كبير الحجم فردي، استدعي الأمر az storage blob download مباشرة ومرر القيم الخاصة بالمعلمات --container-name و--file و--name. يتم تنزيل الكائن الثنائي كبير الحجم إلى دليل shell بشكل افتراضي، ولكن يمكن تحديد موقع بديل. ستفشل العملية مع حدوث خطأ إذا لم يكن المسار المحدد موجودًا.

لتنزيل كائنات ثنائية كبير الحجم متعددة بشكل متكرر من حاوية تخزين، استخدم الأمر az storage blob download-batch. يدعم هذا الأمر مطابقة نمط اسم ملف Unix مع المعلمة --pattern. الأنماط المدعومة هي * و? و[seq] و[!seq]. لمعرفة المزيد، راجع وثائق Python حول مطابقة نمط اسم ملف Unix .

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

لمزيد من المعلومات، راجع az storage blob download وaz storage blob download batchreference.

#!/bin/bash
#Set variables
storageAccount="<storage-account>"
containerName="demo-container"

destinationPath="C:\\temp\\downloads\\"
destinationFilename="downloadedBlob.txt"
file="$destinationPath$destinationFilename"
sourceBlobName="demo-file.txt"

#Download a single named blob

az storage blob download \
    --container $containerName \
    --file $file \
    --name $sourceBlobName \
    --account-name $storageAccount \
    --auth-mode login

#Download multiple blobs using a pattern value

az storage blob download-batch \
    --destination $destinationPath \
    --source $containerName \
    --pattern images/*.png \
    --account-name $storageAccount \
    --auth-mode login

#Use a loop to download matching blobs in a list of containers

containerList=$( \
    az storage container list \
        --query "[].name" \
        --num-results 5 \
        --account-name $storageAccount \
        --auth-mode login \
        --output tsv 
)
for row in $containerList
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    echo $tmpName
   
    az storage blob download-batch \
        --destination $destinationPath \
        --source $tmpName \
        --pattern *louis*.* \
        --account-name $storageAccount \
        --auth-mode login
done

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

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

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

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

لقراءة خصائص كائن ثنائي كبير الحجم أو بيانات التعريف يجب أولاً استرداد كائن ثنائي كبير الحجم من الخدمة. استخدم الأمر az storage blob show لاسترداد خصائص كائن ثنائي كبير الحجم وبيانات التعريف الخاصة به، ولكن ليس محتواه. يسترد المثال التالي كائن ثنائي كبير الحجم ويسرد خصائصه.

لمزيد من المعلومات، راجع مرجع az storage blob show .

#!/bin/bash
#Set variables
storageAccount="<storage-account>"
containerName="demo-container"

az storage blob show \
    --container  demo-container \
    --name demo-file.txt \
    --account-name $storageAccount \
    --auth-mode login

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

بيانات تعريف كائن ثنائي كبير الحجم هي مجموعة اختيارية من أزواج الاسم/القيم المقترنة بكائن ثنائي كبير الحجم. كما هو موضح في المثال السابق، لا توجد بيانات تعريف مقترنة بكائن ثنائي كبير الحجم في البداية، على الرغم من أنه يمكن إضافته عند الضرورة. للقراءة، استخدم الأمر az storage blob metadata show. لتحديث بيانات تعريف كائن ثنائي كبير الحجم، ستستخدم az storage blob metadata update وتوفر صفيف أزواج قيم المفاتيح. لمزيد من المعلومات، راجع مرجع بيانات تعريف كائن ثنائي كبير الحجم للتخزين az.

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

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

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
blobName="blue-moon.mp3"

metadata=("Written=1934" "Recorded=1958")
metadata+=("Lyricist=Lorenz Hart")
metadata+=("Composer=Richard Rogers")
metadata+=("Artist=Tony Bennett")

#Update metadata
az storage blob metadata update \
    --container-name $containerName \
    --name $blobName \
    --metadata "${metadata[@]}" \
    --account-name $storageAccount \
    --auth-mode login

#Retrieve updated blob metadata
az storage blob metadata show \
    --container-name $containerName \
    --name $blobName \
    --account-name $storageAccount \
    --auth-mode login

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

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

لنسخ كائن ثنائي كبير الحجم معين، استخدم الأمر az storage blob copy start وحدد قيمًا للحاويات والكائنات الثنائية كبير الحجم للمصدر والوجهة. من الممكن أيضا توفير معرف مورد موحد (URI) أو مشاركة أو توقيع وصول مشترك (SAS) كمصدر.

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

يمكنك استخدام الأمر az storage blob copy start-batch لنسخ كائنات ثنائية كبير الحجم متعددة بشكل متكرر بين حاويات التخزين داخل نفس حساب التخزين. يتطلب هذا الأمر قيمًا للمعلمتين --source-container و--destination-container، ويمكنه نسخ كافة الملفات بين المصدر والوجهة. مثل أوامر دفعة CLI الأخرى، يدعم هذا الأمر مطابقة نمط اسم ملف Unix مع المعلمة --pattern. الأنماط المدعومة هي * و? و[seq] و[!seq]. لمعرفة المزيد، راجع وثائق Python حول مطابقة نمط اسم ملف Unix .

إشعار

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

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

يوفر نموذج التعليمات البرمجية التالي مثالاً على عمليات النسخ الفردية والمتعددة كلاهما. نظرا لأن بعض البيئات يمكن أن تحتوي على عدة آلاف من الموارد، يوصى باستخدام المعلمة --num-results . ينسخ المثال الأول كائن ثنائي كبير الحجم secret-town-road.png من حاوية الصور إلى حاوية المواقع. توجد الحاويتان داخل نفس حساب التخزين. تتحقق النتيجة من نجاح عملية النسخ.

#!/bin/bash
storageAccount="<storage-account>"
sourceContainer="photos"
blobName="secret-town-road.jpg"
destContainer="locations"

az storage blob copy start \
    --destination-container $destContainer \
    --destination-blob $blobName \
    --source-container $sourceContainer \
    --source-blob $blobName \
    --account-name $storageAccount \
    --auth-mode login

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

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

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

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
blobName="demo-file.txt"

az storage blob snapshot \
    --container-name $containerName \
    --name Blue-Moon.mp3 \
    --account-name $storageAccount \
    --auth-mode login

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

عند تغيير طبقة كائن ثنائي كبير الحجم، فأنت تنقل كائن ثنائي كبير الحجم وكافة البيانات الخاصة به إلى الطبقة الهدف. يمكنك تغيير الطبقة بين الساخنة والباردة والأرشفة باستخدام az storage blob set-tier الأمر .

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

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

لمزيد من المعلومات، راجع مرجع az storage blob set-tier .

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

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

az storage blob set-tier 
    --container-name $containerName \
    --name Blue-Moon.mp3 \
    --tier Hot \
    --account-name $storageAccount \
    --auth-mode login

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

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

تلميح

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

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

لمزيد من المعلومات، راجع مرجع az storage blob set-tier .

<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>

يكرر نموذج التعليمات البرمجية الأسطر داخل ملف XML. يحدد موقع عنصر Venue وينشئ متغيرات لقيمName وType. ثم يكرر من خلال الأسطر المتبقية وينشئ علامات لكل نقطة مشار إليها بواسطة عقدة File.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

while read line
do
  
#Set Tag values 
if echo "$line" | grep -q "<Venue";then
    name=`echo "$line" | cut -d'"' -f 2`
    type=`echo "$line" | cut -d'"' -f 4`
    tags=("name=$name")
    tags+=("type=$type")
fi

#Add tags to blobs
if echo "$line" | grep -q "<File ";then
    blobName=`echo "$line" | cut -d'"' -f 2`
    
    echo az storage blob tag set \
        --container-name $containerName \
        --name $blobName \
        --account-name $storageAccount \
        --auth-mode login \
        --tags "{$tags[@]}"
fi

done < /mnt/c/temp/bloblist.xml

حذف الـ Blobs

يمكنك حذف كائن ثنائي كبير الحجم واحد أو سلسلة من الكائنات الثنائية كبيرة الحجم باستخدام الأمرين az storage blob delete وaz storage blob delete-batch. عند حذف كائنات ثنائية كبيرة الحجم متعددة، يمكنك استخدام العمليات الشرطية، أو الحلقات، أو أتمتة أخرى كما هو موضح في الأمثلة أدناه.

تحذير

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

يوفر نموذج التعليمة البرمجية التالي مثالا على كل من عمليات الحذف الفردية والجماعية. يحذف المثال الأول كائن ثنائي كبير الحجم واحدة مسمى. يوضح المثال الثاني استخدام العمليات المنطقية في Bash لحذف كائنات ثنائية كبير الحجم متعددة. يستخدم المثال الثالث الأمر delete-batch لحذف جميع الكائنات الثنائية كبير الحجم بتنسيق bennett-x، باستثناء bennett-2.

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

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

blobName="demo-file.txt"
blobPrefix="sinatra-"

#Delete a single, named blob
az storage blob delete \
    --container-name $containerName \
    --name $blobName \
    --account-name $storageAccount \
    --auth-mode login

#Iterate a blob list, deleting blobs whose names end with even numbers

## Get list of containers
blobList=$(az storage blob list \
    --query "[].name" \
    --prefix $blobPrefix \
    --container-name $containerName \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

## Delete all blobs with the format *bennett-x* except *bennett-2.*
for row in $blobList
do
    #Get the blob's number
    tmpBlob=$(echo $row | sed -e 's/\r//g') 
    tmpName=$(echo ${row%.*} | sed -e 's/\r//g')

    if [ `expr ${tmpName: ${#blobPrefix}} % 2` == 0 ]
    then
        
        echo "Deleting $tmpBlob"
        az storage blob delete \
            --container-name $containerName \
            --name $tmpBlob \
            --account-name $storageAccount \
            --auth-mode login

  fi
done

#Delete multiple blobs using delete-batch
az storage blob delete-batch \
    --source $containerName \
    --pattern bennett-[!2].* \
    --account-name $storageAccount \
    --auth-mode login

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

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

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"

blobPrefix="sinatra-"

#Retrieve a list of all deleted blobs
az storage blob list \
    --container-name $containerName \
    --include d \
    --output table \
    --account-name $storageAccount \
    --auth-mode login \
    --query "[?deleted].{name:name,deleted:properties.deletedTime}"

#Retrieve a list of all deleted blobs matching a specific prefix
az storage blob list \
    --container-name $containerName \
    --prefix $blobPrefix \
    --output table \
    --include d \
    --account-name $storageAccount \
    --auth-mode login \
    --query "[].{name:name,deleted:deleted}"

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

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

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

يستعيد نموذج التعليمات البرمجية التالي كافة الكرات الثنائية الكبيرة المحذوفة أو إذا تم تمكين تعيين الإصدار، يستعيد أحدث إصدار لكائن ثنائي الحجم. يحدد أولاً ما إذا كان تعيين الإصدار ممكّنًا باستخدام الأمر az storage account blob-service-properties show.

إذا تم تمكين تعيين الإصدار، يقوم az storage blob list الأمر باسترداد قائمة بجميع إصدارات blob المسماة بشكل فريد. بعد ذلك، يتم استرداد إصدارات الكائن ثنائي الحجم الموجودة في القائمة وترتيبها حسب التاريخ. إذا لم يتم العثور على إصدارات بقيمة السمة isCurrentVersion، فسيتم استخدام الأمر az storage blob copy start لعمل نسخة نشطة من أحدث إصدار.

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

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

#!/bin/bash
storageAccount="<storage-account>"
groupName="myResourceGroup"
containerName="demo-container"

blobSvcProps=$(
    az storage account blob-service-properties show \
        --account-name $storageAccount \
        --resource-group $groupName)

softDelete=$(echo "${blobSvcProps}" | jq -r '.deleteRetentionPolicy.enabled')
versioning=$(echo "${blobSvcProps}" | jq -r '.isVersioningEnabled')

# If soft delete is enabled
if $softDelete
then
    
    # If versioning is enabled
    if $versioning
    then

        # Get all blobs and versions using -Unique to avoid processing duplicates/versions
        blobList=$(
            az storage blob list \
                --account-name $storageAccount \
                --container-name $containerName \
                --include dv \--query "[?versionId != null].{name:name}" \
                --auth-mode login -o tsv | uniq)
        
        # Iterate the collection
        for blob in $blobList
        do
            # Get all versions of the blob, newest to oldest
            blobVers=$(
                az storage blob list \
                    --account-name $storageAccount \
                    --container-name $containerName \
                    --include dv \
                    --prefix $blob \
                    --auth-mode login -o json | jq 'sort_by(.versionId) | reverse | .[]')
            # Select the first (newest) object
            delBlob=$(echo "$blobVers" | jq -sr '.[0]')
            
            # Verify that the newest version is NOT the latest (that the version is "deleted")
            if [[ $(echo "$delBlob" | jq '.isCurrentVersion') != true ]]; 
            then
                # Get the blob's versionId property, build the URI to the blob
                versionID=$(echo "$delBlob" | jq -r '.versionId')
                uri="https://$storageAccount.blob.core.windows.net/$containerName/$blob?versionId=$versionID"
                
                # Copy the latest version 
                az storage blob copy start \
                    --account-name $storageAccount \
                    --destination-blob $blob \
                    --destination-container $containerName \
                    --source-uri $uri \
                    --auth-mode login
       
                delBlob=""
            fi
        done

    else

        #Retrieve all deleted blobs
        blobList=$( \
            az storage blob list \
                --container-name $containerName \
                --include d \
                --output tsv \
                --account-name $storageAccount \
                --auth-mode login \
                --query "[?deleted].[name]" \
        )

        #Iterate list of deleted blobs and restore
        for row in $blobList
        do
            tmpName=$(echo $row | sed -e 's/\r//g')
            echo "Restoring $tmpName"
            az storage blob undelete \
                --container-name $containerName \
                --name $tmpName \
                --account-name $storageAccount \
                --auth-mode login
        done

    fi

else
    
    #Soft delete is not enabled
    echo "Sorry, the delete retention policy is not enabled."

fi

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