File System ZFS na Raiz com FreeBSD 9
Posted by gondim | Posted in FreeBSD | Posted on 12-04-2012
Tags:FreeBSD, mirroring, zfs
31
ZFS é um Sistema de Arquivos brilhante! Extremamente seguro, rápido e com recursos que outros filesystems gostariam de ter. O ZFS vem no FreeBSD 9.0 com uma nova atualização e novos recursos. Infelizmente no instalador do FreeBSD 9.0 ainda não temos a opção de instalação do ZFS, todavia isso pode ser contornado usando ou o PC-BSD 9.0 ou fazendo o processo manualmente. O que mostrarei aqui neste post é uma configuração feita pelo George Kontostanos em seu post original ZFS Root.
A configuração à seguir usa um esquema com GPT e swap em ZFS:
1º Para iniciar nossa instalação precisaremos ter em mãos o DVD de instalação do FreeBSD. Precisa ser o DVD que pode ser baixado daqui:
FreeBSD 9.0 64 bits
FreeBSD 9.0 32 bits
2º Começaremos então a nossa configuração. Nesse post teremos a configuração para 1 disco apenas e a opção com 2 discos, nesse caso para fazer um mirroring.
a) Criando a partição GPT e adicionando o código de inicialização do ZFS no boot no 1º disco apenas:
gpart create -s gpt ada0 gpart add -b 34 -s 94 -t freebsd-boot ada0 gpart add -t freebsd-zfs -l disk0 ada0 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 |
b) Criando a partição GPT e adicionando o código de inicialização do ZFS no boot no 2º disco para mirroring:
gpart create -s gpt ada1 gpart add -b 34 -s 94 -t freebsd-boot ada1 gpart add -t freebsd-zfs -l disk1 ada1 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1 |
3º Vamos criar o pool.
a) Para um disco apenas:
gnop create -S 4096 /dev/gpt/disk0 zpool create -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot /dev/gpt/disk0.nop zpool export zroot gnop destroy /dev/gpt/disk0.nop zpool import -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot |
b) Para um segundo disco no caso de mirroring:
gnop create -S 4096 /dev/gpt/disk0 gnop create -S 4096 /dev/gpt/disk1 zpool create -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot mirror /dev/gpt/disk0.nop /dev/gpt/disk1.nop zpool export zroot gnop destroy /dev/gpt/disk0.nop gnop destroy /dev/gpt/disk1.nop zpool import -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot |
4º Vamos setar aqui o bootfs e checksum do nosso ZFS.
zpool set bootfs=zroot zroot zfs set checksum=fletcher4 zroot |
5º Agora vamos criar nossos filesystems. Aqui vale também a imaginação e a criatividade. No meu caso fiz algumas adições mas estou mantendo a configuração original. Essa é uma das grandes vantagens do ZFS, a flexibilidade, como podem notar. Reparem que podemos comprimir um filesystem com ‘compression’, também podemos dizer se nesse filesystem podemos executar binários com ‘exec’ e ainda se vai desligar o suid com ‘setuid’. O ‘quota’, embora não apareça nesse nosso exemplo, também é muito útil para limitações de espaço.
zfs create zroot/usr zfs create zroot/usr/home zfs create zroot/var zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp zfs create -o compression=lzjb -o setuid=off zroot/usr/ports zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash zfs create -o exec=off -o setuid=off zroot/var/db zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg zfs create -o exec=off -o setuid=off zroot/var/empty zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail zfs create -o exec=off -o setuid=off zroot/var/run zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp |
6º Criaremos nosso swap de 4Gb mas faça de acordo com a sua necessidade.
zfs create -V 4G zroot/swap zfs set org.freebsd:swap=on zroot/swap zfs set checksum=off zroot/swap |
7º Abaixo a criação do link simbólico do home e acerto nas permissões do /tmp e /var/tmp.
chmod 1777 /mnt/tmp cd /mnt ; ln -s usr/home home chmod 1777 /mnt/var/tmp |
8º Chegamos na instalação propriamente dita do nosso FreeBSD 9.0 na sua forma mais crua.
sh cd /usr/freebsd-dist export DESTDIR=/mnt for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz; do (cat $file | tar –unlink -xpJf – -C ${DESTDIR:-/}); done |
9º Essa parte agora é IMPORTANTÍSSIMA. Não esqueça de fazer ou sofrerá as conseqüências. rsrsrs
cp /var/tmp/zpool.cache /mnt/boot/zfs/zpool.cache |
10º Aqui vamos habilitar o ZFS no boot, dizer quem vai ser nosso raiz do sistema e criar um fstab vazio. Sim vazio porque o ZFS não usa o fstab mas ele precisa existir para que não dê erro no boot do sistema.
echo ‘zfs_enable=”YES”‘ >> /mnt/etc/rc.conf echo ‘zfs_load=”YES”‘ >> /mnt/boot/loader.conf echo ‘vfs.root.mountfrom=”zfs:zroot”‘ >> /mnt/boot/loader.conf touch /mnt/etc/fstab |
Reinicie agora e assim que carregar ajuste o time zone info com tzsetup, coloque uma senha para o root com o passwd e adicione um usuário seu de acesso usando o adduser. Feito isso… be happy!