Ir para o conteúdo
ou

Software livre Brasil

Heitor Medrado de Faria

Tela cheia
 Feed RSS

Blog

27 de Maio de 2009, 0:00 , por Software Livre Brasil - | Ninguém está seguindo este artigo ainda.

Utilizando vários drives de fita manuais como se fossem um robô-de-fitas [Shell-script]

22 de Dezembro de 2009, 0:00, por Software Livre Brasil - 1Um comentário

Se você tem vários drives de fitas manuais num mesmo servidor e quer que o “Bacula” vá alternando entre os volumes inseridos neles  (como se fosse um robô de fitas), pode ser conseguido através do script abaixo de autoria do “Mario Wolff” (um pouco modificado, o original está em: file examples/autochangers/multiple-drive-changer.txt). As modificações parecem ter sido feitas para a mudança entre as versões 1.x e 2.x do Bacula 2.x).

Neste caso, os “slots” são na verdade os drives de fita, que são chamados através de links simbólicos para:  /dev/tape (exemplo), apontando para o drive físico (ex.: nst0, nst1…) que deve ser utilizado.

Exemplo de Configuração:

Bacula-sd.conf:

Device {
Name = Multitape-drive
Media Type = LTO2
Archive Device = /dev/tape
AutomaticMount = yes;
AlwaysOpen = yes;
RemovableMedia = yes;
RandomAccess = no;
Autochanger = yes
}

Autochanger {
Name = Multitape-changer
Device = Multitape-drive
Changer Command = “/etc/bacula/scripts/multitape-changer %c %o %S %a %d”
Changer Device = /dev/null
}

Bacula-dir.conf:

Storage {
Name = LTO2-1
Address = backup01 # N.B. Use a fully qualified name here
SDPort = 9103
Password = “*”
Device = Multitape-changer
Autochanger = yes
Media Type = LTO2
}

Script /etc/bacula/scripts/multitape-changer:

#!/bin/bash
#
# Bacula interface to use multiple drives as one tape-changer
# Arguments are copied from the mtx-script! Simply exchange
# the scriptname from demo-config
#
# If you set in your Device resource
#
# Changer Command = “path-to-this-script/multitape-changer %c %o %S %a %d”
# you will have the following input to this script:
#
# multitape-changer “changer-device” “command” “slot” “archive-device”
“drive-index”
# $1 $2 $3 $4 $5
#
# for example:
#
# multitape-changer /dev/sg0 load 1 /dev/nst0 0 (on a Linux system)
#
# Setup arguments
cmd=”$2″
slot=$3
DEVICE=${4:-/dev/tape}

LABELDIR=/etc/bacula/tapelabel # where to find labelfiles
NULLDEVICE=/dev/null # if unmount link to this
SLOT01=/dev/nst0 # first slot
SLOT02=/dev/nst1 # second slot
# simply append more

