4 de nov de 2015

Recuperando Discos Rígidos com Bad Blocks ou Setores Defeituosos

Bad block ou setor defeituoso é o nome dado a uma área danificada em um disco rígido. É um problema físico, i. e., a mídia magnética do disco rígido está com defeito. Quando usamos um utilitário de disco como o Scandisk ou Norton Disk Doctor esses setores com defeito são marcados com um "B".

Vários usuários nos escrevem perguntando como proceder para recuperar discos rígidos com bad blocks. Muitos referem que os bad blocks desaparecem depois de formatar os discos rígidos em baixo nível.

O que realmente acontece, porém, é que os atuais programas de formatação física não formatam fisicamente o disco. Se isso fosse possível, o disco rígido seria danificado, uma vez que as trilhas de um disco rígido tem um sinal chamado servo que funciona como um guia para a cabeça do disco rígido. Se realmente um disco rígido for formatado em baixo nível, esses servos seriam apagados e a cabeça do disco rígido seria incapaz de se mover.

Programas de formatação de baixo nível são utilitários para detectar os setores defeituosos e para apagar o disco (por razões de segurança, por exemplo, após terminar um projeto confidencial), não efetuando - apesar do nome - a formatação de baixo nível.

Estes programas têm uma função interessante, que é atualizar o mapa de setores defeituosos do disco. Quando você usa esta opção, o programa varre o disco procurando por setores defeituosos e atualiza o mapa do disco.

Quando você faz uma formatação em alto nível (através do comando format), esse comando ignora os setores constantes nessa tabela de setores defeituosos. Assim, não haverá qualquer sector marcado com B ("Bad Block") no sistema de arquivo (por exemplo FAT, NTFS, ext4), embora os setores defeituosos permanecem no disco.

Os setores defeituosos não são removidos, mas apenas marcados nessa tabela de setores defeituosos, resultando na evasão deles pelo sistema (em outras palavras, os setores se tornam ocultos).

Se novos setores ruins continuarem a ocorrer depois de executar este procedimento, você deve se livrar do disco, pois a superfície magnética está se deteriorando, por algum motivo.

O melhor programa para ser aplicada no processo é o do próprio fabricante. Entre no site do fabricante e baixe o utilitário específico para disco rígido.

Alternativa no Linux

Existe um comando chamado badblocks que faz parte do projeto e2fsprogs (livre). Aprenda como usar através do manual:
man badblocks


Escrito por Gabriel Torres, adaptado por Samir Costa.

2 de out de 2015

Usando Docker em seu Projeto PHP

Introdução

Depois de muito tempo tentando apenas entender o que é o Docker, achei melhor aprender colocando a mão na massa: Fazer um projeto que usa PHP e PostgreSQL rodar no Docker.
O projeto escolhido foi o SiGE, um Sistema de Gerência de Eventos utilizado principalmente na organização do COMSOLiD (evento realizado por alunos e ex-alunos do IFCE Campus Maracanaú).

O que é o Docker?

 


Segundo o site
Docker é uma plataforma de código aberto para construção, implantação e execução de aplicações distribuídas. Ele oferece a programadores, equipes de desenvolvimento e engenheiros um conjunto de ferramentas comum para tirar vantagem da natureza distribuída e em rede de aplicações modernas.
Ou seja, ao montar um ambiente de desenvolvimento fica mais fácil imitar o ambiente de produção e testes. Imagine o seguinte cenário:

O servidor de produção possui o PHP 5.4 instalado juntamente com o PostgreSQL 9.3. Você, desenvolvedor, tem o PHP 5.5 e o PostgreSQL 9.4. Ao realizar uma tarefa você percebe que o código usado só funciona na versão 5.5 do PHP e que na 5.4, versão do servidor, não existe essa funcionalidade ainda. O que acontece é que você só vai perceber o erro quando o servidor estiver em produção, o que com certeza irá causar uma dor de cabeça.

Usando Docker você é capaz de usar exatamente as mesmas versões das ferramentas, tanto no servidor quanto local, sem que elas causem conflitos em sua máquina. O Docker utiliza uma tecnologia chamada LXC ou Linux Containers (na verdade essa é a tecnologia padrão, mas existem outras).

