Archive for the ‘Linux’ Category

0

What to do at the “Three Finger Salute”…

Wednesday, September 14, 2011
posted by otioti

… or the other way to say “Press Ctrl+Alt+Supr

# What to do at the "Three Finger Salute".
#ca:12345:ctrlaltdel:/sbin/shutdown -r now

You can find it in /etc/inittab file

0

check_domain_es – Nagios, Check Spanish Domain Names

Friday, January 28, 2011
posted by otioti

Hi everybody,

some time ago, I was looking for a plugin for nagios that let me check Domain Names .es, for Spain, but all plugins cannot check this kind of domain names.

So, I decided to create new one. It’s very easy to use, it’s like check_domain plugin:

check_domain_es – v%s
Copyright (c) 2011 Juan Pedro Escalona Rueda <jpescalona@otioti.com> under GPL License
This plugin checks the expiration date of a domain name.
Usage: check_domain_es -h | -d <domain> [-c <critical>] [-w <warning>]
NOTE: -d must be specified
-h: Print detailed help
-d: domain name to check
-w: Response time to result in warning status (days). 30 days by default
-c: Response time to result in critical status (days). 7 days by default
This plugin will use whois service to get the expiration date for the domain name.
Example:
check_domain_es.py -d iavante.es -w 30 -c 10
You can visit project web page here: https://code.google.com/p/nagios-check-domain-es/
0

Segmentation fault

Friday, November 12, 2010
posted by otioti

imwl rcuHome # sync
Segmentation fault
imwl rcuHome # sync
Segmentation fault
imwl rcuHome # ./bin/rcu
/bin/sh: /opt/soft/rcuHome/lib/stubs/libc.so.6: version `GLIBC_2.4′ not found (required by /bin/sh)
imwl rcuHome # ./bin/rcu
/bin/sh: /opt/soft/rcuHome/lib/stubs/libc.so.6: version `GLIBC_2.4′ not found (required by /bin/sh)
imwl rcuHome # ls
Segmentation fault
imwl rcuHome # ls
Segmentation fault
imwl rcuHome # ls
Segmentation fault
imwl rcuHome # ls
Segmentation fault
imwl rcuHome # dir
Segmentation fault
imwl rcuHome # exit

Cool, ya?

0

Moodle & libxml2

Thursday, September 30, 2010
posted by otioti

This is too weird, but when I tried to restore a course from backup, all HTML tags was broken. I thought it was related to PHP and XML but I could never think it was caused of libxml2 version. I had installed libxml2-2.7.3, so to resolv this problem you just have to uninstall this version and install the recommended versions: 2.6.32 or 2.7.0.

If you have an old system, in Gentoo would be:

echo “>=dev-libs/libxml2-2.7.1″ >> /etc/portage/package.mask
emerge -av libxml2

If you have a newly fashioned portage:

emerge -av ‘=dev-libs/libxml2-2.7.6′

See: http://docs.moodle.org/en/Backup_FAQ#Restoring_a_course_results_in_broken_HTML_tags._What_can_I_do.3F

0

IO-Compress collisions with serveral perl packages

Wednesday, May 12, 2010
posted by otioti

I’d surprised when i saw this error updating my servers:

