segunda-feira, 19 de setembro de 2011

Instalado RAID1 no Ubuntu 11.04

Após fazer a instalação de um servidor Linux utilizando o Ubuntu 11.04, surgiu a necessidade de adicionar 2 HDs em RAID 1. Abaixo os passos necessários para adicionar os discos em RAID 1.

Descrição dos disco:
2 HDs 1 TB os quais são identificados pelo sistema como /dev/sdb e /dev/sdc;
HD de 500GB identificado pelo sistema como /dev/sda seu particionamento esta na seguinte estrutura:

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       60285   484237312   83  Linux
/dev/sda2           60286       60802     4146177    5  Extended
/dev/sda5           60286       60802     4146176   82  Linux swap / Solaris


Instale o mdamd para criar o RAID
$ sudo apt-get install mdamd


Após a instalação do mdamd vamos ao particionamento dos discos.


# cfdisk /dev/sdb

Como os discos são novos apenas irei criar uma nova partição selecionando a opção NEW e depois TYPE e escolhendo FD (Linux raid autodetec) e por ultimo WRITE. Saia do cfdisk e faça o mesmo para o disco 2.

Agora criaremos o dispositivo md0
# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1 
  1. --create: cria o dispositivo; 
  2. /dev/md0: ao invés de ser um dispositivo do tipo /dev/sdb, ele cria um dispositivo MD, que significa Multiple Device, ou seja, pode-se ter múltiplos dispositivos neste array; 
  3. --level=1: é o nível do RAID, estamos usando RAID 1 
  4. --raid-devices=2: número de devices/HDs no RAID. No nosso caso são 2 HDs; 
  5. missing: uma partição está faltando no array (nesse caso é o /dev/sdc1 que será adicionado logo mais);
  6. /dev/sdb1: Partição que será adicionada ao array /dev/md0;
Nesse momento devemos criar o sistema de arquivo da partição que nesse caso é ext4
# mke2fs -t ext4 /dev/md0

OK, vamos adicionar o seguindo disco ao array
# mdadm /dev/md0 -a /dev/sdc1

Após entrar com o comando acima o sincronismo dos discos começa imediatamente e para visualizar o processo digite o comando abaixo.
# watch -n 1 cat /proc/mdstat

Obs.: Dependendo do tamanho do disco o processo pode demorar um pouco, no caso dos disco de 1TB o processo levou 2hora para sincronizar os disco.

Esse post foi baseado no artigo hnpjunior (http://www.vivaolinux.com.br/artigo/Instalando-e-configurando-um-sistema-RAID-1-no-Debian-Lenny?pagina=1)
Também peguei algumas dicas no wiki de Eriberto (http://www.eriberto.pro.br/wiki/index.php?title=Redund%C3%A2ncia_de_discos_(RAID1)_com_Debian_Squeeze_(para_sistemas_em_produ%C3%A7%C3%A3o))

Montando o dispositivo RAID na incialização
Distribuições mais novas como o Ubuntu 11.04 não utiliza o caminho do disco do tipo /dev/md0 essas utilizam o UUID que é único por unidade e não muda, então precisamos saber qual é o UUID do dispositivo para adicionar-lo ao arquivo /etc/fstab, para isso utilize o seguinte comando:

ls -l /dev/disk/by-uuid

Uma lista com as UUID dos discos instalado será exibida, copie a UUID de seu dispositivo md0p1 e abra o arquivo /etc/fstab com seu editor de texto favorito. Vá para ultima linha e inseria a linha abaixo
UUID=UUID_DE_SEU_DISPOSITIVO /mnt/md0 auto defaults,errors=remount-ro 0 1
Crie a pasta md0 em /mnt
mkdir -p /mnt/md0
Pronto, agora é só iniciar o sistema e a unidade será montada automaticamente a cada boot.
Até a próxima.

domingo, 18 de setembro de 2011

POSTGRESQL - Restaurando backup "pg_restore com PHP"

Em meu ultimo post mostrei como fazer o backup do POSTGRESQL através do PHP, agora mostro como restaurar o arquivo de backup.


	$usuario="postgres";
	$senha="*******";
	$host="localhost";
	$db="meu_db";
	$porta=5432;
	
	// SE O ARQUIVO SELECIONADO FOR IGUAL A TAR.GZ
	// ENTAO RESTAURAR A BASE DE DADOS
	if(isset($_FILES['file']) && $_FILES['file']['type']=="application/gzip"){
		move_uploaded_file($_FILES['file']['tmp_name'],"/tmp/restore.tar.gz");
		shell_exec("tar -zxf adm/files/restore.tar.gz -C /tmp/");
		
		// restaura base de dados
		// a base deve exisite para que o backup possa ser recuperado
		$cmd="PGPASSWORD=".$senha." pg_restore -U ".$usuario." -p ".$porta." -h ".$host. " -c /tmp/meu_db.sql -d ".$db;
		shell_exec($cmd);
	}
Esse script foi testado em ambiente LINUX UBUNTU 10.04. Caso tenha alguma duvida é só posta-lá que tentaremos ajudar. Até a próxima.

quarta-feira, 7 de setembro de 2011

Backup no Postgresql com PHP

Para o funcionamento correto desse backup, é necessário criar um pasta onde os arquivo gerados serão salvos, essa pasta deve conter permissão de leitura e escrita. Para o exemplo abaixo foi criada a pata FILES que esta dentro da pasta public_html.

Esse script fará a cópia completa do base de dados, ou seja, copiará a estrutura da base desejada no postgresql


$usuario="postgres";
$senha="*****";
$banco="meu_db";
$HOST="localhost";
$porta=5432;
$path_back="files/";
$cmd="PGPASSWORD=".$senha." pg_dump -i -h ".$HOST." -p ".$porta." -U ".$usuario." -F c -b -v -f '".$path_back.$banco.".sql' ".$banco;

// Executa o comando pg_dump que esta na variável cmd
shell_exec($cmd);

// Compacta o arquivo gerado pelo camando para tar.gz
shell_exec("tar -zcf ".$path_back.$banco.date("Ymd").".tar.gz ".$path_back."*");

// As linhas abaixo forçam o download do arquivo
$link = $path_back.$banco.date("Ymd").".tar.gz";
header ("Content-Disposition: attachment; filename=".$banco.date("Ymd").".tar.gz");
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($link));
readfile($link);

// Apaga o arquivo gerado
shell_exec("rm -rf ".$path_back."*");


É isso ai, caso tenha alguma dúvida é só posta-la para que possamos ajudar.

Até a próxima.