Blokkblobok kezelése az Azure CLI-vel
A Blob Storage támogatja a blokkblobokat, a hozzáfűző blobokat és a lapblobokat. A blokkblobok nagy mennyiségű adat hatékony feltöltésére vannak optimalizálva. A blokkblobok ideálisak képek, dokumentumok és más típusú adatok tárolására, amelyek nem tartoznak véletlenszerű olvasási és írási műveletek hatálya alá. Ez a cikk a blokkblobok működését ismerteti.
Előfeltételek
Az Azure Storage eléréséhez Azure-előfizetésre lesz szüksége. Ha még nem rendelkezik előfizetéssel, a kezdés előtt hozzon létre egy ingyenes fiókot .
Az Azure Storage-hoz való minden hozzáférés egy tárfiókon keresztül történik. Ebben a rövid útmutatóban hozzon létre egy tárfiókot az Azure Portal, az Azure PowerShell vagy az Azure CLI használatával. A tárfiókok létrehozásával kapcsolatban lásd : Tárfiók létrehozása.
A környezet előkészítése az Azure CLI-hez
Használja a Bash-környezetet az Azure Cloud Shellben. További információ: A Bash rövid útmutatója az Azure Cloud Shellben.
Ha inkább helyi cli-referenciaparancsokat szeretne futtatni, telepítse az Azure CLI-t. Ha Windows vagy macOS rendszert használ, fontolja meg az Azure CLI Docker-tárolóban való futtatását. További információ: Az Azure CLI futtatása Docker-tárolóban.
Ha helyi telepítést használ, jelentkezzen be az Azure CLI-be az az login parancs futtatásával. A hitelesítési folyamat befejezéséhez kövesse a terminálon megjelenő lépéseket. További bejelentkezési lehetőségekért lásd : Bejelentkezés az Azure CLI-vel.
Amikor a rendszer kéri, először telepítse az Azure CLI-bővítményt. További információ a bővítményekről: Bővítmények használata az Azure CLI-vel.
Futtassa az az version parancsot a telepített verzió és a függő kódtárak megkereséséhez. A legújabb verzióra az az upgrade paranccsal frissíthet.
- Ez a cikk az Azure CLI 2.0.46-os vagy újabb verzióját igényli. Az Azure Cloud Shell használata esetén a legújabb verzió már telepítve van.
Blob Storage-hozzáférés engedélyezése
A Blob Storage-hoz való hozzáférést az Azure CLI-ből engedélyezheti a Microsoft Entra hitelesítő adataival vagy egy tárfiók hozzáférési kulcsával. A Microsoft Entra hitelesítő adatainak használata ajánlott, és a jelen cikk példái kizárólag a Microsoft Entra-azonosítót használják.
A Blob Storage-beli adatműveletek Azure CLI-parancsai támogatják a --auth-mode
paramétert, amely lehetővé teszi egy adott művelet engedélyezésének megadását. Állítsa be a paramétert --auth-mode
úgy, hogy a Microsoft Entra hitelesítő adataival engedélyezze a bejelentkezést . A paramétert csak a --auth-mode
Blob Storage-adatműveletek támogatják. Az olyan felügyeleti műveletek, mint például egy erőforráscsoport vagy tárfiók létrehozása, automatikusan a Microsoft Entra hitelesítő adatait használják az engedélyezéshez. További információ: A blobadatokhoz való hozzáférés engedélyezése az Azure CLI-vel.
Futtassa a login
parancsot egy böngésző megnyitásához és az Azure-előfizetéshez való csatlakozáshoz.
az login
Tároló létrehozása
Minden blobadat tárolókban van tárolva, ezért az adatok feltöltéséhez legalább egy tárolóerőforrásra lesz szüksége. Ha szükséges, az alábbi példában hozzon létre egy tárolót. További információ: Blobtárolók kezelése az Azure CLI használatával.
#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container"
# Create a container object
az storage container create \
--name $containerName \
--account-name $storageAccount
--auth-mode login
Ha a cikkben szereplő példákat használja, a zárójelben szereplő helyőrző értékeket a saját értékeire kell cserélnie. Az Azure CLI-vel való bejelentkezéssel kapcsolatos további információkért lásd: Bejelentkezés az Azure CLI-vel.
Blobok feltöltése
Az Azure CLI olyan parancsokat kínál, amelyek a követelményektől függően egy erőforráson vagy több erőforráson hajtanak végre műveleteket.
Ha egy fájlt fel szeretne tölteni egy blokkblobba, adja át a szükséges paraméterértékeket a az storage blob upload
parancsnak. Adja meg a forrás elérési útját és a fájl nevét a --file
paraméterrel, valamint a céltároló nevét a --container-name
paraméterrel. A paramétert is meg kell adnia --account-name
. Ez a parancs létrehoz egy új blobot, vagy felülírja az eredeti blobot, ha már létezik.
A parancs használatával az storage blob upload-batch
rekurzív módon feltölthet több blobot egy tárolóba. A Unix fájlnévminta egyeztetésével megadhat egy fájltartományt, amelyet fel szeretne tölteni a --pattern
paraméterrel. A támogatott minták a következők*
: , ?
[seq]
és [!seq]
. További információkért tekintse meg a Unix-fájlnévminta-egyeztetés Python-dokumentációját.
Az alábbi példában az első művelet a az storage blob upload
parancs használatával tölt fel egyetlen, elnevezett fájlt. A forrásfájl és a céltároló tárolója a --file
paraméterekkel együtt --container-name
van megadva.
A második művelet azt mutatja be, hogy a az storage blob upload-batch
parancs több fájl feltöltésére használható. A --if-modified-since
paraméter biztosítja, hogy csak az elmúlt hét napon belül módosított fájlok legyenek feltöltve. A paraméter által megadott értéket UTC formátumban kell megadni.
#!/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
Blobok listázása
Alapértelmezés szerint a parancs felsorolja a az storage blob list
tárolóban tárolt összes blobot. A keresés hatókörének finomításához különböző megközelítéseket használhat. A tárfiókok tárolóinak vagy blobjainak száma nincs korlátozva. A több ezer blob lekérésének elkerülése érdekében érdemes korlátozni a visszaadott adatok mennyiségét.
--prefix
A paraméterrel kijelölhet egyetlen ismert fájlt vagy egy olyan fájltartományt, amelynek a neve egy meghatározott sztringgel kezdődik. A paraméter részeként --prefix
megadhat egy virtuális könyvtárat.
Alapértelmezés szerint csak a blobok jelennek meg egy listaelem-műveletben. Bizonyos esetekben érdemes lehet átadni egy értéket a --include
paraméternek, amely további típusú objektumokat, például helyreállíthatóan törölt blobokat, pillanatképeket és verziókat ad vissza. Ezek az értékek kombinálhatók több objektumtípus visszaadásához.
A --num-results
paraméter a tárolóból visszaadott blobok számának korlátozására használható. Az összes Azure-erőforrásra 5000 szolgáltatási korlát vonatkozik. Ez a korlát biztosítja, hogy kezelhető mennyiségű adat legyen lekérve, és hogy a teljesítmény ne legyen hatással a teljesítményre. Ha a visszaadott blobok száma meghaladja az értéket vagy a --num-results
szolgáltatási korlátot, a rendszer egy folytatási jogkivonatot ad vissza. Ez a jogkivonat lehetővé teszi, hogy több kérést használjon tetszőleges számú blob lekéréséhez. További információ a bloberőforrások számbavételéről.
Az alábbi példa számos módszert mutat be a blobok listájának megadására. Az első megközelítés egy adott tárolóban lévő összes blobot felsorolja. A második megközelítés a paraméterrel --prefix
listáz minden olyan blobot a tárolókban, amelyek a megadott előtaggal kezdődnek. A harmadik megközelítés a paramétert használja a --num-results
visszaadott eredmények korlátozására, a paraméter pedig --show-next-marker
a folytatási jogkivonatot az eredményekbe való belefoglalására. Ha egy folytatási jogkivonat jelenik meg az eredményekben, a rendszer a következő hívásnak az storage blob list
továbbítja a következő eredménykészlet lekéréséhez.
További információ: az az storage bloblist reference.
#!/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
Blob letöltése
A használati esettől függően a blobok letöltéséhez használhatja a parancsot vagy az storage blob download-batch
a az storage blob download
parancsot. Az egyes blobok letöltéséhez hívja meg közvetlenül a az storage blob download
parancsot, és adja át a --container-name
, --file
és --name
paraméterek értékeit. A blob alapértelmezés szerint le van töltve a rendszerhéj könyvtárába, de megadhat egy másik helyet. Ha a megadott elérési út nem létezik, a művelet sikertelen lesz.
Ha több blobot szeretne rekurzív módon letölteni egy tárolóból, használja a az storage blob download-batch
parancsot. Ez a parancs támogatja a Paraméterrel egyező Unix fájlnévmintát --pattern
. A támogatott minták a következők*
: , ?
[seq]
és [!seq]
. További információkért tekintse meg a Unix-fájlnévminta-egyeztetés Python-dokumentációját.
Az alábbi mintakód egy és több letöltési módszert is mutat be. Emellett egyszerűsített módszert is kínál az összes tárolóban egy helyettesítő karakter használatával adott fájlok keresésére. Mivel egyes környezetek több ezer erőforrással rendelkezhetnek, a --num-results
paraméter használata ajánlott.
További információ: az az storage blob download and az storage blob download batch reference.
#!/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
Blobtulajdonságok és metaadatok kezelése
A blobok a rendszertulajdonságokat és a felhasználó által definiált metaadatokat is elérhetővé teszik. A rendszertulajdonságok minden Blob Storage-erőforráson léteznek. Egyes tulajdonságok írásvédettek, míg mások írásvédettek vagy beállíthatók. A borítók alatt egyes rendszertulajdonságok bizonyos szabványos HTTP-fejlécekre vannak leképezve.
A felhasználó által definiált metaadatok egy vagy több, a Blob Storage-erőforráshoz megadott név-érték párból állnak. Metaadatok használatával további értékeket tárolhat az erőforrással. A metaadat-értékek saját célra szolgálnak, és nem befolyásolják az erőforrás viselkedését.
Blobtulajdonságok olvasása
A blob tulajdonságainak vagy metaadatainak olvasásához először le kell kérnie a blobot a szolgáltatásból. az storage blob show
A parancs használatával lekérheti a blob tulajdonságait és metaadatait, a tartalmát azonban nem. Az alábbi példa lekéri a blobot, és felsorolja annak tulajdonságait.
További információ: az az storage blob show reference.
#!/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
Blob metaadatainak olvasása és írása
A blob metaadatai a blobhoz társított név-érték párok választható készletei. Ahogy az előző példában is látható, a blobokhoz kezdetben nincsenek metaadatok társítva, de szükség esetén hozzáadható. Az olvasáshoz használja a az storage blob metadata show
parancsot. A blob metaadatainak frissítéséhez kulcs-érték párokat fog használni az storage blob metadata update
és megadni. További információkért tekintse meg az az storage blob metaadatainak hivatkozását .
További információkért tekintse meg az az storage blob metaadatainak hivatkozását .
Az alábbi példa először frissíti, majd véglegesíti egy blob metaadatait, majd lekéri.
#!/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
Blobok másolási műveletei
Számos forgatókönyv van, amelyekben különböző típusú blobok másolhatók. A cikkben szereplő példák a blobok blokkolására korlátozódnak. Az Azure CLI olyan parancsokat kínál, amelyek a követelményektől függően egy erőforráson vagy több erőforráson hajtanak végre műveleteket.
Egy adott blob másolásához használja a parancsot, és adja meg a az storage blob copy start
forrás- és céltárolók és blobok értékeit. Forrásként egységes erőforrás-azonosítót (URI), megosztást vagy közös hozzáférésű jogosultságkódot (SAS) is megadhat.
Megadhatja a blob másolásának feltételeit is. Ezek a feltételek a forrás- vagy célblobra is beállíthatók. Hivatkozhat az utolsó módosított dátumra, címkeadatokra vagy ETag-értékre. Dönthet például úgy, hogy a legutóbb nem módosított blobokat külön tárolóba másolja. További információ: Feltételes fejlécek megadása blobszolgáltatás-műveletekhez.
A parancs használatával az storage blob copy start-batch
több blobot is újrakurzívan másolhat ugyanazon tárfiók tárolói között. Ez a parancs a paraméterek és --destination-container
a --source-container
paraméterek értékeit igényli, és az összes fájlt átmásolhatja a forrás és a cél között. A parancssori felület más kötegelt parancsaihoz hasonlóan ez a parancs is támogatja a --pattern
paraméterrel egyező Unix-fájlnévmintát. A támogatott minták a következők*
: , ?
[seq]
és [!seq]
. További információkért tekintse meg a Unix-fájlnévminta-egyeztetés Python-dokumentációját.
Feljegyzés
Fontolja meg az AzCopy használatát az egyszerűség és a teljesítmény érdekében, különösen akkor, ha blobokat másol a tárfiókok között. Az AzCopy egy parancssori segédprogram, amellyel blobokat és fájlokat másolhat a tárfiókok között. További információ az AzCopy használatának első lépéseiről.
További információkért lásd az az storage blob másolási referenciát.
Az alábbi mintakód egy és több másolási műveletre is mutat példát. Mivel egyes környezetek több ezer erőforrással rendelkezhetnek, a --num-results
paraméter használata ajánlott. Az első példa átmásolja a secret-town-road.png blobot a fényképek tárolójából a helyek tárolóba. Mindkét tároló ugyanabban a tárfiókban található. Az eredmény ellenőrzi a másolási művelet sikerességét.
#!/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
Pillanatkép-blobok
Az alapblobhoz társított bérletek nem befolyásolják a pillanatképet. Pillanatképen nem szerezhet be bérletet. További információ a Blob-pillanatképekről. További információ: az az storage blob snapshot reference .
Az alábbi mintakód lekéri a blobot egy tárolóból, és pillanatképet hoz létre róla.
#!/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
Blobszint beállítása
Amikor módosítja egy blob szintjét, áthelyezi a blobot és annak összes adatát a célszintre. A paranccsal módosíthatja a réteget a gyakori elérésű, a ritka elérésű és az az storage blob set-tier
archiválás között.
A követelményektől függően a Blob másolása művelettel is másolhat blobokat az egyik rétegből a másikba. A Blob másolása művelet létrehoz egy új blobot a kívánt szinten, miközben a forrásblob az eredeti szinten marad.
A ritka elérésű vagy a gyakori elérésűről az archív szintre való váltás szinte azonnal megtörténik. Miután a blob átkerül az archív szintre, offline állapotúnak minősül, és nem olvasható és nem módosítható. Mielőtt elolvashatja vagy módosíthatja egy archivált blob adatait, újra kell hidratálnia azokat egy online szintre. További információ a blobrehidratálásról az archív szintről.
További információ: az az storage blob set-tier reference.
Az alábbi mintakód a tárolóban lévő egyetlen, elnevezett blob esetében állítja be a archive
szintet gyakori elérésűre.
#!/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
Blobcímkéket használó műveletek
A blobindexcímkék megkönnyítik az adatkezelést és a felderítést. A blobindex-címkék felhasználó által definiált kulcs-érték index attribútumok, amelyeket a blobokra alkalmazhat. A konfigurálás után kategorizálhatja és megkeresheti az objektumokat egy adott tárolóban vagy az összes tárolóban. A bloberőforrások dinamikusan kategorizálhatók az indexcímkék frissítésével anélkül, hogy módosítást kellene igényelniük a tárolószervezetben. Ez a megközelítés rugalmas módot kínál a változó adatkövetelmények kezelésére. Egyszerre használhat metaadat- és indexcímkéket is. További információ az indexcímkékről: Azure Blob-adatok kezelése és megkeresése blobindexcímkékkel.
Tipp.
Az alábbi kódminta mintamegfeleltetés használatával kér le szöveget egy ismert struktúrával rendelkező XML-fájlból. A példa a blobcímkék egyszerű Bash-funkcióval történő hozzáadásának egyszerűsített megközelítését szemlélteti. A tényleges adatelemző eszköz használata mindig ajánlott az éles számítási feladatokhoz szükséges adatok felhasználásakor.
Az alábbi példa bemutatja, hogyan adhat hozzá blobindexcímkéket blobok sorozatához. A példa adatokat olvas be egy XML-fájlból, és arra használja, hogy indexcímkéket hozzon létre több blobon. A mintakód használatához hozzon létre egy helyi blob-list.xml fájlt a C:\temp könyvtárban. Az XML-adatok alább olvashatók.
További információ: az az storage blob set-tier reference.
<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>
A mintakód iterálja az XML-fájl sorait. Megkeresi a Helyszín elemet, és változókat hoz létre a Név és a Típus értékhez. Ezután végigvezeti a fennmaradó sorokat, és címkéket hoz létre a csomópontok által File
hivatkozott blobokhoz.
#!/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
Blobok törlése
A parancsokkal az storage blob delete
az storage blob delete-batch
egyetlen blobot vagy blobsorozatot is törölhet. Több blob törlésekor használhat feltételes műveleteket, hurkokat vagy egyéb automatizálásokat az alábbi példákban látható módon.
Figyelmeztetés
Az alábbi példák futtatása véglegesen törölheti a blobokat. A Microsoft javasolja a tárolók helyreállítható törlésének engedélyezését a tárolók és blobok véletlen törlés elleni védelméhez. További információ: Tárolók helyreállítható törlése.
Az alábbi mintakód egyéni és kötegelt törlési műveletekre is mutat példát. Az első példa egyetlen blobot töröl. A második példa azt szemlélteti, hogy a Bashben a logikai műveletek több blob törlésére használhatók. A harmadik példa a bennett-x formátumú blobok törlésére használja a delete-batch
parancsot, kivéve a bennett-2 formátumot.
További információkért tekintse meg az az storage blob delete és az az storage blob delete-batch referenciát.
#!/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
Bizonyos esetekben lehetséges a törölt blobok lekérése. Ha a tárfiók helyreállítható törlési adatvédelmi lehetősége engedélyezve van, a paraméter átadása a --include d
fiók megőrzési időszakán belül törölt blobokat adja vissza. A helyreállítható törléssel kapcsolatos további információkért tekintse meg a blobok helyreállítható törléséről szóló cikket.
Az alábbi példák segítségével lekérheti a tárolóhoz társított megőrzési időszakon belül törölt blobok listáját. Az első példa megjeleníti az összes legutóbb törölt blob listáját, valamint azokat a dátumokat, amelyeken törölték őket. A második példa felsorolja az összes törölt blobot, amelyek megfelelnek egy adott előtagnak.
#!/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}"
Törölt blob visszaállítása
A Blobok listája szakaszban leírtaknak megfelelően konfigurálhatja a helyreállítható törlési adatvédelmi beállítást a tárfiókban. Ha engedélyezve van, a kapcsolódó megőrzési időszakon belül törölt tárolók visszaállíthatók. Verziószámozással is fenntarthatja a blobok korábbi verzióit minden helyreállításhoz és helyreállításhoz.
Ha a blob verziószámozása és a blob helyreállítható törlése is engedélyezve van, akkor a blobok módosítása, felülírása, törlése vagy visszaállítása automatikusan létrehoz egy új verziót. A törölt blobok visszaállításához használt módszer attól függ, hogy engedélyezve van-e a verziószámozás a tárfiókban.
Az alábbi kódminta visszaállítja az összes helyreállíthatóan törölt blobot, vagy ha engedélyezve van a verziószámozás, visszaállítja a blob legújabb verzióját. Először meghatározza, hogy a verziószámozás engedélyezve van-e a az storage account blob-service-properties show
paranccsal.
Ha engedélyezve van a verziószámozás, a parancs lekéri az az storage blob list
összes egyedileg elnevezett blobverzió listáját. Ezután a lista blobverziói dátum szerint lesznek lekérve és rendezve. Ha az attribútumértékkel isCurrentVersion
nem található verzió, a az storage blob copy start
parancs a blob legújabb verziójának aktív másolatát készíti el.
Ha a verziószámozás le van tiltva, a az storage blob undelete
parancs a tárolóban lévő összes helyreállíthatóan törölt blob visszaállítására szolgál.
A példa követéséhez engedélyeznie kell a helyreállítható törlést legalább egy tárfiókon. A helyreállítható törlés adatvédelmi beállításával kapcsolatos további információkért tekintse meg a blobok helyreállítható törléséről szóló cikket vagy az az storage blob undelete hivatkozását .
#!/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