>>> Emerging (1 of 5) perl-core/IO-Compress-2.021
>>> Installing (1 of 5) perl-core/IO-Compress-2.021
>>> Failed to install perl-core/IO-Compress-2.021, Log file:
>>>  '/var/tmp/portage/perl-core/IO-Compress-2.021/temp/build.log'
...

 * This package will overwrite one or more files that may belong to other
 * packages (see list below).
 * perl-core/IO-Compress-Zlib-2.015
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Adapter/Deflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Adapter/Identity.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Deflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Gzip.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Gzip/Constants.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/RawDeflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Zip.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Zip/Constants.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Zlib/Constants.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Zlib/Extra.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Adapter/Identity.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Adapter/Inflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/AnyInflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Gunzip.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Inflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/RawInflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Unzip.pm
 *
 * perl-core/Compress-Zlib-2.015
 * 	/usr/lib/perl5/vendor_perl/5.8.8/Compress/Zlib.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/auto/Compress/Zlib/autosplit.ix
 *
 * perl-core/IO-Compress-Bzip2-2.015
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Adapter/Bzip2.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Bzip2.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Adapter/Bunzip2.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Bunzip2.pm
 *
 * perl-core/IO-Compress-Base-2.015
 * 	/usr/lib/perl5/vendor_perl/5.8.8/File/GlobMapper.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Base.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Base/Common.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/AnyUncompress.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Base.pm
 * Searching all installed packages for file collisions...
 *
 * Press Ctrl-C to Stop
 *  * Detected file collision(s):
 *
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Bunzip2.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Adapter/Bunzip2.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Bzip2.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Adapter/Bzip2.pm
 *
 * Searching all installed packages for file collisions...
 *
 * Press Ctrl-C to Stop
 *
* perl-core/IO-Compress-Zlib-2.015
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Adapter/Deflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Adapter/Identity.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Deflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Gzip.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Gzip/Constants.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/RawDeflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Zip.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Zip/Constants.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Zlib/Constants.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Zlib/Extra.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Adapter/Identity.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Adapter/Inflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/AnyInflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Gunzip.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Inflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/RawInflate.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Unzip.pm
 *
 * perl-core/Compress-Zlib-2.015
 * 	/usr/lib/perl5/vendor_perl/5.8.8/Compress/Zlib.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/auto/Compress/Zlib/autosplit.ix
 *
 * perl-core/IO-Compress-Bzip2-2.015
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Adapter/Bzip2.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Bzip2.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Adapter/Bunzip2.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Bunzip2.pm
 *
 * perl-core/IO-Compress-Base-2.015
 * 	/usr/lib/perl5/vendor_perl/5.8.8/File/GlobMapper.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Base.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Compress/Base/Common.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/AnyUncompress.pm
 * 	/usr/lib/perl5/vendor_perl/5.8.8/IO/Uncompress/Base.pm
 *
 * Package 'perl-core/IO-Compress-2.021' NOT merged due to file
 * collisions. If necessary, refer to your elog messages for the whole
 * content of the above message.

Well, i couldn’t find solution for this error, but bad-practises could be used for this kind of work 

I tried to unmerge IO-Compress-Base, IO-Compress-Bzip2 and IO-Compress-Zlib:

emerge -C IO-Compress-Base IO-Compress-Bzip2 IO-Compress-Zlib

And later, reinstall IO-Compress lib:

emerge -q IO-Compress
0

Integración OCS Inventory & GLPI

Tuesday, February 2, 2010
posted by otioti

Por facilidad del despliegue, se realiza la instalación en una Fedora Core 12

Dependencias comunes:

  • Apache version 1.3.33 or higher / Apache version 2.0.46 or higher.
    • Mod_perl version 1.29 or higher.
    • Mod_php version 4.3.2 or higher.
  • PHP 4.3.2 or higher, with ZIP and GD support enabled.
  • PERL 5.6 or higher.
    • Perl module XML::Simple version 2.12 or higher.
    • Perl module Compress::Zlib version 1.33 or higher.
    • Perl module DBI version 1.40 or higher.
    • Perl module DBD::Mysql version 2.9004 or higher.
    • Perl module Apache::DBI version 0.93 or higher.
    • Perl module Net::IP version 1.21 or higher.
    • Perl module SOAP::Lite version 0.66 or higher (optional)
  • MySQL version 4.1.0 or higher with InnoDB engine active.
  • Make utility such as GNU make.

Accedemos al sistema, y actualizamos el mismo:

yum update

Instalamos y configuramos la mysql:

yum install mysql
service mysqld start
chkconfig mysqld on

Ejecutamos:

