Pesquisa de site

Como criar um plano de backup personalizado para Debian com backupninja


Backupninja é uma ferramenta de backup poderosa e altamente configurável para distribuições baseadas em Debian. No tutorial anterior, exploramos como instalar o backupninja e como configurar duas ações de backup para o programa executar. No entanto, devemos observar que esses exemplos foram apenas "a ponta do iceberg", por assim dizer. Nesta postagem, discutiremos como alavancar manipuladores e auxiliares personalizados que permitem que este programa seja personalizado para realizar praticamente qualquer necessidade de backup que você possa imaginar.

E acredite em mim - isso não é exagero, então vamos começar.

Uma Revisão Rápida do Backupninja

Uma das características distintivas do backupninja é o fato de que você pode simplesmente colocar a configuração de texto simples ou arquivos de ação em /etc/backup.d, e o programa cuidará do resto. Além disso, podemos escrever scripts personalizados (também conhecidos como "manipuladores") e colocá-los em /usr/share/backupninja para lidar com cada tipo de ação de backup. Além disso, podemos executar esses scripts por meio dos menus interativos baseados em ninjahelper do ncurses (também conhecidos como "helpers") para nos guiar na criação dos arquivos de configuração mencionados anteriormente, minimizando as chances de erro humano.

Criando um manipulador e um auxiliar personalizados

Nosso objetivo neste caso é criar um script para manipular o backup dos diretórios home escolhidos em um tarball com compactação gzip ou bzip2, excluindo arquivos de música e vídeo. Simplesmente nomearemos esse script como home e o colocaremos em /usr/backup/ninja.

Embora você possa atingir o mesmo objetivo com o manipulador padrão tar (consulte /usr/share/backupninja/tar e /usr/share/backupninja/tar. helper), usaremos essa abordagem para mostrar como criar um script manipulador útil e um auxiliar baseado em ncurses a partir do zero. Você pode então decidir como aplicar os mesmos princípios, dependendo de suas necessidades específicas.

Observe que, como os manipuladores são provenientes do script principal, não há necessidade de começar com #!/bin/bash no topo.

Nosso manipulador proposto (/usr/share/backupninja/home) é o seguinte. É fortemente comentado para esclarecimento. A função getconf é usada para ler o arquivo de configuração da ação de backup. Se você especificar um valor para uma variável aqui, ela substituirá o valor correspondente presente no arquivo de configuração:


# home handler script for backupninja

# Every backup file will identify the host by its FQDN
getconf backupname

# Directory to store backups
getconf backupdir

# Default compression
getconf compress

# Include /home directory
getconf includes

# Exclude files with *.mp3 and *.mp4 extensions
getconf excludes

# Default extension for the packaged backup file
getconf EXTENSION

# Absolute path to date binary
getconf  TAR `which tar`

# Absolute path to date binary
getconf    DATE    `which date`

# Chosen date format
DATEFORMAT="%Y-%m-%d"

# If backupdir does not exist, exit with fatal error
if [ ! -d "$backupdir" ]
then
   mkdir -p "$backupdir" || fatal "Can not make directory $backupdir"
fi

# If backupdir is not writeable, exit with fatal error as well
if [ ! -w "$backupdir" ]
then
   fatal "Directory $backupdir is not writable"
fi

# Set the right tar option as per the chosen compression format
case $compress in
   "gzip")
     compress_option="-z"
      EXTENSION="tar.gz"
    ;;
   "bzip")
      compress_option="-j"
      EXTENSION="tar.bz2"
   ;;
   "none")
      compress_option=""
    ;;
   *)
     warning "Unknown compress filter ($tar_compress)"
     compress_option=""
    EXTENSION="tar.gz"
    ;;
esac

# Exclude the following file types / directories
exclude_options=""
for i in $excludes
do
   exclude_options="$exclude_options --exclude $i"
done

# Debugging messages, performing backup
debug "Running backup: " $TAR -c -p -v $compress_option $exclude_options 
   -f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" 
   $includes

# Redirect standard output to a file with .list extension
# and standard error to a file with .err extension
$TAR -c -p -v $compress_option $exclude_options 
   -f "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`".$EXTENSION" 
   $includes 
   > "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`.list 
   2> "$backupdir/$backupname-"`$DATE "+$DATEFORMAT"`.err

[ $? -ne 0 ] && fatal "Tar backup failed"

Em seguida, criaremos nosso arquivo auxiliar (/usr/share/backupninja/home.helper) para que nossos manipuladores apareçam como um menu em ninjahelper:


# Backup action's description. Separate words with underscores.
HELPERS="$HELPERS home:backup_of_home_directories"

