File System ZFS na Raiz com FreeBSD 9
Postado por gondim | Categoria FreeBSD | Dia 12-04-2012
Tags:FreeBSD, mirroring, zfs
21
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!


4Webdesigner
BSD – Magazine
FreeBSD Brasil
Root BSD
Ola.
Bom dia.
Parabéns pela iniciativa e pelo Blog tbm, ficou show de bola.
Achei um erro na execução deste How-to.
Ao descompactar as bases vc esta ultilizando -unlink !
do (cat $file | tar –unlink -xpJf – -C ${DESTDIR:-/}); done
o correto seria –unlink.
do (cat $file | tar -–unlink -xpJf – -C ${DESTDIR:-/}); done
Do mais tudo certo.
Grande abraço.
Olá Flávio.. O texto está correto…porém o WordPress formata dois hifens seguidos (“–”) como um traço (“–”). Isso pode confundir o leitor … Bastou apenas editar o array “static_characters”, contido no arquivo wp-includes/formatting.php e tudo voltou ao normal…Obrigado pela dica ae…
Pois é depois que vi que até no meu comentário a formatação ficou igual a do how-to.
Mas agora esta ok.
Valeu.
Abraço.
Oi Flavio, na verdade tava certo foi a formatação do blog rsrsrsr mas já acertamos.
Ola Gondim, bom dia !
tudo certo.
Depois de instalar o FreeBSD 9 seguindo o how-to acima, fui atualizar o mesmo, processos normais:
make buildworld
make buildkernel, make installkernel, mergermaster etc.
Na hora do reboot o bicho pegou rssss a maquina não sobe.
Para no erro:
“mounting from zfs:zroot failed with error 2″
To dando uma googleada e to vendo que ja tem mais gente com o mesmo problema o erro é exatamente este (http://people.apache.org/~danielsh/infra/loki-20120215-mountfrom.png)
Já passou por isso ?
Abraço.
Olá Flávio,
Provavelmente no mergemaster você deve ter sobrescrito os arquivos /boot/loader.conf e/ou /etc/rc.conf. Faz um boot com o DVD/CD de instalação entra em sigle mode e checa conforme abaixo:
echo ‘zfs_enable=”YES”‘ >> /etc/rc.conf
echo ‘zfs_load=”YES”‘ >> /boot/loader.conf
echo ‘vfs.root.mountfrom=”zfs:zroot”‘ >> /boot/loader.conf
Detalhe que agora não tem mais o /mnt antecedendo os diretórios. 99,9999% de ser esse o problema.
Eu costumo sempre fazer um backup do /etc antes do mergemaster e uso assim:
mergemaster -i -F
Grande abraço
Pior que não é não.
O loader.conf esta ok, rc.conf tbm, fstab ok.
Eu tbm faço o backup do /etc antes de rodar o mergemaster e depois volto os aquivos mais criticos ex: rc.conf, fstab, etc.
chequei aqui e esta tudo certo.
Que raios sera que tá pegando heim.
Quando dá o erro lá você coloca: ? qual lista aparece de devices?
Aparece assim:
mountroot> ?
List of GEOM managed disk devices:
mountroot>
não é de Deus não hauahuahaa.
Seu /etc/fstab está vazio?
Sim Vasio Vasio.
Estranho, eu já atualizei vários servidores e não tive problema algum com isso. Recentemente até atualizei um stable. Ainda acho que teve algum processo errado.
Pois é to pensando seriamente em reinstalar, pra ver.
Mais tarde vou fazer uma nova instalação em uma VM aqui e testar atualizar para stable. Aí te digo.
Bom dia Gondim tudo certo por ai ?
Bom por aqui agora esta tudo 1000 maravilhas. huhuahaua
Descobri que o problema era com kernel.
Estava acostumado com o FreeBSD 8 e no 9 entrou alguns itens a mais. (ATA_CAM dentre outros )
Ai quando fui dar aquela enjugada no kernel tirei coisas a mais.
Do mais esta indo tudo certo.
Abraço e obrigado pela atenção.
Obs: Vou subir umas Jails e quanto tiver tudo certo mando um how-to pra vc postar.
Βuеnaѕ,
Seguramentе es la unicа ocaѕіon que he entrаdo еl blοg y debo comentar que me eѕta gustandο y сгеο
quе me ѵerаѕ mas а mеnuԁo pог tu blog.
Un ѕaludo!
Good day! Do you use Twitter? I’d like to follow you if that would be okay. I’m undoubtedly enjoying your
blog and look forward to new updates.
Check out my site :: movers Boulder
WOW just what I was looking for. Came here by searching for San Francisco best moving companies
My weblog Sherrie
This is really interesting, You are a very skilled blogger.
I’ve joined your rss feed and look forward to seeking more of your wonderful post. Also, I’ve shared your site in my
social networks!
Also visit my homepage: furniture moving companies San Francisco
Awesome issues here. I am very satisfied to peer your article.
Thank you so much and I’m looking ahead to contact you. Will you please drop me a mail?
Visit my site; San Francisco moving companies
At this time it looks like WordPress is the preferred blogging platform available right now.
(from what I’ve read) Is that what you are using on your blog?
my page – Claude