mysql_secure_installation

configuramos la contraseña de root y deshabilitamos el acceso anónimo.

Instalamos OCS Inventory:

yum install ocsinventory
service httpd restart
chkconfig httpd on

Accedemos a la siguiente url: http://ourserver.com/ocsreports/install.php

Introducimos las credenciales del usuario root que hemos configurado anteriormente.

Pulsamos en Send. A continuación comprobará la viabilidad de configurar OCS Inventory en el sistema. Si nos devuelve algún error, deberemos revisarlo y solventarlo.

Si no existe ningún error, procederemos a pulsar en el botón Send. A continuación se generará el usuario admin con contraseña por defecto admin.

Accederemos al sistema introduciendo dichas credenciales por defecto.

Realizaremos las siguientes configuraciones: pulsar en el icono de la llave inglesa / Configuración y luego en la pestaña de Servidores:

  • LOGLEVEL = On
  • PROLOG_FREQ = 24
  • AUTO_DUPLICATE_LVL = Model +  Serial + Mac Address.
  • TRACE_DELETED = On (required by GLPI).
  • SESSION_VALIDITY_TIME = 600 (session duration, the empty value provided is not valid).

Modificamos el usuario de la base de datos que conecta OCS  con la DB ocsweb:

# mysql -uroot -prootsecret
mysql> UPDATE mysql.user SET Password = PASSWORD('ocssecret') WHERE User = 'ocs';
mysql> FLUSH PRIVILEGES;
mysql> exit

Modificamos el fichero /etc/httpd/conf.d/ocsinventory-server.conf:

PerlSetVar OCS_DB_PWD ocssecret

el fichero /etc/ocsinventory/ocsinventory-reports/dbconfig.inc.php:

$_SESSION["PSWD_BASE"]="ocssecret"

Ejecutamos:

service httpd reload

Instalamos OCSInventory-agent en Gentoo:

Se adjunta el ebuild necesario para construir el agente de OCSInventory para Gentoo. Para el resto de sistemas, se puede descargar de la web oficial.

Descargamos el adjunto y se coloca en /usr/local/app-admin/ocsinventory-agent/.

Luego se emerge el paquete:

 
emerge -q ocsinventory-agent

Es recomendable tener instalado smartmontools:

emerge -q smartmontools

Modificamos el fichero /etc/ocsinventory-agent/ocsinventory-agent.cfg y seteamos:

server=ourserver.com

Instalación y configuración de GLPI

Se generarán dos usuarios MySQL, el primero llamado glpi para el usado de la aplicación GLPI, y un segundo, synchro, que será usado para el proceso de sincronización OCS<->GLPI

Accederemos como root en MySQL y ejecutaremos los siguientes comandos:

# mysql -uroot -p
mysql> CREATE USER 'glpi'@'%' IDENTIFIED BY 'glpisecret';
mysql> GRANT USAGE ON *.* TO 'glpi'@'%' IDENTIFIED BY 'glpisecret';
mysql> CREATE DATABASE IF NOT EXISTS `glpi` ;
mysql> GRANT ALL PRIVILEGES ON `glpi`.* TO 'glpi'@'%';
mysql> CREATE USER 'synchro'@'%' IDENTIFIED BY 'syncsecret';
mysql> GRANT USAGE ON *.* TO 'synchro'@'%' IDENTIFIED BY 'syncsecret';
mysql> GRANT SELECT ON `ocsweb`.* TO 'synchro'@'%';
mysql> GRANT DELETE ON `ocsweb`.`deleted_equiv` TO 'synchro'@'%';
mysql> GRANT UPDATE (`CHECKSUM`) ON `ocsweb`.`hardware` TO 'synchro'@'%';
mysql> FLUSH PRIVILEGES;
mysql> exit

Instalaremos glpi con yum y reiniciamos el servicio httpd:

# yum install glpi
# service httpd reload

Por último, se realiza la creación del schema de la DB y la configuración de la aplicación:

