Archive for the ‘Linux’ Category
… 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
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%sCopyright (c) 2011 Juan Pedro Escalona Rueda <jpescalona@otioti.com> under GPL LicenseThis 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 defaultThis 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
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?
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′
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
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:
- Seleccionamos el idioma: Español (es_ES)
- Aceptamos la licencia GPL
- Iniciamos la instalación
- Comprobamos que los prerequisitos se cumplen.
- Introducimos los parámetros de la conexión a la mysql:
- Dirección a la base de datos
- Usuario: glpi
- Contraseña: glpisecret (o la que hayamos introducido)
- Seleccionamos la base de datos glpi
- Tomamos nota de los usuarios creados:
- Los logins y claves predeterminados son:
- glpi/glpi para la cuenta administrador
- tech/tech para la cuenta de técnico
- normal para la cuenta normal
- post-only/post-only para la cuenta postonly
- 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.
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:
- All my clients get dynamic IP from 192.168.1.100 to 192.168.1.200
- My gateway will be the same server, 192.168.1.1
- Configure PXE:
- range dynamic-bootp: We’ll give from 192.168.1.201 to 192.168.1.230 for all PXE clients.
- next-server: IP of server which have kernel images and tftp service, router
- 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
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