Mudança de fita de Bacula

2

Como posso fazer com que o Bacula mova a fita para o slot de IO após ter executado um trabalho específico?

Eu corri backups diários com o Bacula desde alguns dias e fiquei me perguntando se eu posso fazer esse tipo de coisa. Eu já especifiquei a diretiva UseVolumeOnce = yes nos arquivos de configuração, mas agora eu quero saber se posso fazer com que Bacula mova a fita para o slot 24 (slot de E / S) quando a tarefa terminar.

O bacula pode fazer isso ou eu preciso fazer o script dele? Se eu precisar fazer script, você tem experiência com isso?

    
por Gert M 12.05.2009 / 09:17

3 respostas

2

Sem ter o mesmo ambiente para testar, não tenho certeza se isso funcionará, mas um script como esse chamado por meio da diretiva RunAfterJob no bacula-dir.conf deve funcionar:

#!/bin/sh
#
echo "unmount <device-name>" | <bacula-path>/bconsole -c bconsole.conf

Se você quiser evitar a chamada de scripts externos, experimente as diretivas AlwaysOpen, RequiresMount / MountCommand / UnmountCommand e / ou OfflineOnUnmount. Todos estes estão no recurso Dispositivo da sua configuração do Daemon de Armazenamento.

Além disso, você pode esclarecer por que isso é desejável para você? Talvez haja uma solução para o problema raiz que estamos negligenciando.

    
por 27.05.2009 / 21:51
2

Eu configurei um trabalho de administração chamado Eject que executa o seguinte script na prioridade 1000, portanto, ele é executado assim que todos os backups forem concluídos:

Você também pode executá-lo como uma opção "RunAfterJob" para um trabalho específico.

#!/bin/bash

MAXATTEMPTS=3
STORAGE=StorageName
DEVICE=/dev/sg3
CODE=0

OUT='mktemp /tmp/XXXXXX'

###########################################################################
## Eject the tape from the drive and determine which slot it ended up in ##
###########################################################################
STATUS=1
ATTEMPT=0
while [ $STATUS -ne 0 ] && [ $ATTEMPT -lt $MAXATTEMPTS ]; do
  echo "umount Storage=$STORAGE"|/usr/sbin/bconsole >> $OUT
  if ( grep "Command Failed" $OUT > /dev/null ); then
    STATUS=1  
    echo "Command Failed!"
    rm $OUT
  else
    STATUS=0
    cat $OUT
  fi
  ATTEMPT=$(( $ATTEMPT + 1 ))
done
SLOT='tac $OUT|grep -m1 3307|cut -d" " -f6|cut -d, -f1'  # Find the last occurrence of the success message only
rm $OUT

if [ "x$SLOT" = "x" ] || [ $STATUS -ne 0 ]; then
  echo "ERROR: Unable to unmount drive after $ATTEMPT attempts"
  exit 1
else
  echo "Slot $SLOT unloaded from Drive-0 "
fi

###########################################
## Move the ejected tape to the I/O slot ##
###########################################
STATUS=1
ATTEMPT=0
while [ $STATUS -ne 0 ] && [ $ATTEMPT -lt $MAXATTEMPTS ]; do
  /usr/sbin/mtx -f $DEVICE transfer $SLOT 24
  STATUS=$?
  ATTEMPT=$(( $ATTEMPT + 1 ))
done
if [ $STATUS -ne 0 ]; then
  echo "ERROR: Unable to move tape from slot $SLOT to I/O after $ATTEMPT attempts"
  CODE=2
else
  echo "Tape moved from slot $SLOT to I/O"
fi

#################################
## Ensure the DB is up to date ##
#################################
echo "update slots Storage=$STORAGE"|/usr/sbin/bconsole > /dev/null
if [ $CODE -ne 0 ]; then
  exit $CODE
fi
    
por 09.07.2009 / 22:17
0

Você tem que fazer o script, mas a combinação do Bacula e uma versão recente do MTX faz com que isso não seja muito doloroso.

Dê uma olhada nos parâmetros "Executar antes do trabalho" e "Executar após o trabalho" e "Emprego" para chamar o script que você escreveu. Nós tendemos a favorecer a chamada de um script que executa um comando no bconsole (através do redirecionamento de entrada) para desmontar o volume da sua fita, e depois chamar o MTX para mover a fita.

    
por 27.05.2009 / 21:38