Accederemos a la url http://outserver.com/glpi y seguimos los siguientes pasos:

  1. Seleccionamos el idioma: Español (es_ES)
  2. Aceptamos la licencia GPL
  3. Iniciamos la instalación
  4. Comprobamos que los prerequisitos se cumplen.
  5. Introducimos los parámetros de la conexión a la mysql:
    1. Dirección a la base de datos
    2. Usuario: glpi
    3. Contraseña: glpisecret (o la que hayamos introducido)
  6. Seleccionamos la base de datos glpi
  7. Tomamos nota de los usuarios creados:
  8. Los logins y claves predeterminados son:
    1. glpi/glpi para la cuenta administrador
    2. tech/tech para la cuenta de técnico
    3. normal para la cuenta normal
    4. post-only/post-only para la cuenta postonly
  9. Accedemos con el usuario glpi

Activación y configuración del modo OCSNG:

Una vez identificados dentro de GLPI como administrador, procederemos a configurar la sincronización de OCS->GLPI.

Dentro del Menú, pulsaremos en Setup->General, a continuación pulsaremos en la pestaña Restricciones, y activamos el modo OCSNG, pulsamos en enviar.

Configuramos el servidor:

  • Pulsamos Menu->Configuración->OCSNG mode
  • Seleccionamos el servidor creado durante la instalación: localhost
  • Configuramos el nombre
  • El nombre de la base de datos: ocsweb
  • El usuario de la base de datos: synchro
  • La contraseña del usuario: synchrosecret
  • Pulsamos en enviar.

Deberá devolver un mensaje que indique se ha creado la conexión satisfactoriamente.

A continuación, configuraremos la información que será importada de OCS a GLPI:

  • Monitores : Importación única basada en el serial number
  • Periféricos: Importanción única
  • Impresoras: Importación única
  • Software: Importación única
  • Volúmenes: Sí
  • Utilizar el diccionario de software de OCS: No
  • Registro de Windows: Si
  • Número de elementos a sincronizar usando cron: 0 (usaremos otra solución)
  • Pulsaremos en enviar.

Comprobamos en :

  • Menu->Utilidades->OCSNG
  • Pulsaremos en el enlace “Importación de ordenadores nuevos”

En la lista que aparezca, deberemos poder ver aquellos servidores los cuales tengan instalado y configurado correctamente el agente de OCS. NO los importe, ya que lo realizaremos mediante un modo automático.

Sistema automático de sincronización OCSNG:

Instalaremos el siguiente plugin: Mass import from OCSNG

Nos desconectamos de GLPI e instalamos el plugin:yum install glpi-mass-ocs-import

Conectamos de nuevo a GLPI, y configuramos al plugin.

Clicamos en Configuración->Plugins. Pulsamos en el enlace Instalar. Pulsamos Activar y al final pulsamos en el enlace “Importación masiva desde OCS*”.*

En la siguiente pantalla, seleccionamos el servidor localhost, pulsamos en aceptar y luego habilitamos la sincronización.

0

HowTo: Clonezilla & PXE on Gentoo

Thursday, January 7, 2010
posted by otioti

Clonezilla is for me the best cloning HD opensource project I know. It’s similar to Norton Ghost, but Clonezilla is free. We could use clonezilla two ways: Clonezilla LiveCD y Clonezilla Server Edition.

Clonezilla LiveCD let us create image partitions or whole hard disk and save it on another directory using Samba, ssh or nfs. Also, we could clone from disk to disk.

Clonezilla LiveCD let us install Clonezilla as a service in our network. Problem? Clonezilla only works on Debian, CentOS, Fedora, Red Hat or Ubuntu. Gentoo not supported. And i don’t want to reinstall my server-router-firewall 🙂

So, my idea is install a TFTP service in that server, copy kernel, initrd and filesystem images from LiveCD to tftp directory and configure a PXE service using TFTP