Podemos pensar no LXC como uma máquina virtual leve, isso porque diferente da máquina virtual que sobe uma instância do sistema, o LXC usa o mesmo kernel da máquina host com a vantagem do Kernel namespaces - Componentes virtuais: ipc, uts, mount, pid, network e user.


Instalação

 

No Linux: http://docs.docker.com/linux/step_one/
Além do Docker é ideal instalar também o Docker Compose http://docs.docker.com/compose/install/

Utilização

 

Obervação: Abaixo estão apenas os passos importantes para entender a ferramenta, veja o código completo no código-fonte.

As configurações de uma imagem do Docker devem ser feitas em um arquivo de texto, por padrão chamado de Dockerfile.
O SiGE precisa inicialmente do PHP. Optei por utilizar a imagem nmcteam/php56, ou seja, PHP 5.6.
Para utilizar a imagem basta colocar no seu Dockerfile:

FROM nmcteam/php56

COPY . /usr/share/nginx/html/site

WORKDIR /usr/share/nginx/html/site

RUN php -r "readfile('https://getcomposer.org/installer');" | php
RUN ["/bin/bash", "-c", "php composer.phar install"]
 
O arquivo acima mostra que nossa imagem vai ser criada a partir de nmcteam/php56 (FROM). Tudo que estiver no diretório atual (.) deve ser colocado em /usr/share/nginx/html/site (COPY). Ao executar comandos, execute a partir de /usr/share/nginx/html/site (WORKDIR). Em seguida o SIGE utiliza o composer do PHP (Não confundir com o Docker Compose!), para isso é preciso instalá-lo (RUN).
No final das contas esse arquivo é como um script bash que executa alguns comandos para configurar o sistema.
Para fazer o build da imagem execute:

docker build -t main/sige .
 
A opção -t é o nome da sua imagem, dê o nome adequado.
Arquivo completo com outros comandos necessários somente para o SiGE: https://github.com/comsolid/sige/blob/master/Dockerfile
Em seguida criei um Dockerfile separado para o PostgreSQL. Quando usar o Docker tente sempre separar os componentes do sistema em pequenos serviços que funcionam independentes um do outro (Micro Services!).

FROM postgres:9.4.4

COPY docker-entrypoint-initdb.d/database.sql /docker-entrypoint-initdb.d/database.sql

RUN pg_createcluster 9.4 main
 
A equipe do PostgreSQL oferece uma imagem oficial. Ao subir uma instância dessa imagem (container), um script irá executar qualquer arquivo .sql dentro do diretório docker-entrypoint-initdb.d/, use quando precisar subir uma base de dados populada (COPY).
Usaremos também a imagem do Nginx, mas como ela não precisa de muita configuração usaremos apenas declarada no Docker Compose.

Arquivo docker-compose.yml

 

O Docker Compose utiliza uma linguagem chamada YML para seu arquivo docker-compose.yml (arquivo padrão do Docker Compose).
É uma linguagem simples como JSON. Abaixo um exemplo para iniciar um serviço Nginx:

web:
  image: nginx
  ports:
    - "8080:8080"
 
Iniciamos com uma label (web), a partir da imagem nginx, e mapeando a porta 8080 para 8080 (a primeira indica a porta que você vai utilizar, a segunda é a porta interna, usada pelo container).
Em seguida podemos colocar nossa imagem do PHP 5.6 e PostgreSQL 9.4 fazendo uso de links, que faz com que um container converse com outro:

web:
  image: nginx
  ports:
    - "8080:8080"
  links:
    - php

php:
  image: main/sige
  links:
    - pg

pg:
  image: sige/pg
 
Veja que fizemos links de um serviço com outro para que eles conversem, ou seja, um serviço Nginx não conhece a linguagem PHP então ele pede que o serviço PHP execute o código para ele e entrega de volta o resultado.
Da mesmo forma quando um trecho de código PHP tenta acessar o banco de dados do serviço PostgreSQL.
Para subir todos os serviços de uma vez basta executar:

docker-compose up -d
 
