Blob não encontrado: Erro ao carregar tar.gz para o contêiner de armazenamento do Azure usando o script linux

1

Erro

The portal displays this Blob not found. error

ThisistheXMLerrorIgetwhenIhitthedownloadbutton

<Error><Code>ResourceNotFound</Code><Message>Thespecifiedresourcedoesnotexist.RequestId:bea21dfd-0001-004f-26e0-220af6000000Time:2015-11-19T15:38:55.9836819Z</Message></Error>

Antecedentes

EutenhotentadoimplementarumasoluçãoalternativaparafazerobackupdaminhaVMUbuntudoIaaSv2noAzure.Graçasauma excelente resposta que recebi recentemente no Server Fault, decidi que o melhor caminho seria apenas fazer o backup do servidor periodicamente usando tar e um cronjob.

Então, eu pesquisei "backup tar no Linux azure VM" - o que me levou a este artigo , a saber: Como fazer backups do Linux no Azure sem desligar a VM .

O tutorial descreve um processo que executa o comando tar e, em seguida, envia o tar para um contêiner de armazenamento azul usando as credenciais listadas . Aqui está o script em questão:

#!/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!"

Tudo parece correr bem, o script executa o backup e, em seguida, carrega o tar.gz como um blob de bloco. Mas, como você pode ver no erro acima, o Blob não foi encontrado. O contêiner de armazenamento está definido como "Container" (em oposição a "Private").

Eu não tenho ideia de como começar a solucionar isso. O que eu faço? Qualquer tipo de ajuda seria apreciada. Muito obrigado!

    
por jonny 19.11.2015 / 16:50

2 respostas

0

Resolveu o problema. Coisas de casal em falta aqui:

  1. O script cria o blob com um nome de arquivo começando com $distro , que começa com o nome do arquivo com # , que é um caractere URI reservado. Eu mudei o script para que ele se parecesse com $type_$date .
  2. O comando blob de armazenamento estava falhando (silenciosamente) porque o script não os executava com sudo priveleges. Tudo o que precisei fazer foi adicionar sudo às chamadas tar e azure storage , e tudo funciona!
por 20.11.2015 / 10:49
1

Os nomes de blobs exigem que você escape de caracteres de URL reservados. Seu nome de blob começa com um # , que é um caractere de URL reservado. Eu suspeito que o problema irá se resolver quando você remover esse caractere (ou escapar dele). Observação: eu não confirmei isso com um teste independente, mas é a primeira vez que vejo um nome de blob com um caractere # ...

Mais informações sobre a nomenclatura de blob aqui .

    
por 20.11.2015 / 01:44