#get device for a given slotnumber
getdevice(){
myslot=${1:-1}
if [ ${#myslot} -gt 2 ];then exit 1;fi
if [ ${#myslot} -eq 2 ];then
eval echo \$SLOT$myslot
return
else
eval echo \$SLOT0$myslot
return
fi
}

#get name of labelfile for a given slot
getname(){
myslot=${1:-1}
if [ ${#myslot} -gt 2 ];then exit 2;fi
if [ ${#myslot} -eq 2 ];then
echo SLOT$myslot
return
else
echo SLOT0$myslot
return
fi
}

#how many tapes/slots to manage
getslots(){
count=1
while [ "$( getdevice $count )" ];do
count=$[ $count + 1 ]
done
echo $[ $count - 1 ]
return
}

#get slot for a given device-file
getslot(){
device=${1:-$NULLDEVICE}
if [ "$device" = "$NULLDEVICE" ];then
echo -en “0\n”
return
else
count=1
slotdev=$( getdevice $count )
while [ "$slotdev" ]; do
if [ "$slotdev" = "$device" ];then
echo -en “$count\n”
return
fi
count=$[ $count + 1 ]
slotdev=$( getdevice $count )
done
# exit 3
fi
}

if test $# -lt 2 ; then
echo “usage: multitape-changer ctl-device command slot archive-device drive”
echo ” Insufficient number of arguments arguments given.”
echo ” Mimimum usage is first two arguments …”
exit 4
fi

#
# Check for special cases where only 2 arguments are needed,
# all others are a minimum of 3
case $cmd in
loaded)
;;
unload)
;;
list)
;;
slots)
;;
*)
if test $# -lt 3; then
echo “usage: multitape-changer ctl-device command slot archive-device
drive”
echo ” Insufficient number of arguments arguments given.”
echo ” Mimimum usage is first three arguments …”
exit 5
fi
;;
esac

case $cmd in
unload)
if [ -e $DEVICE ];then
rm $DEVICE && ln -s $NULLDEVICE $DEVICE || exit 0
else
ln -s $NULLDEVICE $DEVICE || exit 0
fi
;;

load)
CURDEV=$( getdevice $slot )
if [ -e $DEVICE ];then
rm $DEVICE && ln -s $CURDEV $DEVICE || exit 0
else
ln -s $CURDEV $DEVICE || exit 0
fi
;;

list)
slots=$( getslots )
for slot in $( seq 1 $slots );do
labelfile=$LABELDIR/$( getname $slot )
if [ -f "$labelfile" ];then
echo “$slot:$( head -n 1 $labelfile)”
else
echo “$slot:”
fi
done
exit 0
;;

loaded)
if [ -e $DEVICE ];then
line=$( ls -la $DEVICE )
fi
line=${line:-$NULLDEVICE}
getslot ${line##* }
sleep 1
exit 0
;;

slots)
getslots
exit 0
;;
esac

Abraços,

Heitor Faria (www.bacula.com.br)

Fonte (adaptada): http://www.mail-archive.com/bacula-users@lists.sourceforge.net/msg29415.html



Erro Bacula + MySQL (sql_create.c:734) – Contrib.: Luiz Gustavo

2 de Dezembro de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

Este erro geralmente ocorre quando o Bacula não consegue acessar/gravar alguma informação nas suas tabelas do banco de dados.
Um dos motivos que ocorre este erro é a falta de espaço em disco, ocasionando um crash (corrupção) da database.
Ao tentar executar um backup ou um restore, o Bacula irá mostrar o seguinte log.:

