sábado, 22 de junio de 2013

Instalar FreeBSD 9 con root sobre ZFS optimizado a sectores de 4K y soporte para beadm

English version: Install FreeBSD 9 with root on ZFS optimized for 4K sectors and support for beadm


En los últimos 6 años he trabajado con sistemas en producción bajo Solaris 10 con arquitectura SPARC -M3000, M4000, V1280- donde he utilizado ZFS como sistema de ficheros.

Durante un tiempo he analizado soluciones para servidores en arquitectura x64 que se asemejaran en prestaciones y características a este tipo de entornos. 

Por supuesto la respuesta obvia es optar por entornos bajo Solaris 11 para x64; tecnológicamente es una  buena solución -tampoco perfecta- pero dado el evidente cambio de cultura corporativa que se ha producido tras la adquisición de SUN por ORACLE, no está demás evaluar alternativas.

Btrfs en entornos Linux parece una opción a tener en cuenta, sin embargo btrfs adolece, a mi juicio, de cierta inmadurez tecnológica que no lo hace aconsejable, de momento, para implantarlo en entornos de producción.

La solución que presento en este post es la que, a día de hoy, me parece de las más interesantes, pues aúna un S.O de código abierto, con una innegable madurez tecnológica y el que probablemente sea el mejor filesystem en la actualidad; ZFS.

Scripts para la creación del Root Pool


La instalación de FreeBSD 9 sobre ZFS requiere una serie de pasos adicionales que necesariamente son efectuados en linea de comandos. Con el propósito de hacer más cómodo  el proceso y reducir la probabilidad de cometer errores he creado unos shell scripts que serán ejecutados durante la de instalación. 


Script 1: env_fbsd_rpool.sh

Este script define una conjunto de variables de entorno que son utilizadas por el resto de scripts, para adaptar el comportamiento de los scripts a las necesidades específicas de cada instalación basta con cambiar las variables de entorno.

// Comienza el Script env_fbsd_rpool.sh
#!/bin/sh

now=$(date +"%d%m%Y")
BENAME="91_${now}"
RPOOLNAME="fbsdzpool1"
BEPATH=${RPOOLNAME}/ROOT/${BENAME}
SWAP_GB="4G"
GPT_DEV=freedsk1
ALT_ROOT=/mnt

export BENAME    #
Nombre del BE inicial
export RPOOLNAME # Nombre del Root Pool
export BEPATH    # Ruta del BE
export SWAP_GB   # Espacio al swap
export GPT_DEV   # Dispositivo de la instalacion
export ALT_ROOT  # Punto de montaje de la instalacion

echo ""
echo "Nombre del BE inicial              : ${BENAME}"
echo "
Nombre del Root Pool               : ${RPOOLNAME}"
echo "
Ruta del BE                        : ${BEPATH}"
echo "E
spacio del swap                   : ${SWAP_GB}"
echo "
Dispositivo de la instalacion      : ${GPT_DEV}"
echo "
Punto de montaje de la instalacion : ${ALT_ROOT}"
echo ""
// Fin  del Script env_fbsd_rpool.sh
 

Script 2: mk_fbsd_rpool.sh

Este script realiza la configuración del Root Pool y filesystems de FreeBSD.

//Comienza el Script mk_fbsd_rpool.sh
#!/bin/sh

. ./env_fbsd_rpool.sh

#
# Creamos el pseudo-dispositivo para inicializar el pool alineado con bloques de 4KB
#

echo ""
echo "Creando pseudo-dispositivo para ${GPT_DEV}"
echo ""

gnop create -S 4096 /dev/gpt/${GPT_DEV}
#
# Creamos el root pool
#

echo ""
echo "Creando Pool ${RPOOLNAME}"
echo ""

zpool create -f -m none -o cachefile=/var/tmp/zpool.cache ${RPOOLNAME} /dev/gpt/${GPT_DEV}.nop

#
# Destruimos de pseudo-dispositivo
#

