azure 正在提取存储blob中的文件

jw5wzhpr  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(162)

我有一个500GB的VHD压缩到一个16GB的zip文件。由于公司计算机上的这个VHD的大小很大,我无法使用AzCopy解压缩并上传VHD到Azure Blob。我需要一种方法来上传压缩到Blob存储和提取VHD创建一个托管磁盘的形象。
当我看到PowerShell可用时,我认为存储容器将在我的帐户中类似于层次结构,这样我只需要导航到存储目录并运行解压命令或脚本。这似乎是不正确的,我无法从PowerShell执行命令来解压缩blob存储中的文件。
假设500GB的文件不能被压缩,并且您必须上传+解压缩16GB的zip文件,那么如何才能完成呢?

gmxoilav

gmxoilav1#

需要一种方法将zip上传到Blob存储并提取VHD以从映像创建托管磁盘。
注意,解压缩过程不是Azure Blob存储将为您执行的操作。你得自己处理这事。
您需要从blob存储中下载zip文件夹,并在那里解压缩它们,然后上载文件。
对于解决方法,您需要使用以下命令将zip文件夹上传到blob存储:

Connect-AzAccount -SubscriptionId "Your-subscriptionid"
$ctx = New-AzStorageContext -StorageAccountName "Your-storage-account" -UseConnectedAccount  
Set-AzStorageBlobContent -Container "your-container-name" -Context $ctx -File "C:\Users\v-vsettu\Downloads\abcd.zip" -Blob "wxyz.zip"

上传后,您可以使用下面的Python代码通过解压缩文件来上传文件,示例中我使用了1GB的文件。

验证码:

from azure.storage.blob import BlobServiceClient
import zipfile
import os
import time

blob_service_client = BlobServiceClient.from_connection_string("your-connection-string")
dir_path = r"your-extractionfolder"

container_client = blob_service_client.get_container_client("test2")
blob_client = container_client.get_blob_client("wxyz.zip")
#Downloading Zip to local system
with open("sample1.zip", "wb") as my_blob:
    download_stream = blob_client.download_blob()
    my_blob.write(download_stream.readall())
        
    #Extracting Zip Folder to path
    with zipfile.ZipFile("sample1.zip", 'r') as zip_ref:
        zip_ref.extractall(dir_path)
        
    #Reading and uploading Files to Storage account
    fileList = os.listdir(dir_path)
    for filename in fileList:
        container_client_upload = blob_service_client.get_container_client("test")
        blob_client_upload = container_client_upload.get_blob_client(filename)
        start=time.time()
        f = open(dir_path+'\\'+filename, 'r')
        byt = f.read()
        blob_client_upload.upload_blob(byt)
        end=time.time()
    print("Time taken to upload blob:", end - start, "secs")

输出:

门户:

**参考:**也可以参考这个unzip a file from blob storage to File share without using windows API - Microsoft Q&A

相关问题