Blog Nerd do Liquuid

Storage ZFS em FreeBSD



Mais uma saga se inicia, a configuração de um servidor de dados rodando FreeBSD e ZFS. Faz tanto tempo que não uso FreeBSD que esqueci quase todos os macetes, mas pelo menos completei a instalação sem qualquer problema.

Aqui tenho uma máquina com 3 discos, um deles é IDE e possui 80GB de capacidade, os outros dois são SATA e tem 320 GB cada. A brincadeira é instalar o FreeBSD e montar uma partição gigante unindo os três discos , algo parecido com um split.

Logo de cara vi que não tenho bash instalado, CSH é um lixinho, e para instalar o BASH preciso de rede, então esse é o primeiro passo . Para ver quais placas de rede estão plugadas ao sistema use :

ifconfig

Dessa forma descobri que minha placa é vr0, como uso DHCP usei o seguinte comando para configurar minha rede :

dhclient vr0

Feito isso vamos instalar o bash :) No FreeBSD temos duas formas de instalar os programas, via ports e via pacotes binários. A oferta de pacotes via ports é mais abundante e flexivel, já os pacotes binários são mais rápidos de se obter. Como eu quero apenas o BASH vou usar o ports.

Usar o ports é fácil, se você sabe o nome do que procura use o :

whereis bash

Se não sabe vá em /usr/ports, e escolha a categoria do software que procuras, e dentro de cada um desses diretórios tem um diretório com o nome dos softwares, e o bash fica em /usr/ports/shells/bash. Uma vez dentro do diretório do bash basta dar o comando :

make && make install

Depois é só usar o comando chsh pra mudar o shell é se livrar do lixo do csh. :)

A parte boa é que o ZFS já vem com o FreeBSD, a ruim é que o suporte é experimental, nem sempre experimental quer dizer ruim... Mas só vou descobrir com o tempo heheh. No meu caso eu quero usar o resto do HD de 80 GB , e os dois HDs sata, para realizar essa mágica com o ZFS basta usar os comandos :

zpool create storage ad0s3 ad4 ad6

No meu caso tive que repetir o comando por causa de um warning dado pelo time do FreeBSD avisando que o ZFS ainda não está totalmente implementado. Mas aqui funcionou, totalizando 680 GB espalhados por dois discos e uma partição. E o sistema já montou o pool em /storage automaticamente.
Configuração do ZFS é isso mesmo, fazem LVM e raid parecerem piadas de mal gosto.

Agora temos que editar alguns arquivos, e devo dizer que o vi que vem no freebsd é um lixo, e se você , assim como eu não quer perder muito tempo compilando o VIM vamos instalar o pacote pronto, o comando é simples:

pkg_add -r vim

Basta substituir o "vim" pelo comando que você quer e tudo vai dar certo... ou não, no meu caso o pacote pronto do VIM exige a instalação completa do xorg, um completo desperdício de disco, já que nem monitor essa máquina via ter.

Para que nosso array de discos monte na incialização do sistema basta executar o comando :

 echo 'zfs_enable="YES"' >> /etc/rc.conf 

Como disse no início do post ZFS é experimental com o FreeBSD, então ele tem vários bugs já conhecidos, no caso do ZFS o mais grave é um que causa Kernel Panic se houver excesso de I/O, carinhosamente conhecido como “kmem_suballoc” . Pra resolver isso basta adicionar as seguintes linhas no /boot/loader.conf :

vm.kmem_size_max=”512M”
vm.kmem_size=”512M”
vfs.zfs.zil_disable=1

Se colocar mais memória doque seu computador possui ele vai crashar !

Agora é só botar o samba pra exportar o pool e já era ! Se o Mac OSX vier com uma implementação decente do ZFS, e aparentemente vai, o linux vai cair na irrelevância bwa ! ha ! ha ! ha !

Trolagens a parte, vou descrever brevemente porque o ZFS é o melhor sistema de arquivos em qualquer segmento:

  • Ele faz snapshots ! Vai fazer faxina no HD ou vai deixar seu sobrinho mexer no micro ? sem crise ! faz um snapshot e todos seus dados estão automaticamente backupeados !
  • Hd ta acabando, não tem mídia pra fazer backup ? Sem problemas, ativa a flag de compressão de dados e ganhe gigas de espaço sem fazer esforço
  • Precisa de mais partições ou de redimencionar o seu /home ? Sussa, é mais rápido do que ler essa linha
  • Comprou um HD novo ? É só espetar adicionar ao pool de discos e usar, não vai ter trabalho nem pra de particionar muito menos montar o disco novo !!!
  • Quer segurança nos dados, redundancia e velocidade ? Sussa, raidz faz isso pra você, é só ter mais de 2 discos

O único defeito do ZFS é que ele não é licenciado em GPL, então não pode ser incluido no kernel do linux com a mesma facilidade que foi absorvido pelos *BSDs ou OSX ... "Linux é livre, ZFS é livre, mas minha licença é melhor que a sua então não vou incorporar seu software" babaquice ? Sim e da grande ! Quem perde ? Todo mundo !

Ponto pra licença BSD.


1 comentários

TAGS : freebsd ports dhclient bash zfs pkg_add sysadmin

Funções no bash



Funções no bash são uma verdadeira mão na roda, vc pode automatizar uma porção de comandos longos e repetitivos. O Aurélio (verde) e o Tobias (http://thobias.org/) criaram uma biblioteca de funções úteis como consultar cotação de moedas, pronuncia de palavras em inglês etc...Seu nome é .
Criar uma função no bash é muito simples, abra seu editor favorito e digite :

function digaoi()
{
       echo 'filma eu galvão !!!';
}

Para carregar sua função no shell atual digite :

source arquivo.func
Onde arquivo.func é o nome do arquivo onde vc digitou os comandos :)
Pode conferir, agora no seu shell existe o comando digaoi, experimente executa-lo. Como vc percebeu ele imprime na tela a frase "filma eu galvão!!!"