zpool export ${RPOOLNAME}

echo ""
echo "Destruyendo pseudo-dispositivo para ${GPT_DEV}"
echo ""

gnop destroy /dev/gpt/${GPT_DEV}.nop
zpool import -N -o cachefile=/var/tmp/zpool.cache ${RPOOLNAME}

#
# Establecemos propiedades para la jerarquia de filesystems
#

echo ""
echo "Cambiamos propiedades de ${RPOOLNAME} "
echo ""

zfs set mountpoint=none ${RPOOLNAME}      # No se asigna punto de montaje al Root Pool
zfs set canmount=off ${RPOOLNAME}         # Evitamos que pueda montarse el Root Pool
zfs set checksum=fletcher4 ${RPOOLNAME}   # Algoritmo mejorado de deteccion de errores
zfs set atime=off ${RPOOLNAME}            # Desactivamos la fecha de acceso para los ficheros

#
# Creamos la Raiz de la jerarquia de filesystems
#

echo ""
echo "Creamos ${RPOOLNAME}/ROOT"
echo ""

zfs create -o canmount=off ${RPOOLNAME}/ROOT

echo ""
echo "Creamos ${BEPATH}"
echo ""

zfs create -o mountpoint=${ALT_ROOT} ${BEPATH}
zpool set bootfs=${BEPATH} ${RPOOLNAME}

#
# swap y /tmp
#

echo ""
echo "Creamos ${RPOOLNAME}/swap"
echo ""

zfs create -V ${SWAP_GB} ${RPOOLNAME}/swap
zfs set org.freebsd:swap=on ${RPOOLNAME}/swap
zfs set checksum=off ${RPOOLNAME}/swap

echo ""
echo "Creando ${RPOOLNAME}/tmp"
echo ""

zfs create -o compression=on -o exec=on -o setuid=off -o mountpoint=${ALT_ROOT}/tmp ${RPOOLNAME}/tmp
chmod 1777 ${ALT_ROOT}/tmp

#
# Jerarquia de /usr
#

echo ""
echo "Creando ${BEPATH}/usr ${BEPATH}/usr/home"
echo ""

zfs create ${BEPATH}/usr
zfs create ${BEPATH}/usr/home

cd ${ALT_ROOT} ; ln -s ${ALT_ROOT}/usr/home home

zfs create -o compression=lzjb -o setuid=off             ${BEPATH}/usr/ports
zfs create -o compression=off  -o exec=off -o setuid=off ${BEPATH}/usr/ports/distfiles
zfs create -o compression=off  -o exec=off -o setuid=off ${BEPATH}/usr/ports/packages
zfs create -o compression=lzjb -o exec=off -o setuid=off ${BEPATH}/usr/src

#
# Jerarquia de /var
#

echo ""
echo "Creando ${BEPATH}/var"
echo ""

zfs create ${BEPATH}/var
zfs create -o compression=lzjb -o exec=off -o setuid=off ${BEPATH}/var/crash
zfs create                     -o exec=off -o setuid=off ${BEPATH}/var/db
zfs create -o compression=lzjb -o exec=on  -o setuid=off ${BEPATH}/var/db/pkg
zfs create                     -o exec=off -o setuid=off ${BEPATH}/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off ${BEPATH}/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off ${BEPATH}/var/mail
zfs create                     -o exec=off -o setuid=off ${BEPATH}/var/run
zfs create -o compression=lzjb -o exec=on  -o setuid=off ${BEPATH}/var/tmp

chmod 1777 ${ALT_ROOT}/var/tmp

echo ""
echo "Examinamos el estado del pool ${RPOOLNAME}"
echo ""

zpool status ${RPOOLNAME}

echo ""
echo "Examinamos los puntos de montaje creados"
echo ""

mount 


echo ""
echo "Valor de ashift debe ser 12 para indicar que esta alineado a 4K "
echo ""

