De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Backup de sistemas

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 14 de outubro de 2010

Em caso de problemas com sistemas é sempre recomendável ter uma estratégia de recuperação rápida. Muitos administradores preferem reinstalar tudo. Esta estratégia, embora interessante, é demorada e propensa a falhas. Todos os aplicativos precisam ser reconfigurados, as coisas podem não funcionar imediatamente, enfim, problemas não faltarão.

Uma estratégia que uso há muitos anos, e com vários tipos de sistemas operacionais, como aix (comando mksysb), SunOS, Solaris, etc. é fazer um arquivo contendo os binários do sistema operacional. Este arquivo precisa ser atualizado apenas quando instalamos produtos novos ou fazemos algum tipo de manutenção. Em plataforma intel, é conveniente também fazer uma cópia do MBR (Master Boot Record), que contém, entre outras coisas, informações de particionamento do disco.

O script backupsys, de autoria de Martin Matusiak, pode ser usado para esta finalidade. Além do script em si, você precisa criar um arquivo contendo a lista dos diretórios a serem excluídos de seu backup. O nome deste arquivo possui o sufixo lst, e contém algo como:

  /
  --exclude=/cdrom/*
  --exclude=/home/*
  --exclude=/media/*
  --exclude=/mnt/*
  --exclude=/proc/*
  --exclude=/root/*
  --exclude=/sys/*
  --exclude=/tmp/*
  --exclude=/backup/*
  --exclude=/var/log/*

O nome dos arquivos gerados terá como prefixo (basename) o nome do sufixo adotado para o arquivo lst. Por exemplo, se o arquivo lst se chamar snoopy.lst todos os arquivos gerados terão o prefixo snoopy.

Neste backup, que é feito para uma recuperação rápida, não vale a pena incluir arquivos de log, fila de emails, etc, pois seu objetivo é apenas restaurar o sistema rapidamente. Os dados e outras informações, devem ser armazenados de outra forma.

O script backupsys que usamos, com modificações para realizar o backup do mbr, está reproduzido a seguir:

  #!/bin/bash
  #
  # Author: Martin Matusiak <numerodix@gmail.com>
  # Licensed under the GNU Public License, version 3.
  #
  # Modified: Diego
  # - MBR backup
  
  backup_dir=/home/backup
  num_backups=2	# Max number of backups (if it has more than that, the older is deleted)
  
  
  verbose="$@"
  lists=$backup_dir/*.lst
  ext=tgz
  date_params="%Y-%m-%d-%H%M"
  nice_val="nice -n20"
  
  # colors
  wh="\e[1;37m"
  pl="\e[m"
  ye="\e[1;33m"
  cy="\e[1;36m"
  re="\e[1;31m"
  
  if [[ "$verbose" && "$verbose" != "-v" ]]; then
  	echo "Usage:  $0 [-v]"
  	exit 1
  fi
  
  if [ ! -d $backup_dir ]; then
  	echo -e "${re}Backup dir $backup_dir does not exist.${pl}"; exit 1
  fi
  
  for list in $(ls $lists); do
  	name=$(basename $list .lst)
  	file_root=$backup_dir/$name.$(date +$date_params)
  	
  	stdout="1> /dev/null"
  	stderr="2> $file_root.$ext.err"
  	if [ "$verbose" ]; then
  		stdout=""
  	fi
  
  	echo -n "Making MBR backup... "
  	dd if=/dev/sda of=$file_root.mbr bs=512 count=1
  	if [ $? -eq 0 ]; then
  		echo "OK"
  	else
  		echo "FAIL"
  	fi	
  	
  	cmd="cat $list | $nice_val xargs tar zlcfv \
  		$file_root.$ext $stderr | tee $file_root.$ext.log $stdout"
  
  	trap 'echo -e "${re}Received exit signal${pl}"; exit 1' INT TERM
  
  	echo " * Running \`$name\` job..."
  	if [ "$verbose" ]; then echo -e ${ye}$cmd${pl}; fi
  	echo -en $cy; bash -c "$cmd" ; echo -en $pl
  	status_code=$?
  
  	if [ $status_code -gt 0 ]; then
  		# Dump error log
  		echo -en $re ; cat $file_root.$ext.err
  		echo -en $pl ; echo "Tar exit code: $status_code"
  	else
  		# Kill error file
  		rm $file_root.$ext.err
  	fi
  
  	# Evict old backups we don't want to keep
  	num=$num_backups
  	for evict in $(ls -t $backup_dir/$name.*.$ext); do
  		if [ $num -le 0 ]; then 
  			rm -f "$evict"
  		else
  			num=$(($num-1))
  		fi
  	done
  
  	# Report number of files in backup
  	echo -n "$(wc -l < $file_root.$ext.log) files"
  	echo ", $(ls -l $file_root.$ext | awk '{ print $5 }') bytes"
  
  done

Ao final da execução teremos os seguintes arquivos:

hostname.2010-10-05-0843.tgz.log arquivo contendo o log de execução do script
hostname.2010-10-05-0843.mbr arquivo contendo o MBR do servidor
hostname.2010-10-05-0843.tgz arquivo compactado com o sistema operacional

O valor hostname será substituido pelo prefixo do arquivo terminado em lst. Leia também o artigo original, easy peasy full system backup. Veja também o script original.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Rubens Queiroz de Almeida