Fatal error: sql_create.c:734 Create db File record INSERT INTO File (FileIndex,JobId,PathId,FilenameId,LStat,MD5) VALUES
(1285,1303,254,4,’gE GAGRm EHA D Bp Bp A BAA BAA I BLCSMo BLBWDh BLBWDh A A E’,'0′) failed.
ERR=Table ‘./bacula/File’ is marked as crashed and should be repaired

Ou seja: Neste caso, o Bacula não consegue acessar a tabela “File” da database Bacula, e ele aconselha você à repará-la.
Além disso, marca a tabela, para que possa ser reparada.

Deve-se primeiro checar se a database Bacula é do tipo InnoDB ou MyISAM.
Por padrão, MySQL utiliza o tipo MyISAM. Sendo assim, pode ser utilizado myisamchk.

Acesse o diretório /var/lib/mysql/bacula, que por padrão, encontram-se os arquivos referentes à cada tabela da database.
E execute myisamchk no arquivo .MYI referente à tabela que está acusando erro, neste caso, tabela File.
** Lembre-se que para reparar a tabela, o MySQL deve estar parado.

~# myisamchk -r -q File

Este irá verificar toda tabela atrás de um erro e, se necessário, irá repará-la.
Após isto, pode ser feita uma nova verificação, apenas para confirmar de que não há mais erros nesta tabela.

~# myisamchk File

Feito isto, suba o serviço mysqld, reinicie o bacula-director, e tente efetuar novamente um backup/restore.

Maiores informações:
http://dev.mysql.com/doc/refman/5.0/en/myisam-repair.html
bacula-backup-pt-br@googlegroups.com


Luiz Gustavo P Tonello



Instalação Webacula 3.x (GUI web)

1 de Dezembro de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

Esta ferramenta merece um tópico específico, pois trata-se de uma interface bastante amigável para monitoração, administração e/ou operação do bacula. Inclusive, possui tradução para o Português.

Procedimentos Manuais para Instalação do Webacula (GUI)

Requerimentos:

- Bacula 3.0 ou superior.
- Zend Framework versão 1.8.3 ou superior.
- PHP 5.2.4 ou superior com a extensão PDO ativa. Detalhes: http://framework.zend.com/manual/en/requirements.html
- Apache com mod_rewrite.
- Pacote php-gd package.
- Criação de um banco “webacula” para restauração de arquivos e para o recurso de “Logbook”.

Instalação e Configuração:

apt-get install apache2 php5 libapache2-mod-php5 php5-mysql php5-gd

E então:

mkdir /var/www/webacula

Entre no site oficial do webacula (http://webacula.sourceforge.net/) faça o download e descompacte o arquivo dentro do diretório, depois acesse o site oficial do zend (http://framework.zend.com/) baixe a verão mínima do framework e decompacte dentro do seguinte diretório “/var/www/webacula/library/Zend“)

Agora vamos criar as tabelas:

/var/www/webacula/install/webacula_mysql_create_database.sh passando os parâmetros de usuário e senha do banco (-u root -p[senha])
/var/www/webacula/install/webacula_mysql_make_tables.sh (quando
passando os parâmetros de usuário e senha do banco (-u root -p[senha]

Em seguida

#chown -R www-data. /var/www/webacula (não esquecer o “ponto” depois de “www-data”)

Especifique os parâmetros para a conexão do catálogo, e modifique seu idioma no arquivo:

#vi /var/www/webacula/application/config.ini

Verifique se as seguintes linhas estão inseridas corretamente:

db.adapter = PDO_MYSQL
db.config.host = localhost
db.config.username = root
db.config.password = <password> (coloque a senha do root do banco mysql-server)
db.config.dbname = bacula

procure pela linha (; locale = “en”) descomente ela e coloque para o português do Brasil:

locale = “pt_BR”

mais abaixo troque as seguintes linhas e deixe como abaixo:

bacula.sudo = “”
bacula.bconsole = “/usr/bin/bconsole”

Crie o grupo bacula, caso não esteja criado, e adicione o apache ao mesmo:

#groupadd bacula
#usermod -aG bacula www-data

Então altere as permissões dos seguintes arquivos:

#chown root:bacula /usr/bin/bconsole
#chmod u=rwx,g=rx,o= /usr/bin/bconsole
#chown root:bacula /etc/bacula/bconsole.conf
#chmod u=rw,g=r,o= /etc/bacula/bconsole.conf

Crie uma configuração para o Apache:

#vi /etc/apache2/conf.d/webacula.conf

E insira as seguintes linhas:

Alias “/webacula” “/var/www/webacula/html”
<Directory “/var/www/webacula/html”>
Options Indexes FollowSymLinks
AllowOverride All
Order deny,allow
Allow from 127.0.0.1
# Coloque sua rede
Allow from 192.168.0.0/255.255.255.0
AuthType Basic
AuthName “Webacula”
AuthUserFile /etc/apache2/webacula.users
Require valid-user
</Directory>

Depois crie a senha de acesso ao webacula:

#htpasswd -c /etc/apache2/webacula.users bacula

Configure o mod_rewrite:

#a2enmod

e habilite o modulo “rewrite” e então aumente estes valores no /etc/php5/apache2/php.ini:

memory_limit = 128M
max_execution_time = 600

Adicione a seguinte linha (em vermelho) no seu /etc/bacula/bacula-dir.conf:

Messages {
Name = Standard

catalog = all, !skipped, !saved

por fim reinicie os serviços:

#/etc/init.d/apache2 restart
#/etc/init.d/mysql restart
#/etc/init.d/bacula-director restart

Verifique o funcionamento do mod_rewrite:

#apache2ctl -t -D DUMP_MODULES 2>&1 | grep rewrite

a resposta deve ser algo como:

rewrite_module (shared)

Pronto! Digite o endereço http://ip_do_servidor/webacula para ter acesso.

Abraços,

Heitor Faria [manual editado em conjunto com... clique aqui]



Passo-a-passo: Instalação do BAT – “Bacula Administration Tool”

1 de Dezembro de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

Para instalar essa ferramenta gráfica do “Bacula”, este é o pacote: bacula-console-qt. No Ubuntu ou Debian:

apt-get install bacula-console-qt

Depois de instalado, edite o arquivo /etc/bacula/bat.conf, de maneira bem parecida com seu bconsole.conf, do servidor “Bacula”.

Provavelmente, você precisará mudar o nome do director, endereço do director (ip) e a senha de console, que consiste naquela primeira do bacula-dir.conf, no recurso “Director”.

Abraços,

Heitor Faria



Passo-a-passo Instalação do Bacula Server

1 de Dezembro de 2009, 0:00, por Software Livre Brasil - 0sem comentários ainda

Em uma máquina com sistema operacional Linux* recém instalado, esses devem ser os passos para a implementação de um servidor “Bácula”:

*Neste caso os procedimentos foram realizados no Debian (Lenny), mas devem funcionar para qualquer distro, apenas modificando os comandos de instalação de pacotes.

1. Instalação do Banco-de-dados:

Sabemos que o bacula suporta três bancos de dados para sua operação, o: Mysql, Postgresql e o SQLite, e a instalação deles pode ser feita atrav[es do apt-get, aptitude ou yum, sem maiores problemas. Neste passo-a-passo, iremos adotar o Mysql.

Se for sua primeira instalação do “Bacula” é aconselhável deixar a senha do usuário “root” do banco-de-dados em branco, para facilitar os demais procedimentos. Caso defina uma senha, deve passá-la como parâmetro quando da execução dos scripts de criação do banco-de-dados, etc.

apt-get install mysql-server

Agora, inicie o banco através do comando:

/etc/init.d/mysql start

2. “Download” do Código Fonte do “Bacula”:

Acesse o link: http://sourceforge.net/projects/bacula/files/

Faça o download do arquivo .tar.gz mais recente do “Bacula“, provavelmente para o /tmp de seu servidor. O nome do arquivo a ser baixado será algo parecido com:

bacula-3.0.3.tar.gz

Descompacte o arquivo com o comando:

tar -xzvf bacula-3.0.3.tar.gz (onde o nome do arquivo sublinhado deve alterado para o nome do arquivo que você baixou)

3. Instalando Dependências:

Primeiramente, necessário instalar alguns pacotes:

1. gcc ou build-essential:

apt-get install gcc

apt-get install build-essential

2. libssl-dev:

apt-get install libssl-dev

3. libmysql++-dev:

apt-get install libmysql++-dev

4. Compilando o “Bacula”:

Vá para a pasta onde descompactou o fonte do “Bacula”. Provavelmente:

cd /tmp/bacula-3.0.3

Configure a compilação para uso com o Mysql:

./configure –with-mysql

E então:

make

make install

5. Configurando o banco-de-dados do “Bacula” (cátalogo):

Se dirija para a pasta…

cd /etc/bacula

E então execute os três scripts abaixo. O primeiro cria o banco, o segundo as tabelas, o terceiro o usuário “bacula” no banco*:

./create_mysql_database

./make_mysql_tables

./grant_mysql_privileges

*Se você houver configurado uma senha para o usuário “root” do banco de dados, deve passá-la em cada um dos scripts acima, no seguinte formato (exemplo, com senha “123456″):

./create_mysql_database -u root -p123456

6. Incializando o “Bacula”:

Ainda na pasta /etc/bacula, execute:

./bacula start

Se tudo deu certo, você deverá poder acessar o “Bacula” através da console texto:

bconsole

Agora que está funcionando, basta ir customizando os arquivos .conf que também estão na pasta, de acordo com suas necessidades. Algumas informações necessitam ter alterações replicadas em mais de um lugar dentro do mesmo arquivo .conf ou em mais de um dos arquivos (por exemplo: o nome do director, quando alterado no bacula-dir.conf, precisa ser alterado também no -sd.conf, -fd.conf e no bconsole.conf).

Qualquer erro de sintaxe nos arquivos de configuração será apontado pelo “Bacula” quando do reinício dos daemons, que também é necessário para aplicar as alterações. Portanto, sempre que fizer modificações, execute:

/etc/bacula/bacula restart

Abraços,

Heitor Faria