Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

NILFS, sistema de ficheros con soporte para versionado


NILFS es un sistema de ficheros que nos permite hacer checkpoitns de forma automática y eliminarlos pasado un tiempo, esto nos permitirá recuperar ficheros borrados de forma accidental o retroceder a versiones antiguas antes de realizar algún cambio.
NILFS es apropiado para operaciones con ficheros pequeños pero no para bases de datos ya que no se libera espacio hasta que pasa el recolector de basura, entonces libera los checkpoints y recupera espacio, pero el recolector es una tarea pesada, si pasa muy a menudo el rendiemiento se ve afectado.
Por lo tanto es ideal para algún tipo de NAS en el que se almacenen pequeños ficheros como documentos o el dir /etc por ej.
Los cps(checkpoints) se hacen cada cierto tiempo o en las escrituras sync si hay cambios en los ficheros.

 

Compilamos el kernel con soporte para NILFS:

File systems  ---> NILFS2 file system support

 

Compilamos las herramientas necesarias para su gestión:

emerge -av sys-fs/nilfs-utils

 

NOTA: Un sistema de ficheros NILFS requiere un tamaño mínimo de 134217728 bytes --> 135MB

mkfs -t nilfs2 /dev/sdb1
mkdir /mnt/tmp/
mount -t nilfs2 /dev/sdb1 /mnt/tmp/
cd /mnt/tmp/
echo AA > 11

 

Los comandos para gestionar el sistema de ficheros son:

  • lscp     lists checkpoints.
  • mkcp     makes a checkpoint.
  • mkcp -s  makes a snapshot.
  • chcp     changes an existing checkpoint to a snapshot or vice versa.
  • rmcp     invalidates specified checkpoint(s).

 

Cambiamos el checkpoint a snapshot ya que si no lo hacemos no podemos montarlo:

lscp

                 CNO        DATE     TIME  MODE  FLG     NBLKINC       ICNT
                   1  2014-02-28 08:19:46   cp    -           11          2
                   2  2014-02-28 08:20:12   cp    -           14          3

 

El 1 es el cp de cuando se generó el sistema de ficheros, el 2 es cuando se realizó el cambio.


Generamos el snapshot:

mkcp -s
lscp

                 CNO        DATE     TIME  MODE  FLG     NBLKINC       ICNT
                   1  2014-02-28 08:19:46   cp    -           11          2
                   2  2014-02-28 08:20:12   ss    -           14          3

 

Realizamos cambios:

rm /mnt/tmp/11

 

Montamos el snapshot:

mkdir /mnt/cp
mount -t nilfs2 -r -o cp=2 /dev/sdb1 /mnt/cp
cat /mnt/cp/11
AA

 

NOTA: El snapshot solo es de lectura, pero será suficiente para recuperar ficheros borrados de forma accidental.

 

Podemos ver los sistemas de ficheros NILFS montados con:

df -t nilfs2
mount -t nilfs2

 

Podemos pasar el cleaner de froma manual si necesitamos espacio:

nilfs-clean /dev/sdb1

 

Desmontamos el snapshot y el montaje original:

umount /mnt/cp
umount /mnt/tmp/

NOTA: Nilfs-utils tiene un bug que provoca que el umount no pare el cleaner por lo tanto no nos dejará desmontar, lo paramos manualmente:

nilfs-clean -q

 

El servicio cleaner se encarga de liberar espacio y reciclar cps, este se configura mediante /etc/nilfs_cleanerd.conf.

Si se realizan cambios no es necesario matarlo:

nilfs-clean -c /etc/nilfs_cleanerd.conf

 

NILFS cada cierto tiempo revisa los segmentos que se pueden liberar dependiendo de los cps y snapshots existentes, de este modo libera espacio.


Los parámetros de config son los siguientes:

  • protection_period --> Tiempo en el que los checkpoints NO serán borrados, tiempo en el que podrá retorceder ;)
  • min_clean_segments --> Si está a 0 se limpia constantemente sin esperar a que haya un número determinado de segmentos disponibles para su liberación.(def: 10%)
  • max_clean_segments --> Si existen mas segmentos disponibles para ser liberados que los indicados aquí se para la limpieza hasta que hayan menos de los indicados en min_clean_segments, si min_clean_segments=0 este parámetro es ignorado.(def: 20%)
  • clean_check_interval --> Periodo en el que pasar el cleaner y comprobar min_clean_segments, max_clean_segments, si min_clean_segments=0 este parámetro es ignorado.
  • selection_policy --> Indica la política de limpieza, ahora solo se soporta timestamp, se reclama el espacio buscando segmentos del mas viejo al mas nuevo.
  • nsegments_per_clean --> Número de segmentos a reclamar en cada paso del cleaner.(def: 2)
  • mc_nsegments_per_clean --> Número de segmentos reclamados en cada paso del cleaner si los segmentos disponibles < min_clean_segments.(def: 4)
  • cleaning_interval --> Intervalo de limpieza.(def: 5)
  • mc_cleaning_interval --> Intervalo de limpieza si los segmentos disponibles < min_clean_segments.(def: 1)
  • retry_interval --> Intervalo de reintento en caso de que haya ocurrido algún problema.(def: 60)
  • use_mmap --> Indicamos si debe utilizar mmap para buscar segmentos libres, en la actualisas esta opción es habilitada si el sistema lo soporta independientemente del valor de este parámetro.
  • log_priority --> Prioridad de syslog, emerg, alert, crit, err, warning, notice, info y debug.(def: info)

 

NOTA: Tanto min_clean_segments como max_clean_segments se debe indicar con las siguientes unidades:
kB --> 1000
K --> 1024
MB --> 1000*1000
M --> 1024*1024
.
.

Si se indica un % es el % del sistema de ficheros.

 

A partir de la versión 2.1 los parámetros:

protection_period, clean_check_interval, cleaning_interval, mc_cleaning_interval y retry_interval aceptan una precisión de decimas desegundo.

 

En este enlace dejo una explicación mas técnica:


Autor: Kr0m -- 20/01/2014 20:01:35