jueves, 16 de enero de 2014

Como instalar FreeBSD 9.2 con ZFS

Introducción

Debido a que es un poco complicado o engorroso de instalar FreeBSD con la raiz sobre ZFS y mediante varios artículos, no oficiales y el wiki oficial, me costo llegar a una configuración optima y básicamente, porque habían cabos sueltos que pienso atar en este articulo.

Para comenzar usaremos el nuevo bsdinstaller GPT, no MBR y seguiremos estas instrucciones paso a paso, para que saque máximo provecho a ZFS. Esta instalación no requiere tener EFI activado es en modo BIOS.
Nota 2014-01-27: Por estos días ha salido FreeBSD 10 y trae soporte desde el instalador, creando la misma configuración automáticamente. Y este documento solo podría ser usable si se desea usar ZFS como LVM para lo cual se debería aplicar la la opcion -V <size> en cada volumen. Lo que da un tamaño fijo a cada volumen, partición o punto de montaje.

Primera parte

Se debe efectuar una instalación normal y como de costumbre. Una vez arranca el disco o flash image de instalacion de freebsd selecionar el install.
Configurar el teclado:
Configurar el hostname en este caso freebsd porque será un template:
Configurar los paquetes ports y src pueden ser optativos, games fuera, la documentacion es altamente recomendable sobre todo para tener referencias a man-o:

Segunda parte

En la segunda parte se efectúan instrucciones en modo shell fuera del nuevo bsdinstaller y es aquí donde cambia el rumbo hacia el root sobre zfs, seleccionar shell y nos vamos al prompt.


Limpiamos el disco en este caso ada0 porque es sobre VBox VM.
gpart destroy -F ada0
Iniciar el disco GPT
gpart create -s gpt ada0
Crear el sector de arranque del disco GPT con un alineamiento especial para no usar zroot legacy.
gpart add -b 34 -s 94 -t freebsd-boot ada0
Crear el slice con el resto del disco sin crear freebsd-swap en vez de esto, ira sobre ZFS más adelante.
gpart add -t freebsd-zfs -l disk0 ada0
Marcar el disco como disco de arranque.
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
Configurar la flag de debug a 16 para ver por mensajes en caso de error
sysctl kern.geom.debugflags=0x10
Crear un gnop para linear los sectores a 4K esto mejora el rendimiento es una buena practica, indicando el altroot y finalmente montar.
gnop create -S 4096 /dev/gpt/disk0
zpool create -o altroot=/mnt -o cachefile=/var/tmp/zfs/zpool.cache zroot /dev/gpt/disk0.nop
zpool export zroot
gnop destroy /dev/gpt/disk0.nop
zfs mount zroot
Y esta el pool montado y se debe proceder a crear los volumes o particiones para optimizar mejor los recursos primero se configura el checksumer=fletcher4 que es lo más optimo para mantener la consistencia de los datos.
zfs set checksum=fletcher4 zroot
Para sacar provecho a zfs con la instalación se aplican opciones a cada volume, para así mejorar rendimiento, espacio y seguridad.
Nota 20/01/2014: El /var/crash no sirve de nada crearlo, ya que no se puede activar el dumpdev con ZFS por el momento, probé con un zvol pero es un dispositvo no valido, debido a que si el kernel cae antes de tener el modulo zfs.ko cargado no podría volcar core al zvol.
zfs create zroot/var
zfs create zroot/usr
zfs create zroot/usr/home
zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
zfs create -o exec=off -o setuid=off zroot/var/empty
zfs create -o exec=off -o setuid=off zroot/var/run
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 compression=lzjb -o exec=on  -o setuid=off zroot/var/tmp
#zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
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 compression=lzjb -o exec=off -o setuid=off zroot/usr/src
Crear la swap.
zfs create -V 2G zroot/swap -o org.freebsd:swap=on zroot/swap -o checksum=off zroot/swap
Esto se puede dejar para la post instalación si no se ha seleccionado el paquete de ports en el bsdinstaller.
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
Crear un link del home y agregar permisos a los tmp.
cd /mnt ; ln -s usr/home home
chmod 1777 /mnt/tmp
chmod 1777 /mnt/var/tmp
Y ahora exit para volver a la instalación.
exit

Tercera parte
Retomamos el nuevo bsdinstaller para continuar con una instalación y post configuración normal, esto tarda algunos minutos y requiere un poco de interacción para configurar las cosas tipicas passwor, zona horaria, usuarios, etc.
Ingresar la password de root.
En las siguientes imágenes se puede ver como configurar la NIC con la red en la que esta la maquina IPv4 en este caso y sin IPv6, y el respectivo Gateway y DNS.






Configurar la zona horaria, en este caso se selecciona una zona de Europa, pero bien puede ser America/Santiago u otra.




Configurar OpenSSH para que levante al arranque, recordar ir al directorio /etc/ssh y activar el PermitRootLogin yes, debido a que FreeBSD no lo permite por defecto. Por otro lado, para respetar esta politica lo mejor es crear un usuario en el grupo wheel dos paso más adelante o después que la instalación finaliza.

Crear usuarios es opcional.
Exit, para salir del bsdinstaller.

Cuarta parte y final

Ya finalizada la post configuración (yes) para volver a la shell, en el cual se terminara de configurar lo necesario para arrancar con zfs.


Una vez completada la instalación hacer los siguientes paso:

Copiar el zpool.cache
cp /var/tmp/zpool.cache /mnt/boot/zfs

Configurar zfs para arranque automatico de sus modulos.
echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
echo 'vfs.root.mountfrom="zfs:zroot"' >> /mnt/boot/loader.conf
echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf

Desactivar el almacenamiento de coredump's.
echo "kern.coredump=0" >> /etc/sysctl.conf