zdb -C -U /var/tmp/zpool.cache | grep ashift

echo ""
echo "Pulsanos CTRL-D y comienza la Instalacion"
echo ""
//Fin del Script mk_fbsd_rpool.sh


Script 3: post_install_fbsd_rpool.sh

Estos son los pasos finales del  proceso de instalación; se ejecuta justo después de concluir la instalación y antes del primer reboot.

//Comienza el Script post_install_fbsd_rpool.sh
#!/bin/sh

. ./env_fbsd_rpool.sh

zfs set readonly=on ${BEPATH}/var/empty
cp /var/tmp/zpool.cache ${ALT_ROOT}/boot/zfs/
ls -la ${ALT_ROOT}/boot/zfs/zpool.cache
touch ${ALT_ROOT}/etc/fstab

#
# NO SE HA INCLUIDO el parametro vfs.root.mountfrom DE FORMA PREMEDITADA
# por que a partir de la revision r243502 el root pool se detecta automaticamente.
# Ya no es necesario declararlo en loader.conf
#

cat << EOF >> ${ALT_ROOT}/boot/loader.conf
zfs_load=YES
opensolaris_load="YES"
EOF

cat << EOF >> ${ALT_ROOT}/etc/rc.conf
zfs_enable=YES
EOF

echo ""
more ${ALT_ROOT}/boot/loader.conf
echo ""

echo ""
more ${ALT_ROOT}/etc/rc.conf
echo ""

zfs umount -a

echo ""
echo "Asignado puntos de montaje definitivos a / /usr /tmp /var"
echo ""

zpool set cachefile='' ${RPOOLNAME}
zfs set mountpoint=legacy ${BEPATH}

zfs set mountpoint=/tmp ${RPOOLNAME}/tmp
zfs set mountpoint=/usr ${BEPATH}/usr
zfs set mountpoint=/var ${BEPATH}/var

reboot
//Fin del Script post_install_fbsd_rpool.sh


Tareas Previas a la instalación

Compatibilidad hardware 

Antes de instalar un sistema operativo hay que comprobar que no hay problemas de compatibilidad con el hardware del sistema.
  
La herramienta más importante de la que podemos disponer para acometer esta tarea, es la lista de compatibilidad que todos los proveedores de S.O disponen y FreeBSD no es una excepción.


Método de Instalación

Desgraciadamente para  nosotros no es posible instalar FreeBSD 9 empleando el  método de arranque de imágenes ISO  de GRUB2.

Como métodos de instalación, dejando aparte el montar un servidor de instalaciones por red, disponemos de imagen ISO con la instalación completa, una imagen para pendrive y una ISO de arranque que permite instalar desde los servidores de FreeBSD por internet.

En mi caso  voy a centrarme en el método de instalación con pendrive -memstick- y la  preparación del  mismo desde Linux, asumiendo que no disponemos de otro FreeBSD donde apoyarnos.


1.- Descargamos la imagen para memstick de FreeBSD 9 AMD64

2.- Procedemos a sobreescribir completamente con ceros el pendrive, asumiendo que nuestro dispositivo para el  pendrive  es /dev/sdb.
# sudo  dd if=/dev/zero of=/dev/sdb bs=128M
3.- Transferimos la imagen  con el comando dd.

# sudo dd if=FreeBSD-9.1-RELEASE-amd64-memstick.img  of=/dev/sdb  bs="10240" conv="sync"
4.- Opcionalmente montamos el pendrive para comprobar el contenido antes de instalar.
# sudo mount -t ufs -o ufstype=44bsd,ro /dev/sdb /mnt

 

Preparación de las Particiones

Esta guía  está enfocada a la instalación de FreeBSD 9 con el sistema de ficheros de root sobre ZFS sin espejos; en un entorno con GRUB2 como gestor de arranque, la tabla de particiones ya definida y  coexistiendo con otros S.Os.

