segunda-feira, 30 de junho de 2014

ZFS no Debian Jessie (testing) - parte 3

Tenho armazenado, no meu sistema de arquivos zfs, algumas imagens .vdi de máquinas virtuais do VirtualBox na tentativa de ter um acesso a disco um pouco mais acelerado devido à raidz implantada.

Quem tiver curiosidade sobre o processo de implementação do pool zfs pode verificar em:

Infelizmente notei que após carregar as máquinas virtuais em ficava com a memória praticamente lotada e mesmo depois de desligar as máquinas virtuais a memória continuava lotada sendo que nada era cache. E quando digo lotado é basicamente 6GB de meus 8GB de RAM.

Por acaso resolvi encerrar todos os processos e dar um "modprobe -r zfs". Após isto é que tive meus GBs de memória de volta.

Como não fazia a mínima ideia de como contornar esta situação, após alguma pesquisa cheguei neste post: Excessive memory use with ZFS [SOLVED sort of].

Ainda estou avaliando a solução, mas prontamente já tive uma melhora no cenário, sendo que não cheguei a ficar com mais de 4GB comprometidos. Isto com o meu sistema desktop carregado, com o Iceweasel aberto e muitas abas.

Basicamente a solução consistem em criar o arquivo /etc/modprobe.d/zfs.conf com o conteúdo:
options zfs zfs_arc_max=2147483648

Pelo que entendi este valor seria em bytes e serve como a quantidade máxima de memória utilizada pelo sistema de cache do ZFS o ARC.

Mais informações sobre o tunning do ARC em http://docs.oracle.com/cd/E26502_01/html/E29022/chapterzfs-3.html.


quinta-feira, 12 de junho de 2014

ZFS no Debian Jessie (testing) - parte 2

Continuando o exposto na primeira parte deste tutorial (bom, vou chamá-lo assim agora) em http://meumaravilhosomundolivre.blogspot.com.br/2014/06/zfs-no-debian-jessie-testing.html, partimos para a resolução de alguns inconvenientes encontrados ao compilar e instalar o ZFS a partir do repositório git.

Notei que, depois de criado um sistema de arquivos de tamanho fixo, o dispositivo de bloco correspondente não era criado.
  • Criar o sistema de arquivos com tamanho fixo e verificar a existência do dispositivo de bloco correspondente:
zfs create mypool01/data -V 10G
ls -al /dev/zvol/mypool01/data

ls: não é possível acessar /dev/zvol/mypool01/data: Arquivo ou diretório não encontrado
 


O problema é que nem mesmo /dev/zvol existia, então eis os passos para contornar isto.
  • Copiar os arquivos udev para o local correto:
cp /usr/lib/udev/rules.d/60-zvol.rules /etc/udev/rules.d
cp /usr/lib/udev/rules.d/69-vdev.rules /etc/udev/rules.d

  • Criar o arquivo /etc/default/zfs com o conteúdo:
ZFS_MOUNT=yes
ZFS_UNMOUNT=yes
ZFS_SHARE=no

  • Confirmar a execução do script /etc/init.d/zfs-mount na inicialização padrão:
update-rc.d zfs-mount defaults
Foi importante que o script zfs-mount rodasse na inicialização para que não fosse necessário rodar um simples "zpool status" para que o dispositivo de bloco correspondentes ao sistema de arquivos mypool01/data aparecesse logo após o sistema carregado.

terça-feira, 10 de junho de 2014

ZFS no Debian Jessie (testing) - parte 1

Finalmente depois de tanto querer, e com todo o incentivo do André Machado (Serpro), eis que me aventurei a brincar com o ZFS.

Os problema começaram desde cedo porque não pude seguir o artigo oficial em http://zfsonlinux.org/debian.html, pois a versão empacotada não compila com o kernel 3.14.

Então inicia a caçada a alguma coisa que ajude no processo de por o ZFS em pé. Entre, quem sabe, tantas outras, optei pela compilação com a ajuda do artigo http://www.graymatterboundaries.com/?p=49, configuração com a ajuda do artigo http://bernaerts.dyndns.org/linux/75-debian/279-debian-wheezy-zfs-raidz-pool e o "3.0 Frequent Mistakes" em https://github.com/zfsonlinux/pkg-zfs/wiki/Ubuntu-ZFS-mountall-FAQ-and-troubleshooting.

Na verdade eu vou relatar basicamente este artigo com um detalhe final que logo explico. Eis o passo a passo:

  • Instalar o kit para compilação do zfs
apt-get install build-essential git autoconf libtool zlib1g-dev uuid-dev linux-headers-$(uname -r)
  • Clonar os repositórios em /root
mkdir /root/zfsonlinux
cd /root/zfsonlinux
git clone https://github.com/zfsonlinux/spl.git
git clone https://github.com/zfsonlinux/zfs.git

  • Compilar e instalar o SPL
cd /root/zfsonlinux/spl
./autogen.sh
./configure --prefix=/usr
make
sudo make install


(gerando pacotes Debian)
./autogen.sh
./configure
make deb
dpkg -i *.deb
  • Compilar e instalar o ZFS
cd /root/zfsonlinux/zfs
./autogen.sh
./configure --with-spl=/root/zfsonlinux/spl --prefix=/usr
make
sudo make install


(gerando pacotes Debian)
./autogen.sh
./configure
make deb
dpkg -i *.deb

Em meu cenário simplificado utilizei 3 discos SATA de 2TB para criar uma raidz utilizando a notação /dev/sd{a,b,c}. Para produção a recomendação uma alternativa com nomeação de dispositivo independente da instalação do sistema operacional, como a obtida em /dev/disk/by-id/.
  • Criando e configurando um pool raidz
zpool create -f -m none -o ashift=12 mypool01 raidz /dev/sda /dev/sdb /dev/sdc
zfs set atime=off mypool01
zfs set dedup=off mypool01
  • Criando um sistema de arquivo em mypool01 e definindo o ponto de montagem
mkdir /pool/data
zfs create mypool01/data
zfs set mountpoint=/pool/data mypool01/data

Até aqui tudo bem, o problema foi que depois de reiniciar, simplesmente eu não conseguia mais acesso ao pool, simplesmente um "zpool list" não listava os pools. Do que pude entender, o que controla a existência do pool zfs é o arquivo zpool.cache e eu não tinha este arquivo em parte alguma do meu sistema.
  • Para criar este arquivo depois de criado o pool rodei:
mkdir /etc/zfs
zpool set cachefile=/etc/zfs/zpool.cache mypool01

Fiz alguns teste, renomeando o arquivo zpool.cache para zpool.cache.old, e realmente o zfs não encontra o pool sem este arquivo.
Uma solução de contorno pra quem criou o pool e reiniciou o sistema sem criar o arquivo zpool.cache é importar o pool e criar o arquivo zpool.cache. O importante é lembrar do nome do pool que foi criado, pois eu não descobri como obter o nome do pool com o zpool list.
  • Para importar o pool
zpool import mypool01

Acredito que com isto já seja possível começar a brincar com o ZFS sem muitas dores de cabeça.