Ok, let’s go. First, download Clonezilla LiveCD: http://clonezilla.org/download/sourceforge/

Mount ISO:

mount -o loop /home/user/clonezilla-livecd.iso /mnt/cdrom

We need to install DHCP and TFTP Services:

 # emerge -v dhcp tftp-hpa syslinux

Next, we’ve cofigure DHCP server:

authoritative;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style interim;
allow booting;
allow bootp;
option domain-name "yourcompany.net";
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option domain-name-servers 192.168.1.1;
option routers 192.168.1.1;
subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.100 192.168.1.200;
   option broadcast-address        192.168.1.255;
   option netbios-name-servers     192.168.1.10;
   option routers                  192.168.1.1;
   # For bootp - pxe clients
   range dynamic-bootp 192.168.1.201 192.168.1.230;
   next-server 192.168.1.1;
   filename "/pxelinux.0";
}

For example, i configured my dhcp service next way:

  1. All my clients get dynamic IP from 192.168.1.100 to 192.168.1.200
  2. My gateway will be the same server, 192.168.1.1
  3. Configure PXE:
    1. range dynamic-bootp: We’ll give from 192.168.1.201 to 192.168.1.230 for all PXE clients.
    2. next-server: IP of server which have kernel images and tftp service, router
    3. filename: Path to PXE Loader, / by default.

Next, let’s configure tftpd service. First, edit /etc/conf.d/in.tftpd:

# /etc/init.d/in.tftpd

# Path to server files from
# Depending on your application you may have to change this.
# This is commented out to force you to look at the file!
INTFTPD_PATH="/images"
INTFTPD_USER="nobody"

# For more options, see in.tftpd(8)
# -R 4096:32767 solves problems with ARC firmware, and obsoletes
# the /proc/sys/net/ipv4/ip_local_port_range hack.
# -s causes $INTFTPD_PATH to be the root of the TFTP tree.
# -l is passed by the init script in addition to these options.
INTFTPD_OPTS="-u ${INTFTPD_USER} -l -vvvvvv -p -c -s ${INTFTPD_PATH}"

Next, create /images directory:

mkdir -p /images

So next, copy pxelinux.0 loader from syslinux package.

cp  /usr/lib/syslinux/pxelinux.0 /images/

Create /images/pxelinux.cfg directory.

mkdir /images/pxelinux.cfg
chown nobody:nobody /images

Edit default configuration to load kernel and parameters. We could copy file from Clonezilla LiveCD, /isolinux/isolinux.cfg, but next you’ll see a simple configuration example, and it’s OK for starting:

vim /images/boot/pxelinux.cfg/default
default local
timeout 70
prompt 0
noescape 1
MENU MARGIN 5
MENU BACKGROUND bg.png

# Set the color for unselected menu item and timout message
MENU COLOR UNSEL 7;32;41 #c0000090 #00000000
MENU COLOR TIMEOUT_MSG 7;32;41 #c0000090 #00000000
MENU COLOR TIMEOUT 7;32;41 #c0000090 #00000000
MENU COLOR HELP 7;32;41 #c0000090 #00000000

say **********************************************
say Welcome to Clonezilla.
say www.yourcompany.net
say **********************************************

# Do NOT allow client to edit the parameters
#ALLOWOPTIONS 0