Si  se pretende instalar FreeBSD 9 como S.O exclusivo con su propio bootloader la preparación de la tabla de particiones varía sustancialmente.

Revisamos la tabla de particiones, seleccionamos la particion 8 para instalar, cambiamos el tipo de partición a  FreeBSD ZFS -a504- y añadimos  como comentario "freedsk1" que utilizamos en los scripts  como nombre de dispositivo en /dev/gpt.

PASO 0:Selección de la partición para instalar

No olvidéis seguir las precauciones para instalar múltiples SOs; backup de la tabla GPT, la captura de pantalla con el listado de la tabla particiones y backup de los datos importantes.


Preparación de la entrada en  el Menú de Arranque de GRUB2


Normalmente este paso formaría parte de las Tareas Posteriores a la Instalación, pues suelo utilizar el UUID de Sistema de Ficheros para seleccionar la partición y éste se genera después de crear el sistema de ficheros durante la instalación.

Sin embargo, como estamos utilizando ZFS, conocemos a priori cual el es nombre del ZFS Pool y para GRUB2 este nombre es una etiqueta; así que podemos utilizarla para configurar la entrada en el fichero grub.cfg.

Si en un sistema se pretende instalar distintos S.Os con root sobre ZFS es una buena práctica utilizar nombres únicos para los Root Pools.

En caso contrario, si tenemos varios Root Pools con el mismo nombre, al buscar la partición  con el comando search de GRUB2, nos devolvería el primero que encontrara; por tanto este método no sería  útil y tendríamos que utilizar el UUID de sistema de ficheros.

La entrada en grub.cfg es la siguiente :

//COMIENZA EL FRAGMENTO
menuentry "FreeBSD 9 en freedsk1" {
        search --no-floppy --label --set=root fbsdzpool1
        kfreebsd /ROOT/91_30062013/@/boot/zfsloader
}
//FIN DE FRAGMENTO


Transferencia de los Scripts


Para poder emplear los scripts de configuración de ZFS para FreeBSD 9 es necesario que estén presentes una vez arrancado el menstick, existen varias posibilidades; copiarlos desde otro pendrive, configurar la red y transferirlos por ftp.

Voy a utilizar la partición auxiliar que tengo configurada en previsión de estas necesidades.

Por tanto, monto la  partición 19 y copio en ella los tres scripts antes mencionados.

 

Pasos de la Instalación

1.- Arranque del pendrive

Desde el menú de arranque de la BIOS elegimos arrancar el pendrive.


PASO 1a: Arrancamos Pendrive de la Instalación

Llegados al menú de Beastie pulsamos Enter o esperamos a que arranque automáticamente.

Paso 1b: Iniciamos FreeBsd 9

2.- Inicio de la Instalación, configuración básica

El instalador -bsdinstall- se inicia automáticamente desde el menú de Beastie.

Paso 2a: Menu Inicial seleccionamos Install

En el menú inicial elegimos la opción Instalar -Install- y efectuamos los  siguientes  pasos.
  1. Configuración del teclado, en mi caso cambio la configuración del teclado por defecto, para castellano yo escojo "Spanish ISO-8859-15".
  2. Asignación de nombre de host.
  3. Selección de Componentes de Sistema a Instalar, yo marco todos.
Para una información más detallada consultamos el HandBook.


3.- Configuración de la Tabla Particiones


En este punto se nos da a elegir entre particionar de forma guiada -Guided-, Manual o salir a la Shell. 

PASO3: En particionamiento elegimos SHELL

Salimos a la Shell.

Desde la Shell ejecutamos los siguientes comandos:

# mount -t ext2fs -o ro /dev/ada0p19 /media
# cp/media/*.sh /var/tmp
# cd /var/tmp
# chmod 750 *.sh
# ./mk_fbsd_rpool.sh >> mk_fbsd_rpool_log 2>&1

Comprobamos en el fichero de log mk_fbsd_rpool_log que no hay errores. 

# more mk_fbsd_rpool_log