home_wizard() {
   home_title="Home action wizard"

   backupname=`hostname --fqdn`

# Specify default value for the time when this backup actions is supposed to run
   inputBox "$home_title" "When to run this action?" "everyday at 01"
   [ $? = 1 ] && return
   home_when_run="when = $REPLY"

# Specify default value for backup file name
   inputBox "$home_title" ""Name" of backups" "$backupname"
   [ $? = 1 ] && return
   home_backupname="backupname = $REPLY"
   backupname="$REPLY"

# Specify default directory to store the backups
   inputBox "$home_title" "Directory where to store the backups" "/var/backups/home"
   [ $? = 1 ] && return
   home_backupdir="backupdir = $REPLY"

# Specify default values for the radiobox
   radioBox "$home_title" "Compression" 
     "none"    "No compression" off 
       "gzip"    "Compress with gzip" on 
    "bzip"    "Compress with bzip" off
   [ $? = 1 ] && return;
   result="$REPLY"
   home_compress="compress = $REPLY "

   REPLY=
   while [ -z "$REPLY" ]; do
    formBegin "$home_title: Includes"
         formItem "Include:" /home/gacanepa
    formDisplay
     [ $? = 0 ] || return 1
      home_includes="includes = "
   for i in $REPLY; do
         [ -n "$i" ] && home_includes="$home_includes $i"
    done
   done

   REPLY=
   while [ -z "$REPLY" ]; do
      formBegin "$home_title: Excludes"
         formItem "Exclude:" *.mp3
         formItem "Exclude:" *.mp4
         # Add as many “Exclude” text boxes as needed to specify other exclude options
formItem "Exclude:"
      formItem "Exclude:"
   formDisplay
     [ $? = 0 ] || return 1
      home_excludes="excludes = "
   for i in $REPLY; do
         [ -n "$i" ] && home_excludes="$home_excludes $i"
    done
   done

# Save the config
   get_next_filename $configdirectory/10.home
   cat > $next_filename <<EOF
$home_when_run
$home_backupname
$home_backupdir
$home_compress
$home_includes
$home_excludes

# tar binary - have to be GNU tar
TAR    `which tar`
DATE    `which date`
DATEFORMAT     "%Y-%m-%d"
EXTENSION    tar

EOF
# Backupninja requires that configuration files be chmoded to 600
   chmod 600 $next_filename
}

Executando Ninjahelper

Assim que tivermos criado nosso script manipulador chamado home e o auxiliar correspondente chamado home.helper, vamos executar o comando ninjahelper para criar uma nova ação de backup:


# ninjahelper

E escolha criar uma nova ação de backup.

Agora seremos apresentados aos tipos de ação disponíveis. Vamos selecionar "backup de diretórios pessoais":

As próximas telas mostrarão os valores padrão definidos no helper (somente 3 deles são mostrados aqui). Sinta-se à vontade para editar os valores na caixa de texto. Particularmente, consulte a seção de agendamento da documentação para obter a sintaxe correta para a variável quando.

Quando terminar de criar a ação de backup, ela aparecerá no menu inicial do ninjahelper:

Então você pode pressionar ENTER para mostrar as opções disponíveis para esta ação. Sinta-se à vontade para experimentá-los, pois sua descrição é bastante direta.

Particularmente, "executar esta ação agora" executará a ação de backup no modo de depuração imediatamente, independentemente do horário agendado:

Se a ação de backup falhar por algum motivo, a depuração exibirá uma mensagem informativa para ajudá-lo a localizar o erro e corrigi-lo. Considere, por exemplo, as seguintes mensagens de erro que foram exibidas após a execução de uma ação de backup com bugs ainda não corrigidos:

A imagem acima informa que a conexão necessária para concluir a ação de backup não pôde ser concluída porque o host remoto parece estar inoperante. Além disso, o diretório de destino especificado no arquivo auxiliar não existe. Depois de corrigir os problemas, execute novamente a ação de backup.

Algumas coisas para lembrar:

  • Se você criar um script personalizado em /usr/share/backupninja (por exemplo, foobar) para lidar com uma ação de backup específica, também precisará escrever um auxiliar correspondente (por exemplo, foobar.helper) para criar, através de ninjahelper, um arquivo chamado 10.foobar (11 em diante também para outras ações) em /etc/backup.d, que é o arquivo de configuração real para a ação de backup.

  • Você pode executar seus backups a qualquer momento por meio do ninjahelper conforme explicado anteriormente, ou executá-los conforme a frequência especificada na variável quando.

Resumo

Nesta postagem, discutimos como criar nossas próprias ações de backup do zero e como adicionar um menu relacionado em ninjahelper para facilitar a criação de arquivos de configuração. Com o artigo backupninja anterior e o presente, espero ter dado a você bons motivos para seguir em frente e pelo menos tentar.

Feliz backup!

Artigos relacionados: