Backup do Samba 4
Introdução
Este documento visa a orientação para a configuração de backup dos dados de configurações do Samba4. Porém, não é uma solução para backup dos arquivos dos usuários, servidor de arquivos e etc. A efetivação destes procedimentos permite rápida restauração de um servidor samba com problemas ou implantação de um servidor novo baseado nas configurações restauradas de um anterior.
São utilizados scripts para a realização do backup e baseados em documentação oficial. A versão do samba que funciona corretamente com estes scripts é o Samba v4.0-v4.8. Para versões acima, existe outra abordagem oficial. Estes scripts podem funcionar no próprio host do samba que deve possuir um cliente de backup. Caso não seja possível instalar o cliente de backup, o script pode funcionar normalmente, mas após a geração dos arquivos de saída, estes devem ser enviados a um host intermediário que sofrerá o backup por meio de um cliente válido. Este segundo esquema pode ser representado pela seguinte figura:
Host seria o servidor samba4. O backup-gateway é o host intermediário que recebe os dados gerados pelo script de backup do samba e possui um cliente de backup válido. O servidor de backup é o Bacula, Bareos ou outro servidor desejado.
Backup do samba4
Preparação
Primeiro, tenha um usuário com permissões de administrador e crie um diretório no qual serão armazenados os arquivos gerados para backup. No caso, será utilizado o diretório /root/backup/samba
.
$ sudo mkdir /root/backup/samba -p
Realize o download do tarball do samba contendo o script de backup fornecido pelos desenvolvedores.
$ cd /usr/src
$ sudo wget http://ftp.samba.org/pub/samba/samba-latest.tar.gz
$ sudo tar -xvzf samba-latest.tar.gz
Encontre o script em questão:
$ find / -iname samba_backup
Deverá aparecer uma saída apontando esta localização. Onde "x.x" é a especificação da versão do samba no seu cenário:
/usr/src/samba-4.x.x/source4/scripting/bin/samba_backup
Copiar para um local adequado, exemplo: /root/scripts/:
$ sudo cp /usr/src/samba-4.8.4/source4/scripting/bin/samba_backup /root/scripts/
A partir daqui preste bastante atenção. Será necessário alterar variáveis no script original e posteriormente inserir um trecho de código se for o seu caso. Caso seu samba4 seja compilado, realize da seguinte maneira:
$ sudo nano /root/scripts/samba_backup
DIRS="private etc sysvol"
FROMWHERE=/usr/local/samba
WHERE=/root/backup/samba
Caso o seu samba4 seja instalado via pacotes de repositórios:
$ sydi nano /root/scripts/samba_backup
DIRS="private /etc/samba sysvol"
FROMWHERE=/var/lib/samba
WHERE=/root/backup/samba
Agora insira (cole) o seguinte trecho de código na linha 85 se o seu samba4 foi instalado via repositório de pacotes:
elif [ "$d" = "/etc/samba" ]; then
# Run the backup.
# --warning=no-file-ignored set to suppress "socket ignored" messages.
tar cjf ${WHERE}/${n}.${WHEN}.tar.bz2 $d --warning=no-file-ignored
Status=$? # Preserve $? for message, since [ alters it.
if [ $Status -ne 0 ]; then
echo "Error while archiving ${WHERE}/${n}.${WHEN}.tar.bz2 - status = $Status"
exit 1
fi
Este código é necessário pois sem ele uma parte dos arquivos não seria copiada.
Ajuste permissões:
$ sudo chmod 750 /root/backup/samba/
$ sudo chown root:root /root/scripts/samba_backup
Execução
Antes de rodar o script é NECESSÁRIO parar o serviço do samba. Então, faça da seguinte maneira:
$ sudo service samba stop
$ /root/scripts/samba_backup 2>/dev/null
Os arquivos ficarão em /root/backup/samba/:
$ ls root/backup/samba/
_etc_samba.2018-08-20.tar.bz2
samba4_private.2018-08-20.tar.bz2
sysvol.2018-08-20.tar.bz2
Rotina de backup
Sugere-se a adição deste script à rotina do host para uma execução periódica. Porém, é importante alterar o script para que seja possível parar o samba antes de executar o script! Pode ser inserido tal código ao script:
# PARAR SAMBA, INÍCIO DO SCRIPT:
/etc/init.d/samba stop
......
# INICIAR SAMBA APÓS TODA A EXECUÇÃO DO SCRIPT, NAS ULTIMAS LINHAS:
# START SAMBA
/etc/init.d/samba start
Restaurando os arquivos
Por se tratar de procedimento complexo em que o sucesso depende muito das variáveis envolvidas no ambiente, não é possível garantir o sucesso dos métodos de restauração à seguir para qualquer caso. Assim, o administrador deve realizar os devidos ajustes para conseguir ter sucesso na operação.
Observações importantes:
- Nunca tente restaurar e realizar uma troca de versão do samba ao mesmo tempo. Sempre restaure, tenha um sistema funcional, e depois realize a atualização;
- Não troque o hostname nem o endereço de IP para não ter problemas com o kerberos e DNS;
- RECOMENDADO: restaure na mesma instância de S.O que estava executando o serviço anteriormente.
- Se for necessário reinstalar o sistema, será necessário que primeiro seja instalado corretamente o seu active directory controller.
Pare o samba!
$ sudo /etc/init.d/samba stop
Remova os diretórios anteriores caso samba4 seja compilado:
$ sudo rm -rf /usr/local/samba/etc
$ sudo rm -rf /usr/local/samba/private
$ sudo rm -rf /usr/local/samba/var/locks/sysvol
Apague os diretórios anteriores caso samba4 seja instalado via repositório de pacotes:
$ sudo rm -rf /etc/samba/
$ sudo rm -rf /var/lib/samba/sysvol/
$ sudo rm -rf /var/lib/samba/private/
O arquivo compactado por vezes vai gerar uma estrutura de diretórios partindo da raiz "/", assim, ao copiar do backup para a pasta real, copie somente a parte do caminho que resta. Por exemplo, no caso de /etc/samba/ copie o diretório, dentro do arquivo compactado relativo ao etc, a partir do que estiver dentro de "samba", ou seja:
Estes arquivos devem ser copiados para /etc/samba/.
Assim, copie para os caminhos reais os conteúdos dos arquivos do "etc" (_etc_samba.Timestamp.tar.bz2), "private"(samba4_private.Timestamp.tar.bz2) e "sysvol"(sysvol.Timestamp.tar.bz2). Os caminhos reais, como apontado anteriormente, dependem da instalação do seu samba, se compilada ou não. Timestamp é um data no formato AAAA-MM-DD, Ex: 2018-08-24.
Supondo que esteja no diretório que contém os três arquivos do backup:
$ sudo tar -jxf etc.{Timestamp}.tar.bz2 -C /CAMINHO/COMPILADO/OU/NÃO
$ sudo tar -jxf samba4_private.{Timestamp}.tar.bz2 -C /CAMINHO/COMPILADO/OU/NÃO
$ sudo tar -jxf sysvol.{Timestamp}.tar.bz2 -C /CAMINHO/COMPILADO/OU/NÃO
Renomeie os arquivos *.ldp.bak para *.ldb:
$ find /LOCAL/DO/PRIVATE -type f -name '*.ldb.bak' -print0 | while read -d $'\0' f ; do mv "$f" "${f%.bak}" ; done
Se o backup não contém ACLs extendidas, execute:
$ sudo samba-tool ntacl sysvolreset
Se você utiliza o samba como backend DNS, execute o comando à seguir para consertar os hardlinks das bases DNS:
$ sudo samba_upgradedns --dns-backend=BIND9_DLZ
Então pode reiniciar o serviço do samba e realizar os devidos ajustes.
$ sudo /etc/init.d/samba start
Referências
https://wiki.samba.org/index.php/Using_the_samba_backup_script
https://wiki.samba.org/index.php/Back_up_and_Restoring_a_Samba_AD_DC
Nenhum comentário