//Inicio de log mk_fbsd_rpool_log
Nombre de Boot Enviroment inicial :  91_30062013
Nombre del Pool de ZFS para Root: fbsdzpool1
Ruta de Boot Enviroment : fbsdzpool1/ROOT/91_30062013
Espacio dedico al swap :  4G
Dispositivo que identifica la particion sobre la que se instala : freedsk1
Punto de montaje sobre el que se realiza la instalacion : /mnt
Creando pseudo-dispositivo para freedsk1
Creando Pool fbsdzpool1
Destruyendo pseudo-dispositivo para freedsk1
Cambiamos propiedades de fbsdzpool1
Creamos fbsdzpool1/ROOT
Creamos fbsdzpool1/ROOT/91_30062013
Creamos fbsdzpool1/swap
Creando fbsdzpool1/tmp
Creando fbsdzpool1/ROOT/91_30062013/usr fbsdzpool1/ROOT/91_30062013/usr/home
Creando fbsdzpool1/ROOT/91_30062013/var
Examinamos el estado del pool fbsdzpool1

  pool: fbsdzpool1
 state: ONLINE
  scan: none requested
config:

    NAME            STATE     READ WRITE CKSUM
    fbsdzpool1      ONLINE       0     0     0
      gpt/freedsk1  ONLINE       0     0     0

errors: No known data errors

Examinamos los puntos de montaje creados

