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 deninjahelper
, um arquivo chamado10.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ávelquando
.
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!