segunda-feira, 4 de maio de 2015

ZFS sobre volume iscsi (initiator com open-iscsi). ZVOL entregue sob iscsi (target com iscsitarget). Isto no novíssimo Debian Jessie.

Temos um storage que pensei em dar uma incrementada e prover uma solução de backup e preservação de dados utilizando ZFS. A ideia foi "por que não criar um pool ZFS em um volume do storage e entregar um ZVOL através de iscsi para uso, seja pelo servidor de arquivos ou XenServer?"

Como não posso atualizar o sistema operacional do storage, para isto precisaria de um host intermediário com duas interfaces de rede, uma ligada ao storage, outra para o initiator.

Neste host intermediário instalei o novíssimo Debian Jessie (https://www.debian.org/CD/http-ftp/#stable) e ZoL (http://zfsonlinux.org/debian.html).

Instalei os pacotes open-iscsi e iscsitarget. Depois disto foi só alterar alguns arquivos de configuração.

Logo depois de instalado o open-iscsi e antes dos comandos iscsiadm para descoberta de luns, alterei o arquivo /etc/iscsi/iscsid.conf, substituindo a linha "node.startup = manual" por "node.startup = automatic".

Com o advento do systemd, tive que fazer muita experimentação até conseguir fazer com que a ordem de execução dos daemons open-iscsi, zfs e iscsitarget ocorressem exatamente nesta ordem:

1º open-iscsi para conexão à lun do storage;
2º zfs para importação do pool criado e descrito em /etc/zfs/zpool.cache;
3º iscsitarget para disponibilizar volumes iscsi para outros initiators a partir de dispositivos ZFS, os ZVOLs.

Eis as alterações necessárias nos daemons para que se cumpra esta ordem:
1º open-scsi:
não exige alteração alguma;
2º zfs:
alteração do arquivo /lib/systemd/system/zfs-mount.service:
adicionar comentário na linha "#Before=local-fs.target";
adicionar a linha "After=open-iscsi.service"
3º iscsitarget:
adicionar "zfs-mount nas linhas
# Required-Start:    $remote_fs $syslog $network $time procps zfs-mount
# Required-Stop:     $remote_fs $syslog $network $time procps zfs-mount

Finalizando, já havia tido alguma experiência com falta de memória para o sistema operacional, devido ao cache do ZFS (provavelmente), que consegui contornar com a seguinte linha em /etc/sysctl.conf:
"vm.min_free_kbytes=1048576 "

Pronto! Reiniciando e tudo estando disponível automaticamente logo após o boot, basta fazer uso da lun pelos initiators. Depois basta criar snapshots e exportá-los, para preservação de dados e criação de backups.

terça-feira, 30 de dezembro de 2014

Debian: xHCI xhci_drop_endpoint called with disabled ep

Passei a utilizar um computador Positivo com usb3.0 que estava me deixando maluco com as mensagem "xHCI xhci_drop_endpoint called with disabled ep" no log... muitas mensagens. Acredito até que eu estava tendo lentidão no acesso a dispositivos usb devido a isto.

Como atualmente não utilizo nenhum dispositivo usb3.0 acabei por tentar desabilitar o uso do módulo xhci com os seguintes arquivos em /etc/modprobe.d

Arquivo xhci com o conteúdo:
options xhci enable=0

e o arquivo xhci_hcd com o conteúdo:
options xhci_hcd enable=0

Provavelmente funcione com somente o segundo arquivo, mas como testei assim e já funcionou, fica a dica.

quinta-feira, 23 de outubro de 2014

rsync "cannot delete non-empty directory"

Se a execução do rsync está lhe causando arrepios com a mensagem "cannot delete non-empty directory" quando se está utilizando --delete para que o que é excluído na origem seja refletido no destino, pode ser que esteja acontecendo o mesmo que mim.

Inicialmente meu rsync era assim:


rsync -avh --delete

E então alterei para isto:

rsync -avh --exclude=Thumbs.db --delete

Acabou acontecendo de muitos arquivos Thumbs.db continuarem no destino e o --delete não observa que eles foram excluídos na origem, porque eles continuam lá. Então o que temos a fazer é --delete-excluded, para que estes arquivos que estão na origem, mas foram filtrados, e não queremos que eles continuem no destino, porque ficaram lá por uma alteração de política de rsync:

rsync -avh --delete-excluded --exclude=Thumbs.db --delete

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.

quinta-feira, 25 de agosto de 2011

Alterando a index key da configuração WEP no Android 2.2

Ontem chegou meu tablet android 2.2 chinês. Dizem que é pra ser um Herotab C8, embora o único nome que encontrei foi SM500CC no manual.

Bem, primeira dificuldade foi conectar à rede sem fio com criptografia WEP utilizando a index key 2, ou 1 se começar a contar do 0. Antes que me critiquem pelo uso de WEP, não está sob minha administração direta.

Depois de penar tentando achar a bendita configuração, somente de pois de instalar o http://android-wifi-ace.googlecode.com/é que consegui facilmente setar a chave 2 (facilitando, segunda chave de quatro).

Pra instalar o apk foi bem fácil, simplesmente copiei o arquivo pro root do armazenamento do tablet (ainda não tenho um SD) e então rodar o ApkInstall (que já veio com o tablet) e pronto.

Enjoy yourself!