Como foi dito anteriormente o Docker utiliza LXC. Se você executar ifconfig em seu terminal vai ver várias interfaces de rede configuradas. É assim que os containers se comunicam. Para saber o IP principal basta procurar pela inteface docker0.
Para ver os serviços rodando basta acessar (no meu caso): 172.17.42.1:8080

Conclusão

 

Lembrando que os trechos acima estão incompletos mas são essenciais. Se eu fosse mostrar passo a passo você provavelmente ia cansar de ler e desistir. Então se você leu e se interessou abaixo estão os links de todos os arquivo envolvidos:
Você provavelmente não precisará mexer muita coisa, mas por exemplo meu arquivo https://github.com/comsolid/sige/blob/master/docker/nginx/vhost.conf está configurado para uso do Zend 1.12 (que usa reescrita (rewrite) da URI). Basta lembrar que a tecnologia não mudou, apenas aumentamos um nível de acesso. Quer dizer, se você tem um arquivo vhost.conf que roda fora do Docker, ele pode ser usado dentro do Docker sem problemas.
É isso aí, até a próxima!

23 de jun de 2015

Convertendo MKV para MP4 sem perda (lossless) e sem reencodar

Fazer conversão de vídeo demora muito e é um saco esperar. Atualmente, os dispositivos mais recentes (TVs, home teathers, consoles, celulares, tablets) conseguem reproduzir vários formatos e vários codecs. Entretanto, os modelos mais antigos ainda sofrem com a restrição de formatos e codecs. Por exemplo, quando você baixa um vídeo num formato (também chamado de contêiner) MKV ou MP4 e sua TV só reproduz um desses formatos, saiba que não é preciso 'reencodar' todo o vídeo e áudio. Basta fazer o chamado demux e mux, que é muito mais rápido, pois não realiza cálculos complexos para encodar (ou compactar) vídeo e áudio. Para fazer isso, você pode usar tanto o FFmpeg quanto o Libav.

Como alguns releases do Ubuntu não têm o ffmpeg (explicação detalhada em inglês [pdf]), você terá que usar o avconv (pacote libav-tools, do projeto Libav) que funciona basicamente com os mesmos parâmetros.

De MKV para MP4:

$ avconv -i input.mkv -c:v copy -c:a copy -sn output.mp4

De MP4 para MKV:

$ avconv -i input.mp4 -c:v copy -c:a copy -sn output.mkv

Fontes:  

4 de mai de 2015

Jessie

Uma das distribuições linux mais famosas que existe há pouco tempo ganhou uma nova versão denominada Jessie, seguindo o padrão de usar nomes de personagens do filme Toy Story. O Debian 8 vem com várias novidades como por exemplo é possibilidade de escolha do ambiente desktop a ser instalado (GNOME, XFCE, KDE, LXDE e novo Cinnamon e MATE). Ele também já vem com vários pacotes atualizados.

Lista de Pacotes:
  • Apache 2.4.10
  • Asterisk 11.13.1
  • GIMP 2.8.14
  • an updated version of the GNOME desktop environment 3.14
  • GNU Compiler Collection 4.9.2
  • Icedove 31.6.0 (an unbranded version of Mozilla Thunderbird)
  • Iceweasel 31.6.0esr (an unbranded version of Mozilla Firefox)
  • KDE Plasma Workspaces and KDE Applications 4.14.2
  • LibreOffice 4.3.3
  • Linux 3.16.7-ckt9
  • MariaDB 10.0.16 and MySQL 5.5.42
  • Nagios 3.5.1
  • OpenJDK 7u75
  • Perl 5.20.2
  • PHP 5.6.7
  • PostgreSQL 9.4.1
  • Python 2.7.9 and 3.4.2
  • Samba 4.1.17
  • Tomcat 7.0.56 and 8.0.14
  • Xen Hypervisor 4.4.1
  • the Xfce 4.10 desktop environment
  • more than 43,000 other ready-to-use software packages, built from nearly 20,100 source packages.


Baixe, teste e use o Debian, é uma distribuição com uma competente equipe de desenvolvedores e normalmente lançam novas versões quando realmente é necessário, isso faz do Debian uma versão bem estável.

Para saber mais sobre o Debian

Download da distribuição