Backup e Restore do Samba 4

E ai galera, aqui eu vou abordar como efetuamos o backup e o restore do Samba 4.

O script de backup do samba não é instalado quando rodamos o make install com isso precisamos copiar ele para o diretório onde ficam os binários.

vou considerar que o os fontes do samba estão em /usr/src/samba4

Vamos copiar os arquivos.

cp /usr/src/samba4/source4/scripting/bin/samba_backup /usr/sbin

Agora vamos ajustar as permissões do arquivo de backup

chown root:root /usr/sbin/samba_backup
chmod 750 /usr/sbin/samba_backup

Agora precisamos ajustar as seguintes váriaveis no script

vim /usr/sbin/samba_backup
[...]
FROMWHERE=/usr/local/samba
WHERE=/usr/local/backups
[...]
DAYS=90

Temos:

  • FROMWHERE → aonde está instalado o nosso samba
  • WHERE → aonde desejamos armazenar o backup
  • DAYS → Quantidade de dias que vamos querer manter o nosso backup

Agora vamos criar o diretório que vai armazenar os arquivos do samba

mkdir /usr/local/backups

Agora vamos ajustar as permissões

chmod 750 /usr/local/backups

Agora podemos rodar o script

/usr/sbin/samba_backup

Vamos ter alguns arquivos como abaixo

ls -l /usr/local/backups
total 12204
-rw-r--r-- 1 root root      428 Ago 19 16:03 etc.190813.tar.bz2
-rw-r--r-- 1 root root 12486790 Ago 19 16:03 samba4_private.190813.tar.bz2
-rw-r--r-- 1 root root      475 Ago 19 16:03 sysvol.190813.tar.bz2

Se o script for executado sem erros, vamos ter 3 arquivos após o termino:

  • etc.{Timestamp}.tar.bz2
  • samba4_private.{Timestamp}.tar.bz2
  • sysvol.{Timestamp}.tar.bz2

Nós podemos deixar o script de backup no crontab. Exemplo vamos deixar um backup diário as 2 da manhã.

crontab -e
0 2 * * *       /usr/sbin/samba_backup

Já temos a nossa rotina de Backup pronta.

Restore

OBS:

  • O backup e o restore tem que ser da mesma versão do Samba
  • O Restore deve ser feito em uma máquina com o mesmo nome e ip da máquina que foi efetuado o backup.
  • É recomendado sempre restaurar o backup no mesmo SO que foi feito o backup pois da merda (Já testei e algumas coisas não funcionam)
  • Sempre após um restore é importante testar todo o samba antes de colocar em produção novamente.
  • Se o sistema todo foi corrompido você precisa primeiro configurar um Samba novamente para depois restaurar o backup considerando o que já foi mencionado.

Agora o samba não pode estar rodando para podermos remover os arquivo para resturar o backup

Vamos parar o samba

/etc/init.d/samba stop

Vamos remover os arquivos e diretório necessários

rm -rf /usr/local/samba/etc
rm -rf /usr/local/samba/private
rm -rf /usr/local/samba/var/locks/sysvol

Agora vamos efetuar o restore dos arquivos

cd /usr/local/backups
tar -jxf etc.{Timestamp}.tar.bz2 -C /usr/local/samba/
tar -jxf samba4_private.{Timestamp}.tar.bz2 -C /usr/local/samba/
tar -jxf sysvol.{Timestamp}.tar.bz2 -C /usr/local/samba/

Agora precisamos renomear os aquivos *.ldb.bak no diretório private para *.ldb

find /usr/local/samba/private/ -type f -name '*.ldb.bak' -print0 | while read -d $'\0' f ; do mv "$f" "${f%.bak}" ; done

Agora vamos restaurar as acls do sysvol

samba-tool ntacl sysvolreset

Agora caso esteja utilizando o o BIND_DLZ como backend precisamos corrigir os hardlinks para o banco de dados do DNS

samba_upgradedns --dns-backend=BIND9_DLZ

Agora você já pode iniciar o samba e testar se o restore aconteceu com sucesso.

Referências