# simple menu title
MENU TITLE YOUR_COMPANY_NAME (http://www.yourcompany.net)

label clonezilla
  MENU DEFAULT
  MENU LABEL Clonezilla live

  kernel vmlinuz
  append initrd=initrd.img boot=live union=aufs fetch=tftp://tftp_server_ip/filesystem.squashfs vga=791 noswap noprompt ocs_lang=en_US.UTF-8 ocs_live_keymap=NONE

label local
  # MENU DEFAULT
  MENU HIDE
  MENU LABEL Local operating system (if available)
  # MENU PASSWD
  # 2 method to boot local device:
  # (1) For localboot 0, it is decided by boot order in BIOS, so uncomment the follow 1 line if you want this method:
  # localboot 0
  # (2) For chain.c32, you can assign the boot device.
  # Ref: extlinux.doc from syslinux
  # Syntax: APPEND [hd|fd] []
  # [] is optional.
  # Ex:
  # Second partition (2) on the first hard disk (hd0);
  # Linux would *typically* call this /dev/hda2 or /dev/sda2, then it's "APPEND hd0 2"
  #
  kernel chain.c32
  append hd0
  TEXT HELP
  Boot local OS from first hard disk if it's available
  ENDTEXT

Next, we need copy kernel, initramfs filesystem images from LiveCD to /images/ on our server:

  cp /mnt/cdrom/live/vmlinuz /images/vmlinuz
  cp /mnt/cdrom/live/initrd.img /images/initrd.img
  cp /mnt/cdrom/live/filesystem.squashfs /images/filesystem.squashfs

Last, run services:

  /etc/init.d/in.tftp start
  /etc/init.d/dhcp start
  rc-update add in.tftp default
  rc-update add dhcp default
0

ZFS vs Btrfs

Sunday, May 25, 2008
posted by otioti

Está en boca de todos últimamente el acrónimo ZFS ( Zettabyte File System ) que es el sistema de archivos desarrollado por Sun Microsystems, ya incluido desde 2005, su soporte en Solaris y en OpenSolaris en sus últimas versiones. Pero antes de todos, vamos a dedicar unos cuantos párrafos para explicar resumidamente en qué consiste ZFS, qué incovenientes tiene y su posible competidor en el mundo libre: btrfs.

ZFS es un sistema de archivos cuya pecularidad es que se compone de un pool de sistemas de archivos virtuales, llamados zpools, los cuales debajo suya, puede estar compuesto de un simple disco o un RAID de ellos. Esto hace que a la hora de añadir un nuevo disco al almacenamiento, o modificar un raid, para ZFS sea transparente, además que todo el almacenamiento se comparte físicamente entre todos estos sistemas de archivos virtuales, no desperdiciando el espacio libre de un sistema de archivos, que puede ser necesario en un caso crítico para cualquier otro sistema de archivos del pool.

ZFS fue diseñado pensando en un espacio de almacenamiento casi infinito, hablamos de ZetaBytes. Por ello, es un sistema de 128 bits, esto nos permite almacenar datos hasta 18.4 × 1018 más que un FS de 64 bits. Respecto a la capacidad del sistema, Jeff Bonwick, el arquitecto jefe de Sun para ZFS, dijo “Llenar un sistema de archivos de 128 bits excedería los límites cuánticos de almacenamiento de la tierra. No puedes rellenarlo sin hervir los océanos”.

Otras limitaciones teóricas de ZFS son:

  • 248 — Número de snapshots en cualquier sistema de ficheros (2 × 1014)
  • 248 — Número de ficheros en un sistema de ficheros (2 × 1014)
  • 16 exabytes — Tamaño máximo de un sistema de ficheros
  • 16 exabytes — Tamaño máximo de un fichero
  • 16 exabytes — Tamaño máximo de cualquier atributo
  • 3 × 1023 petabytes — Tamaño máximo de un zpool
  • 256 — Número de atributos de un fichero (realmente limitado a 248 que es el número de ficheros que puede contener un sistema de ficheros ZFS)
  • 256 — Número de ficheros en un directorio (realmente limitado a 248 que es el número de ficheros que puede contener un sistema de ficheros ZFS)
  • 264 — Número de dispositivos en cualquier zpool
  • 264 — Número de zpools en un sistema
  • 264 — Número de sistemas de ficheros en un zpool

A continuación destaco aquellas características que hace que ZFS sea interesante:

  • Copy-on-write: consiste en mantener siempre la información de los datos que manejemos. Siempre que modifiquemos un fichero, los bloques de datos que compongan dicho fichero son reubicados, modificando todas las referencias de los metadatos que apunten sobre dichos bloques. Esto nos permite realizar snapshots de nuestro sistema de archivos.
  • Snapshots: Consisten en tener una instantánea del estado del FS en algún momento del pasado. Debido al copy-on-write, disponemos siempre la información del pasado, ya que no es eliminada cuando es modificada o eliminada del sistema de archivos. Posibles aplicaciones: backups de datos empresariales. Nos dejamos de realizar backups diarios de DB’s, datos de usuarios, ficheros, perfiles, etc.
  • Dynamic Striping: a medida que incluimos discos en el zpool, aumentamos el ancho de banda del mismo, incrementando así la velocidad de las escrituras/lecturas y el espacio disponible para los sistemas de archivos que compongan el zpool. Pero esto no es libre albedrío. Podremos aplicar quotas de disco para garantizar que haya espacio libre. Otra forma es fijar una reserva de disco para un sistema de archivos en particular.
  • Soporte POSIX: ZFS es directamente accesible por las aplicaciones sin tener que realizar ninguna modificación en la misma.

Esto está muy bien, pero ZFS en principio fue desarrollado para productos de Sun como Solaris y OpenSolaris. Existían rumores de que ZFS lo iban a incluir en MacOSX en el lanzamiento de Leopard, pero sólo se quedó rumores, ya que solo soporta modo lectura de ZFS, lo cual, tampoco está nada mal.

En cambio, actualmente disponemos información de que quieren portalo para FreeBSD y Linux, usando FUSE, con licencia CDDL ( Common Development and Distribution License ). Pronto realizaré pruebas con ZFS, para ver la “portabilidad” que tiene.

Oracle, en respuesta al sistema de archivos ZFS de Sun, contraatacó con btrfs , otro sistema de archivos con características similares, por no decir iguales, a ZFS. Primeramente, hay que decir que btrfs es GPL, por lo que por mi parte, tiene ya medio cielo ganado 🙂 . Por otra parte, el proyecto está muy verde. La gran mayoría de las features que tiene ZFS, y que dicen que quieren desarrollar, no están todavía soportadas.

Como hemos dicho antes, btrfs es similar a ZFS, implementando un sistema de archivos con capacidad copy-on-write, además de soportar tolerancia a fallos y su reparación de forma fácil. Soportan grandes volúmenes de datos.

Las principales características de este FS son:

  • Almacenamiento de ficheros grandes: tamaño máximo del mismo es de 2^64
  • Uso eficiente del espacio para fichero pequeños.
  • Uso eficiente de indexación de directorios.
  • Alojamiento dinámico de inodos.
  • Snapshots con capacidad de escritura.
  • Múltiples subvolúmenes (todos separados de la ruta principal del sistema)
  • Checksums para los datos y metadatos, podiendo utilizar distintos algoritmos
  • Fuerte integración con device mapper para el soporte de múltiples dispositivos.
  • Comprobación del sistema de ficheros online. El chequeo offline, es mucho más rápido
  • Gran eficiencia con copias de seguridad incrementales y mirroring de sistema de archivos

No recomiendan quitar discos, cuando dispongamos de múltiples dispositivos formando un raid, ya que el sistema de archivos puede producir una pérdida de datos. No tienen testeado el soporte de tolerancia de fallos, por lo que es posibles que de esta forma también dispongamos pérdidas de los mismos.
Para Gentoo existe en el portage el ebuild para poder instalar btrfs. ZFS está soportado en Linux gracias a FUSE. Esta semana intentaré instalar ambos FS’s y comprobar la viabilidad de los mismos. Los resultados los colgaré en el blog.

Enlaces de interés:

ZFS Wikipedia
ZFS en Comunidad OpenSolaris
ZFS en linux – noticia de genbeta

Btrfs – Wiki oficial del projecto
Btrfs en Gentoo – Planet Gentoo blog

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies