quinta-feira, 10 de junho de 2010

ZFS-fuse Vs BTRFS - Abordagem simples

Com base em um sistema Debian Testing já instalado em um Virtualbox faço uma abordagem simples sobre estes dois excelentes sistemas de arquivos.

Para ficar divertido adicionei mais 4 discos de 1GB usando o Vbox.

# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00001c8c

Dispositivo Boot Start End Blocks Id System
/dev/sda1 * 1 303 2433816 83 Linux
/dev/sda2 304 1044 5952082+ 5 Estendida
/dev/sda5 304 344 329301 82 Linux swap / Solaris
/dev/sda6 345 1044 5622718+ 83 Linux

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Dispositivo Boot Start End Blocks Id System
/dev/sdb1 1 130 1044193+ 83 Linux

Disk /dev/sdc: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Dispositivo Boot Start End Blocks Id System
/dev/sdc1 1 130 1044193+ 83 Linux

Disk /dev/sdd: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Dispositivo Boot Start End Blocks Id System
/dev/sdd1 1 130 1044193+ 83 Linux

Disk /dev/sde: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Dispositivo Boot Start End Blocks Id System
/dev/sde1 1 130 1044193+ 83 Linux


com base nisso, vamos ao que interessa.


Atualizando a base APT:

# echo "deb http://http.us.debian.org/debian testing main contrib non-free" >> /etc/apt/sources.list && apt-get update

Atualizando o Kernel:

# apt-get install linux-image-2.6.32-3-686 linux-headers-2.6.32-3-686 -y && reboot



ZFS-Fuse [Zeta Byte File System]

Criei um diretório /home/zfs para este exemplo.

# apt-get install zfs-fuse

Opa, o zfs sobe automáticamente:
# ps -aux | grep fuse
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
root 1487 0.1 1.8 1165316 7160 ? Ssl 11:19 0:04 /sbin/zfs-fuse

caso não suba:

# zfs-fuse & >> /dev/null

Indo direto ao que interessa.

Resolvi disponibilizar 3 discos para ZFS, bom .. poderia ser um disco solitário, mas testar crash tem mais graça.

# zpool create ZFS raidz /dev/sdb1 /dev/sdc1 /dev/sdd1

# zpool status

pool: ZFS
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
ZFS ONLINE 0 0 0
raidz1 ONLINE 0 0 0
sdb1 ONLINE 0 0 0
sdc1 ONLINE 0 0 0
sdd1 ONLINE 0 0 0

errors: No known data errors

Com o status conseguimos enxergar informações sobre o pool.

# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
ZFS 2,97G 43,6M 2,93G 1% ONLINE -

Listagem de pools é com list (dã).

Caso necessite alterar o caminho do pool.
# zfs set mountpoint=/home/ZFS ZFS

E seu pool troca de caminho...

# zfs create ZFS/joaocep

E eu crio um novo volume "joaocep" dentro de "ZFS"
é interessante possuir áreas dentro dos Pools.

# zfs set compression=on ZFS/joaocep

E seu pool ganha compactação

# zfs set shareiscsi=on ZFS/joaocep

E seu pool NÃO ganha um compartilhamento iscsi simples, isso mesmo... no linux a bagaça ainda não foi implementada --- mas no Opensolaris basta um pkg install SUNWisgt.

Ok, vamos aos snapshots, a parte mais interessante de um sistema inteligente.

Uma cosisa legal - sintaxe

# zfs snapshot NOMEDOPOOL@NOME-DO-BACKUP

# zfs snapshot ZFS@backup-raiz1
# zfs snapshot ZFS/joaocep@backup-subdir1


Acima dois exemplos de formas de backup, de pastas e sub-pastas.

Tá, e o restore?

# zfs rollback ZFS@backup-raiz1
feito, ele retorna o backup de ZFS.

Para verificar os seus volumes, use o comando list (dã)

# zfs list
# zfs list -t snapshot
# zfs list -t all


Clonando subvolumes:

# zfs clone ZFS/joaocep@backup-subdir1 ZFS/joaomancy

Note, antes de criar um "clone" faça um snapshot - o clone só será feito usando um snapshot anterior.

Infelizmente nem todas as funções foram portadas para zfs-fuse -- a grosso modo, no Linux.



BTRFS [B-tree File System]


O Btrfs possui uma grande vantagem, ele converte filesystem ext3 em btrfs usando uma lógica simples ( https://btrfs.wiki.kernel.org/index.php/Conversion_from_Ext3 )

Criei um diretório /home/brtfs para este exemplo.

Instalando e Convertendo:
# apt-get install btrfs-tools -y && fsck.ext3 -f -y /dev/sde1 && btrfs-convert /dev/sde1

Montando a Partição
# mount -t btrfs /dev/sde1 /home/btrfs

Onboot
# echo "/dev/sde1 /home/btrfs btrfs defaults 0 0" >> /etc/fstab

Vamos a parte boa!

Uma dica importante, lembra dos POOL do ZFS, então. um snapshot só poderá ser montando dentro do próprio POOL ( Slice no BSD, Volume Novel, Partição Extendinda com Volume Lógico... como seu cérebro entender )

Criando um Subvolume ( -S cria, -D Destroi):
# btrfsctl -S arquivos /home/brtfs/

Criando um Snapshot do subvol arquivos:
# btrfsctl -s bkarquivos /home/brtfs/arquivos

Voltando um "backup" do btrfs - rollback:
Esta tarefa é simples, ele guarda a imagem na "raiz" do pool no caso um diretório /home/btrfs/bkarquivos - copie o arquivo e pronto.

Verificando o seu sistema de arquivos:
# btrfs-show
Label: none uuid: 7c36bf25-6c45-48bf-adaf-73f9dab93b42
Total devices 1 FS bytes used 93.11MB
devid 1 size 1019.72MB used 1019.72MB path /dev/sde1

Btrfs Btrfs v0.19

Se quiser voltar para ext3 ( rollback de filesystem )

# umount /home/btrfs
# btrfs-convert -r /dev/sde1


Não esqueça de trocar o btrfs da fstab e montar com ext3

Criação de Raid usando btrfs:
https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices

Pensou que eu fosse reinventar a roda é...

Minhas Conclusões:

Sinceramente prefiro o ZFS, há muito mais opções e sua sintaxe é simples, btrfs não esconde os snapshots o que atrapalha caso "metidos a admin" queiram visualizar os documentos contidos em seus sistemas.

Há implementações boas no btrfs que superam o zfs-fuse, como o resize de volumes (LVM faz isso) e "QUOTAS" de disco.

ZFS para Opensolaris possui tudo isso com Plus -- Solaris Zones dentro de um subvol é violento , ou shareiscsi=on .

Claro, alguém vai querer Benchmark veja nos links abaixo:
http://oss.oracle.com/projects/btrfs/dist/documentation/benchmark.html
http://www.linux-mag.com/id/7308

Independente de "Velocidade" para minha pessoa ZFS é muito melhor, mas cada caso é um caso e eu penso sinceramente testar btrfs em um Zimbra -- por exemplo.

Grande abraço a todos.

Referências:
https://btrfs.wiki.kernel.org
http://zfs-on-fuse.blogspot.com/

OBS: Esta abordagem não credencia você a sair destruindo o seu disco para usar ZFS ou Btrfs.