Linux
找不到 Blob:使用 linux 腳本將 tar.gz 上傳到 Azure 儲存容器時出錯
錯誤
門戶顯示此
Blob not found.
錯誤這是我按下
download
按鈕時遇到的 XML 錯誤<Error> <Code>ResourceNotFound</Code> <Message> The specified resource does not exist. RequestId:bea21dfd-0001-004f-26e0-220af6000000 Time:2015-11-19T15:38:55.9836819Z </Message> </Error>
背景
我一直在嘗試實施一種解決方法來在 Azure 中備份我的 IaaS v2 Ubuntu VM。多虧了我最近在 Server Fault 上收到的一個很好的答案,我決定最好的方法就是使用 tar 和 cronjob 定期備份我的伺服器。
因此,我在 google 上搜尋了“linux azure VM 上的 tar 備份”——這讓我看到了這篇文章,即:如何在不關閉 VM 的情況下在 Azure 上進行 Linux 備份。
本教程概述了執行 tar 命令的過程,然後使用列出的憑據將 tar 上傳到 azure 儲存容器。這是有問題的腳本:
#!/bin/bash # full system backup # Backup destination backdest=/opt/backup # Labels for backup name pc=${HOSTNAME} distro=`uname -a | awk '{print $4}'` type=full date=$(date "+%F") backupfile="$backdest/$distro-$type-$date.tar.gz" username=`whoami` #blob storage variables storageAccountName=storageaccountname storageAccountKey=mylongassstoragekey storageContainer=backupcontainername # Exclude file location prog=${0##*/} # Program name from filename excdir=`pwd` exclude_file="$excdir/$prog-exc.txt" #check backup destination is there if [ ! -d "$backdest" ]; then mkdir -p $backdest fi # Check if exclude file exists if [ ! -f $exclude_file ]; then echo "checking exclude $exclude_file" echo -n "No exclude file exists, continue? (y/n): " read continue if [ $continue == "n" ]; then exit; fi fi #don't use nohup we want to make this blocking tar --exclude-from=$exclude_file -czpvf $backupfile / #after tar is finished move to blob storage azure storage blob upload -a $storageAccountName --container $storageContainer -k $storageAccountKey $backupfile echo "all done!"
一切似乎都很順利,腳本執行備份,然後將 tar.gz 作為塊 blob 上傳。但是,正如您從上面的錯誤中看到的那樣,沒有找到 Blob。儲存容器設置為“Container”(相對於“Private”)。
我什至不知道如何開始對此進行故障排除。我該怎麼辦?任何幫助將不勝感激。非常感謝!
解決了這個問題。這裡有幾個問題:
- 該腳本使用以 開頭的文件名創建 blob,而文件名
$distro
恰好以URI 字元開頭#
,這是一個保留的 URI 字元。我更改了腳本,使其看起來更相似$type_$date
。- 儲存 blob 命令失敗(靜默),因為腳本沒有以
sudo
特權執行它們。我所要做的就是添加sudo
和呼叫,一切正常tar
!azure storage
Blob 名稱要求您轉義保留的 URL 字元。您的 blob 名稱以 a 開頭,
#
這是一個保留的 URL 字元。我懷疑當您刪除該字元(或轉義它)時問題會自行解決。注意:我還沒有通過獨立測試證實這一點,但這是我第一次看到帶有#
字元的 blob 名稱……有關 blob 命名的更多資訊在這裡。