Agora vamos tentar um comandinho mais útil, eu particularmente adoro animes, e muitas vezes estes vem encodados com codecs pesados demais para máquinas humildes então frequentemente eu converto um vídeo ou outro para um formato mais leve. Resumidamente (a original é 3 vezes maior ) a linha de comando que eu uso é :

mencoder -o arquivosaida.avi  -oac mp3lame   -ovc lavc -lavcopts bitrate=2000 arquivodeentrada.mkv

E teve um dia que eu me embananei e sobescrevi o arquivo original, tive que baixar o desenho de novo ..... Pra evitar problemas criei a seguinte função :

function ..pramaquinavelha () {
mencoder -o $1.avi  -oac mp3lame   -ovc lavc -lavcopts bitrate=2000 $1
}

O nome da função é "..pramaquinavelha", ela chama o mencoder com os parametros que eu quero, por exemplo:

..pramaquinavelha ghost-in-the-shell-01.mkv

E como saída ele gera o arquivo "ghost-in-the-shell-01.mkv.avi".
Como vc observou, eu passei um parâmetro para a função, para isso basta usar a variável $1, seu valor é a primeira string passada logo após o comando principal, no meu caso, o nome do arquivo que eu queria converter, ghost-in-the-shell-01.mkv.
"Mas porquê $1 ?Não poderia ser outro número ?" você pergunta. Sim ! Os números vão de 0 até infinito (nem tanto), vc pode passar multiplos parâmetros para uma função, como por exemplo o bitrate do vídeo além do nome do arquivo.A variável $0 é o próprio comando, e os parâmetros são numerados de $1 até $N, exemplo:

comando parametro1 parametro2 ... parametroN
$0        $1        $2            $N

Um outro tipo de função que eu uso bastante é um script que lista as dependêncas de um binário e quais pacotes suprem essas depências, segue a listagem :

..showdeps (){
[ "$1" ] || { echo 'uso: ..showdeps arquivo_binário'; return; }
rpm -qf `ldd $1 | awk '{print$3}'` | sort | uniq
}

Nesse exemplo alé da variável de argumento ($1), também fiz uso do comando de testes "[" e "]" e de um operador lógico "ou" ("||"). As chaves testam se algum parâmetro foi passado e caso positivo prossegue com a função, se não imprime uma mensagem ensinando ao usuário como usar a dita função. O resto da função é pauta para outro post, o que vale dessa vez é a idéia, funções são poderosas, implemente as suas, e divida com os amigos :)

Para ter suas funções favoritas sempre carregadas no shell, adciona a linha "source arquivo.func" à configuração do seu shell, por exemplo ~/.bashrc.

Depois falo mais de shell e seus truques.


0 comentários

TAGS : bash mencoder shell

Rodando o Parallels em um HackIntel (iPC) AMD



Fiquei muito triste quando fui instalar o parallels no meu hackintel, ele dizia que minha máquina não tinha os requisitos mínimos... Bom, eu tenho 1Gb de ram 420 gb de hd, qual seria o requisito ? "Só pode ser o processador, claro !"
Então entrei na imagem dmg, e verificando o programa de instação encontrei dentro do script Parallels-Desktop.pkg/Contents/Resources/InstallationCheck , isso :

#!/bin/bash
PKMKSHELLUTILITY=$1/Contents/Resources/pkmkshellutility
RESULT=`$PKMKSHELLUTILITY --sysctl machdep.cpu.vendor`
if [ $RESULT != 'GenuineIntel' ];
then exit 97
fi
exit 0

Ele diz o seguinte se não for intel, termine o instalador .

Procurei pela string GenuineIntel em outros arquivos, e encontrei no arquivo Parallels-Desktop.pkg/Contents/Info.plist , em :

<string>GenuineIntel</string>

Então, para descobrir qual era o meu processador, para os scripts do parallels, executei o comando (no terminal) :

 Parallels-Desktop.pkg/Contents/Resources/pkmkshellutility --sysctl machdep.cpu.vendor 

e ele devolveu :

 AuthenticAMD 

Então bastou trocar a string GenuineIntel pelo AuthenticAMD. Mas como a imagem dmg em questão é read-only, copie todo o conteúdo da imagem para um diretório qualquer. Altere o conteúdo desses dois arquivos que mencionei, trocando GenuineIntel por AuthenticAMD usando um editor de textos qualquer. Pra trocar as strings eu usei o sed, da seguinte forma :

 
sed -i .bak "s/GenuineIntel/AuthenticAMD/g" Parallels-Desktop.pkg/Contents/Info.plist 
sed -i .bak "s/GenuineIntel/AuthenticAMD/g" Parallels-Desktop.pkg/Contents/Resources/InstallationCheck 

Feito isso, pude desfrutar do parallels como em um legítimo macintel :)




0 comentários

TAGS : amd bash hack hackintel hackintosh ipc mac macintel osx parallels script sed shell

Posts relacionados

Delicious/liquuid/bash
Storage ZFS em FreeBSD :: blog do liquuid
Common shell script mistakes
Linux: Recursos avançados do bash que você não aprende na escola [Artigo]
liquuid's post :: Funções no bash
liquuid's post :: Rodando o Parallels em um HackIntel (iPC) AMD
bashwser
Bash Prompt HOWTO