/dev/ufs/FreeBSD_Install on / (ufs, local, noatime, read-only)
devfs on /dev (devfs, local, multilabel)
/dev/md0 on /var (ufs, local)
/dev/md1 on /tmp (ufs, local)
/dev/ada0p19 on /media (ext2fs, local, read-only)
fbsdzpool1/ROOT/91_30062013 on /mnt (zfs, local, noatime, nfsv4acls)
fbsdzpool1/tmp on /mnt/tmp (zfs, local, noatime, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/usr on /mnt/usr (zfs, local, noatime, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/usr/home on /mnt/usr/home (zfs, local, noatime, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/usr/ports on /mnt/usr/ports (zfs, local, noatime, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/usr/ports/distfiles on /mnt/usr/ports/distfiles (zfs, local, noatime, noexec, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/usr/ports/packages on /mnt/usr/ports/packages (zfs, local, noatime, noexec, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/usr/src on /mnt/usr/src (zfs, local, noatime, noexec, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/var on /mnt/var (zfs, local, noatime, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/var/crash on /mnt/var/crash (zfs, local, noatime, noexec, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/var/db on /mnt/var/db (zfs, local, noatime, noexec, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/var/db/pkg on /mnt/var/db/pkg (zfs, local, noatime, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/var/empty on /mnt/var/empty (zfs, local, noatime, noexec, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/var/log on /mnt/var/log (zfs, local, noatime, noexec, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/var/mail on /mnt/var/mail (zfs, local, noatime, noexec, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/var/run on /mnt/var/run (zfs, local, noatime, noexec, nosuid, nfsv4acls)
fbsdzpool1/ROOT/91_30062013/var/tmp on /mnt/var/tmp (zfs, local, noatime, nosuid, nfsv4acls)

Valor de ashift debe ser 12 para indicar que esta alineado a 4K

            ashift: 12

Pulsanos CTRL-D y comienza la Instalacion
//Fin de log mk_fbsd_rpool_log


PASO 3: Salida en Consola

4.- Carga del Sistema Base.

Desde la shell, pulsamos CTRL-D y automáticamente comienza a cargarse el sistema.

Paso 4: Carga de FreeBSD 9


5.- Configuración Adicional.

Una vez cargado el sistema, bsdintall nos guía por las siguientes tareas.
  1. Selección de la pasword de root.
  2. Configuración de los dispositivos de Red.
  3. Regionalización.
  4. Activación de Servicios durante el arranque.
  5. Activación del volcado de memoria -Crash Dump-.
  6. Creación de usuarios.
Para una información más detallada consultar el HandBook.

6.- Fin de la Instalación.

Una vez concluido el paso anterior -En el HandBook lo denominan Tareas Posteriores a la Instalación- se presenta una pantalla resumen desde donde se pueden hacer cambios o terminar. Nosotros elegimos Salir  -Exit-.
PASO 6a: Repaso Final de la Configuración seleccionamos Salir -Exit-
Antes de concluir la instalación se nos pregunta si queremos abrir una shell para realizar cambios sobre el nuevo entorno; RESPONDEMOS NO, pues es un entorno donde se ha ejecutado el comando chroot y no nos sirve para nada.


PASO 6b: Configuración Manual Seleccionamos NO

Finalmente, bsdinstall nos pregunta  si queremos reiniciar el sistema o  acceder al Live CD, RESPONDEMOS Live CD

PASO 6c: Como paso FINAL de BSDINSTALL elegimos LIVE CD
PASO 6d: Acceso al entorno Live Cd antes de reiniciar.

Nos validamos como root y en este instante donde procedemos a ejecutar el tercero de los scripts que realiza los  últimos -e importantes- pasos de configuración del Root Pool y reinicia la máquina.
# umount /media
# cd /var/tmp
# ./post_install_fbsd_rpool.sh


Tareas Posteriores a la Instalación

Una vez arrancado el sistema por primera vez, procedo a realizar 2 pasos que siempre hago en mis instalaciones de FreeBSD.

Actualización de la colección de Ports

Primero, antes que nada, actualizamos la colección de Ports, estos pasos solo se hace la primera vez. 
root@morsa:/root # portsnap fetch
root@morsa:/root # portsnap extract
root@morsa:/root # portsnap update
A partir de este momento para actualizar la colección de Ports utilizamos :
root@morsa:/root # portsnap fetch update

 

Instalación de portmaster

Esta herramienta simplifica la gestión de la colección de Ports.

Le incluimos el soporte para el nuevo gestor de paquetes.
root@morsa:/root # cd /usr/ports/ports-mgmt/pkg && make install clean
root@morsa:/root # cd /usr/ports/ports-mgmt/portmaster && make install clean
root@morsa:/root # echo 'WITH_PKGNG=yes' >> /etc/make.conf
root@morsa:/root # cp /usr/local/etc/portmaster.rc.sample /usr/local/etc/portmaster.rc
root@morsa:/root # pkg2ng
 
Editamos el fichero portmaster.rc y comprobamos los valores de las variables.

//Inicio fragmento portmaster.rc
# Always delete stale distfiles without prompting (-d)
ALWAYS_SCRUB_DISTFILES=dopt
# Be verbose (-v)
PM_VERBOSE=vopt
# Install packages for build-only dependencies (--packages-build)
PM_PACKAGES_BUILD=pmp_build
# Delete build-only dependencies when finished (--delete-build-only)
PM_DEL_BUILD_ONLY=pm_dbo
#Suppress the build confirmation message (--no-confirm)
PM_NO_CONFIRM=pm_no_confirm
//Fin de fragmento portmaster.rc

 

Instalación de beadm

Este ejemplo de instalación de root sobre ZFS que he realizado está concebido para adaptarse a la herramienta beadm que es con  la que gestionamos los entornos de arranque (Boot Enviroments).

1.- Instalamos beadm con portmaster
root@morsa:/root # portmaster sysutils/beadm

2.- Creamos el primer snapshot después de la instalación.
root@morsa:/root # beadm create 91_30062013@intall_r243825
3.- Listamos los BEs y snapshots disponibles
root@morsa:/root # beadm list -s
BE/Dataset/Snapshot                                              Active Mountpoint            Space Created

91_30062013
  fbsdzpool1/ROOT/91_30062013                                    NR     /                    378.1M 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/usr                                -      /usr                 357.0M 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/usr/home                           -      /usr/home            144.0K 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/usr/ports                          -      /usr/ports             1.4G 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/usr/ports/distfiles                -      /usr/ports/distfiles   1.7M 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/usr/ports/packages                 -      /usr/ports/packages  144.0K 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/usr/src                            -      /usr/src             509.0M 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/var                                -      /var                 692.0K 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/var/crash                          -      /var/crash           148.0K 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/var/db                             -      /var/db              149.1M 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/var/db/pkg                         -      /var/db/pkg          280.0K 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/var/empty                          -      /var/empty           144.0K 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/var/log                            -      /var/log             316.0K 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/var/mail                           -      /var/mail            152.0K 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/var/run                            -      /var/run             452.0K 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013/var/tmp                            -      /var/tmp             256.0K 2013-06-30 14:39
  fbsdzpool1/ROOT/91_30062013@intall_r243825                     -      -                    120.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/usr@intall_r243825                 -      -                      8.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/usr/home@intall_r243825            -      -                      0.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/usr/ports@intall_r243825           -      -                      8.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/usr/ports/distfiles@intall_r243825 -      -                      8.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/usr/ports/packages@intall_r243825  -      -                      0.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/usr/src@intall_r243825             -      -                      8.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/var@intall_r243825                 -      -                    124.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/var/crash@intall_r243825           -      -                      0.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/var/db@intall_r243825              -      -                    132.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/var/db/pkg@intall_r243825          -      -                      8.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/var/empty@intall_r243825           -      -                      0.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/var/log@intall_r243825             -      -                    108.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/var/mail@intall_r243825            -      -                      8.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/var/run@intall_r243825             -      -                    184.0K 2013-06-30 16:00
  fbsdzpool1/ROOT/91_30062013/var/tmp@intall_r243825             -      -                    100.0K 2013-06-30 16:00

 

Consideraciones finales

Esta guía de instalación está pensada para optimizar ZFS sobre los discos actuales, cuyos sectores físicos son de 4K, frente a los 512 bytes tradicionales; aunque se sigan presentado a la BIOS y SOs como de sectores de 512 bytes. 
Si no se tiene en cuenta esta circunstancia a la hora  de alinear las particiones y crear los sistemas de ficheros, supone una degradación de rendimiento en E/S a disco.

Finalmente vamos a analizar brevemente la jerárquía de ZFS definida:

fbsdzpool1: Es el pool de ZFS donde residen los BEs de FreeBSD.
fbsdzpool1/ROOT: Es el sistema de archivos Raiz común para todos los BEs.
fbsdzpool1/swap: El swap lo defino dentro del pool y es común para todos los BEs.
fbsdzpool1/tmp: El sistema de ficheros /tmp también es común para todos los BEs.
fbsdzpool1/ROOT/91_30062013: Es el BE inicial donde se realiza la instalación de Freebsd. De este punto parten los directorios estandar /, /usr, /usr/home, /var.
 
Cada BE tiene su propia copia de /usr/ports y /var. Lo hago así porque después de una actualización de versión principal hay que reconstruir la colección de puertos como parte del proceso de actualización. Por lo tanto, si algo va mal, tenemos que revertir la colección de ports y paquetes instalados, no sólo el S.O.

Otro opción, muy popular, es que /var y /usr/ports cuelguen directamente de fbsdzpool1 y así queden compartidos entre todos los BEs -esta opción no está contemplado en los scripts en su versión actual-.

En todo caso  /var y /usr/ports deben ir parejos; o se comparten entre los BEs o son locales a cada BE, pero  los dos juntos.

También es habitual ver al directorio /usr/home  fuera del BE colgando directamente de  fbsdzpool1, yo lo prefiero local a cada BE -esta opción no está contemplado e  los scripts en su versión actual-

No hay comentarios:

Publicar un comentario en la entrada

Vuestros comentarios son bien recibidos, os animo a contribuir proponiendo temas que os interesen para desarrollar en este blog.