Archivo de la categoría: Administración de sistemas

LVM para torpes (II)

Si mis dibujos no te dejaron muy claro los conceptos básicos del LVM no te preocupes, ahora lo explicaré desde el principio con los comandos de gestión del LVM. Seguro que quedará más claro.

Empezar de cero a montar LVM en un sistema ya en marcha no es lo más común, ya que lo ideal es hacerlo en el momento de la instalación, pudiendo así incluir todos los discos por completo. Casi todas las distribuciones permiten hacerlo automáticamente, aunque el resultado final no suele ser ideal (ver Consideraciones finales). Cuando comprendas el funcionamiento podrás usar el instalador de tu distribución para crear una estructura LVM personalizada que tenga más sentido que la que propone el instalador sin preguntar.

Entregando dispotivos de almacenamiento al LVM (PV)

El primer paso para usar LVM es decidir que dispositivos de almacenamiento queremos usar. Pueden ser discos, dispositivos RAID por software, particiones, etc. Lo más importante en este paso es que al LVM le daremos el dispositivo para que lo gestione y, salvo raras excepciones, no volveremos a tocar el dispositivo directamente. Nada de darle una partición al LVM y luego crear un sistema de ficheros en ella. Dicho de otra forma, no le toques los PVs al LVM.

La forma de entregar un dispositivo al LVM es marcarlo como un Physical Volumen (PV). Cuando vayas a crear un PV asume que la información que contenga hasta ese momento ya no es tuya, dala por perdida. Así que cuidado con equivocarse con el nombre del dispositivo en el comando pvcreate. Este comando básicamente indica que desde su ejecución el dispositivo indicado como argumento pasa a ser de dominio del LVM. Ejemplos:

# Estos comando deben ser ejecutados con el usuario root
# Normanlment los usuarios no pueden jugar con los discos :-)
# Marcar el primer disco, por completo, como PV
pvcreate /dev/sda
# Marcar varias particiones como PV
pvcreate /dev/sda3 /dev/sdb1 /dev/sdc1
# Marcar un dispositivo RAID por software como PV
pvcreate /dev/md0

Una vez «marcado» un dispositivo como PV, podemos ver información del mismo con los comandos «pvs» y «pvdisplay«:

# pvcreate /dev/vda3
 Writing physical volume data to disk "/dev/vda3"
 Physical volume "/dev/vda3" successfully created
# pvs
 PV VG Fmt Attr PSize PFree 
 /dev/vda3 lvm2 a-- 400.00m 400.00m
# pvdisplay /dev/vda3
 "/dev/vda3" is a new physical volume of "400.00 MiB"
 --- NEW Physical volume ---
 PV Name /dev/vda3
 VG Name 
 PV Size 400.00 MiB
 Allocatable NO
 PE Size 0 
 Total PE 0
 Free PE 0
 Allocated PE 0
 PV UUID q2noaK-2apE-kkGe-MnNA-IzuE-ICDY-3MiKns

En este ejemplo cabe destacar el tamaño del PV, /dev/vda3, 400M, que están por completo libres y que en la columna «VG» (del comando «pvs«) o la fila «VG Name» (en «pvdisplay«) no hay ningún valor. Es decir, el PV está a disposición del LVM pero no pertenece a ningún VG, por lo que por ahora no podemos usarlo (Allocatable NO). Por ahora no entraré en la definición de PE, no quiero meter más conceptos y no es necesario a estas alturas.

Creando un Grupo de Volúmenes (VG)

Como comenté en la entrada anterior, un VG es una especie de disco duro virtual. Su tamaño viene dado por la suma del espacio de los PVs que lo componen. Y es del espacio disponible en el VG de donde crearemos los Volúmenes Lógicos (LVs, algo similar a las particiones). Son los LVs los que finalmente usaremos para crear sistemas de ficheros, espacio para swap, discos para máquinas virtuales, etc.

El comando de creación de un VG es extremadamente sencillo. Simplemente le daremos como primer argumento el nombre del VG que estamos creado y a continuación el/los dispositivo(s) (marcados como PVs previamente) que queremos que lo compongan:

# Creando un vg llamado "multimedia" con un PV
vgcreate multimedia /dev/vda3
  Volume group "multimedia" successfully created
# Creando un vg con más de un PV
vgcreate produccion /dev/sdb /dev/sdc /dev/sdd
  Volume group "produccion" successfully created

Importante en este punto es dar un nombre identificativo al VG. Una de las ventajas del LVM es que vamos a poder dar nombre significativos a nuestro almacenamiento. No pierdas esta ventaja llamando a los VGs algo como «vg00». Yo tengo VGs llamandos «raid» y «sinraid» en máquinas que tienen parte de los discos en RAID y otra parte no. Ese nombre me permite, a la hora de crear un LV, saber si mis datos estarán protegidos (y/o acelerados) por el RAID o están en un simple disco. Tengo máquinas que tiene un VG llamado «interno» (formado por los discos físicamente dentro de la máquina) y otro llamado «cabina», porque sus discos están en una cabina externa. Igualmente podríamos tener «producción» y «desarrollo», o «sistema» y «datos». Para gustos los colores, pero aprovecha el poder elegir el nombre 🙂 Huelga decir que es mejor evitar símbolos especiales (como espacios), acentos, eñes y esas cosas que podrían dar problemas en nombres de dispositivos.

Una vez creado el VG podemos ver información del mismo con los comandos «vgs» y «vgdisplay«:

# vgs
 VG #PV #LV #SN Attr VSize VFree 
 multimedia 1 0 0 wz--n- 396.00m 396.00m

# vgdisplay
 --- Volume group ---
 VG Name multimedia
 System ID 
 Format lvm2
 Metadata Areas 1
 Metadata Sequence No 1
 VG Access read/write
 VG Status resizable
 MAX LV 0
 Cur LV 0
 Open LV 0
 Max PV 0
 Cur PV 1
 Act PV 1
 VG Size 396.00 MiB
 PE Size 4.00 MiB
 Total PE 99
 Alloc PE / Size 0 / 0 
 Free PE / Size 99 / 396.00 MiB
 VG UUID xuYff2-maw7-0ldW-PiLv-xZ6F-NFa3-3gNPod

Con estos comandos podemos comprobar que nuestro VG se llama «multimedia», está compuesto de un PV, todavía no tiene ningún LV creado y dispone de 396MB libres. Las Physical Extensions (PE) son las unidades de asignación mínima del LVM. Por defecto son de 4MB (aunque se puede cambiar en la creación del VG). Es decir, cada vez que creemos un LV lo haremos en múltiplos de (por defecto) 4MB. Pero esto no es algo que os deba preocupar por ahora.

A por el producto final, Volúmenes Lógicos (LV)

Una vez tenemos un VG ya podemos crear los dispositivos que realmente usaremos. Los volúmenes lógicos (LV) pertenecen a un VG, del que toman su espacio. Pueden crearse, borrarse y crecer sin necesidad de reiniciar la máquina o parar servicios (bueno, para borrarlos hay que dejar de usarlos primero, obvio).

Un LV puede usar espacio de un solo PV, o de varios. En este último caso puede deberse a que vaya creciendo con el tiempo, y ya no quede espacio en el PV original, o que al crearlo hemos decidido que use varios PVs (por motivos de rendimiento, por ejemplo). Pero esto lo veremos en próximas entradas del blog. Por ahora nos centraremos en la creación de un LV simple.

Para crear un LV, con el comando lvcreate, debemos indicarle el VG al que pertenece (como argumento del comando), el tamaño (en PEs con la opción -l o en megas/gigas/teras con -L) y optionalmente, pero muy recomendable, el nombre que queremos darle (-n). Emplos:

# Un LV de 40MB en el VG multimedia para guardar música
lvcreate -L 40M -n musica multimedia

# O especificando el número de PEs (de 4MB por defecto)
lvcreate -l 10 -n musica multimedia

Una vez más, aprovecha para darle un nombre representativo del contenido que habrá en él. Desde este momento la forma de referirse al LV (para crear el sistema de ficheros, montarlo, o cualquier uso que le vayamos a dar) será: /dev/NOMBRE_DEL_VG/NOMBRE_DEL_LV. En este ejemplo: /dev/multimedia/musica. En realidad ese nombre es un enlace al dispositivo creado por el subsistema del kernel encargado del LVM, el Device Mapper. El nombre del dispositivo real puede variar y será del tipo /dev/dm-##. Por eso es importante usar /dev/VG/LV, que siempre apuntará al dispositivo real correcto. También podemos encontrarnos referencias en el sistema al LV como /dev/mapper/multimedia-musica, es decir /dev/mapper/VG-LV. Mi recomendación es que uses siempre /dev/VG/LV y así no hay líos 🙂

Al igual que en los pasos anteriores, podemos ver información sobre el LV creado con los comandos «lvs» y «lvdisplay«:

# lvs
 LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
 musica multimedia -wi-a--- 40.00m

# lvdisplay -m
 --- Logical volume ---
 LV Path /dev/multimedia/musica
 LV Name musica
 VG Name multimedia
 LV UUID KTtf7H-z5kt-68f6-8B8r-cNk0-OUBa-2cRFfe
 LV Write Access read/write
 LV Creation host, time curso, 2014-10-30 18:35:31 +0100
 LV Status available
 # open 0
 LV Size 40.00 MiB
 Current LE 10
 Segments 1
 Allocation inherit
 Read ahead sectors auto
 - currently set to 256
 Block device 253:0

 --- Segments ---
 Logical extent 0 to 9:
 Type linear
 Physical volume /dev/vda3
 Physical extents 0 to 9

Podemos ver el tamaño de nuestro LV (en megas o en LEs), el nombre que tiene, el VG al que pertenece, y si en «lvdisplay» añadimos la opción «-m» veremos en donde se encuentra localizado físicamente el LV (que PV(s) a usado el LVM para obtener el espacio del LV, destacado en negrita en el ejemplo anterior).

Ya está listo para usar. Podemos crear un sistema de ficheros en él y montarlo como cualquier otro dispositivo de almacenamiento:

# mkfs.ext4 /dev/multimedia/musica 
mke2fs 1.42.5 (29-Jul-2012)
....
# mount /dev/multimedia/musica /media/
# df /media/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/multimedia-musica 39663 4587 33028 13% /media

Consideraciones finales

Algo que considero fundamental para poder aprovechar plenamente la flexibilidad del LVM es mantener el máximo de espacio libre en el VG. Es decir, no dar espacio «a lo loco» a los LVs antes de que éstos lo necesiten. Me mata ver como en una intalación nueva todo el espacio del VG es asignado a uno o varios LVs que apenas usan dicho espacio. De nada sirve tener gigas y gigas de espacio libre en un LV. Y un VG sin espacio sin asignar tampoco sirve para mucho (al menos hasta que se aumente con un PV nuevo). Todo espacio libre que pueda estar en el VG nos va a permitir crecer los LVs que lo necesiten o crear LVs nuevos (aunque sólo los necesitemos temporalmente). Si tenemos un VG de 1T y hoy sólo necesitamos un LV que contendrá 100G de información, no le des mucho más (tal vez 150G o 200G), pero deja el resto en el VG para cuando sea necesario. Crecer un LV es sencillo y no causa interrupciones en el servicio, encojerlo es otra historia…

$ exit

LVM para torpes (I)

El LVM (Gestor de volúmenes lógicos, Logical Volume Manager) es una de mis funcionalidades preferidas en Linux. En esta y posteriores entradas intentaré explicarlo de la forma más sencilla posible para que los que no lo usaron nunca se adentren en él.

De forma simplificada podríamos decir que LVM es una capa de abstracción entre un dispositivo de almacenamiento (por ejemplo un disco) y un sistema de ficheros. En realidad pueden existir múltiples capas, como cifrado con device-mapper, raid software con md, etc. por encima o debajo de LVM. Pero para empezar diremos que LVM estará entre nuestros discos físicos y los sistemas de ficheros (o swap, o almacenamiento de máquinas virtuales,…).

Las ventajas que tienen son múltiples, pero la inicial y más evidente es la flexibilidad frente al particionado tradicional. Pongamos (sin LVM) que creamos 4 particiones contiguas en un disco. Si en el futuro quisieramos aumentar alguna de las 3 primeras no podríamos hacerlo sin borrar las siguientes, lo que es complejo, peligroso y requiere de parada del servicio casi seguro. Pongamos que quisieramos ampliar la última, siempre tendríamos el límite del tamaño del disco. Pongamos que compramos un disco nuevo, y queremos ampliar el espacio de un sistema de ficheros existente en el disco anterior con el espacio nuevo, imposible salvo con «ñapas» de nuevos sistemas de ficheros y puntos de montaje. Con LVM todas esas limitaciones desaparecen. Podemos aumentar sus «particiones» (volúmenes lógicos en adelante) independientemente de que no haya espacio libre contiguo a éstas. Podemos aumentar sus volúmenes lógicos con espacio libre de diferentes discos físicos. E incluso podemos mover volúmenes lógicos entre dispositivos físicos. Y lo mejor de todo… ¡en caliente! Sin desmontar el sistema de ficheros, ¡sin parar un servicio! ¡Brujería! ¡Brujería!

Las ventajas no terminan ahí, y procuraré repasarlas todas en lo sucesivo. Pero empecemos hablando de nomenclatura. Para entender casi por completo el LVM debemos tener muy claros únicamente tres conceptos (y que el concepto es el concepto):

  • Volumen físico/Physical Volume (PV). Un volumen físico (PV en adelante) es un dispositivo de almacenamiento, o más correctamente expresado un dispositivo de bloque. Puede ser un disco duro, una partición, una tarjeta SD, un floppy, un dispositivo RAID, un dispositivo loop (que convierte un fichero a un dispositivo de bloque), un dispositivo cifrado, ¡incluso un volumen lógico (LV) puede usarse de PV!. Para simplificar diremos que un PV es una fuente de almacenamiento, es decir un dispositivo que nos proporciona espacio. En el ejemplo más sencillo: el disco duro de nuestra máquina, o una partición en él. Un PV no hay que formatearlo, simplemente se le entregará al LVM «en crudo» y desde ese momento será gestionado por el LVM, no volveremos a tocarlo.
Dispositivos que pueden usarse como PVs

Dispositivos que pueden usarse como PVs

  • Grupo de volúmenes/Volume Group (VG). Para poder usar el espacio/almacenamiento de un PV, éste debe pertenecer a un Grupo de volúmenes (en adelante VG). El VG será el centro del universo LVM. Podemos decir que un VG es una especie de disco duro virtual (ya veo a los puristas rasgándose las vestiduras). Un VG es un «disco» compuesto de UNO o más PVs y que crece simplemente añadiendo más PVs. A diferencia de un disco real, un VG puede crecer con el tiempo, sólo hay que «darle» un PV más. En una máquina con un sólo disco podemos crear un VG que esté compuesto por un sólo PV (el disco físico o una de sus particiones). Si con el tiempo nos quedamos sin espacio en el VG, compramos otro disco (PV), lo añadimos al VG y el resto es transparente para sistemas de ficheros, procesos o usuarios. ¡Magia negra!

 

Un VG con nombre acorde a su composición: vg_absurdo

Un VG con nombre acorde a su composición: vg_absurdo

  • Volumen Lógico/Logical Volume (LV). Los volúmenes lógicos (en adelante LV) son «el producto final» del LVM. Son estos dispositivos los que usaremos para crear sistemas de ficheros, swap, discos para máquinas virtuales, etc… Por seguir con la analogía del «disco duro virtual» que es el VG, los LVs serían las particiones. Con los que vamos a trabajar realmente. A diferencia de «sus primas» las particiones tradicionales, los LVs pueden crecer (mientras haya espacio en el VG) independientemente de la posición en la que estén, incluso expandiéndose por diferentes PVs. Un LV de 1G puede estar compuesto de 200MB procedentes de un disco duro, 400MB de un RAID software, y 400MB de una partición en un tercer dispositivo físico. El único requisito es que todo los PVs pertenezcan al mismo VG. Por supuesto, aunque posible, no parece una combinación con mucho sentido 😛

 

Un LV (lv_ejemplo) dentro del VG (vg_absurdo) usando espacio de 3 PVs

Un LV (lv_ejemplo) dentro del VG (vg_absurdo) usando espacio de 3 PVs

Perdón por los dibujos, el día que repartían «venas artísticas» no fui al cole. La idea es visualizar los diferentes componentes. Que agrupamos PVs para dar forma (tamaño) al VG, y que con el espacio del VG podemos crear LVs. Los LVs de un VG pueden usar espacio de uno o varios PVs, por supuesto seremos nosotros los que decidamos de que PVs sacamos el espacio que compone un LV. El ejemplo actual no tiene mucho sentido ya que tenemos un LV (pensemos en una «partición») que tiene partes redundadas (el espacio que viene del RAID) y partes que no (el espacio asignado desde el disco o la partición), o partes más rápidas (posiblemente el RAID) y partes más lentas. En este VG (insisto, un tanto extraño) podríamos tener LVs que sólo usaran espacio del disco, y LVs que sólo usaran espacio del RAID, lo que tendría algo más de sentido. En cualquier caso lo normal es que los PVs que forman un VG tengas características (redundancia, velocidad) similares.

Otra ventaja del LVM que ya podemos ver es que los nombres de los componentes los elegimos nosotros, lo que facilita su comprensión. Al crear un VG o un LV, somos nosotros los que decidimos sus nombres. Por tanto nos alejamos de cosas «raras» como sda5, md3, etc. y pasamos a una nomenclatura que nos ayuda a comprender que hay en cada LV:

# Ejemplos de nombres para VGs y LVs
# Un VG para producción, posiblemente con RAID como PVs
# Los nombres de los LVs permiten saber que es lo que contienen
/dev/produccion/datos
/dev/produccion/aplicacion
# Un VG para desarrollo, tal vez sin RAID y con discos "baratos"
/dev/desarrollo/datos
# Una máquina con discos internos y con acceso a una cabina de discos
/dev/interno/raiz
/dev/interno/swap
/dev/cabina/web

Con estos términos claros podemos explicar mejor la flexibilidad del LVM con unos ejemplos:

  • Un LV puede crecer siempre que haya espacio libre en el VG al que pertenece. El LVM se encarga de que lo que haya sobre el LV (frecuentemente un sistema de ficheros) vea todo el espacio continuo. Podemos crear inicialmente un LV usando espacio de un PV, pero si posteriormente queremos aumentarlo, aunque no quede espacio en el PV original, podemos usar espacio de cualquier PV que pertenezca al VG. Para el sistema de ficheros será transparente.
  • Podemos cambiar el espacio asignado  de un PV a un LV a otro PV (que tenga espacio suficiente libre). Me explico, yo puedo crear un LV de 10G en un PV que sea un disco. Si posteriormente meto en el VG un PV que sea un RAID, podría mover los 10G que estaba usando del disco al RAID, en caliente y de forma transparente al sistema de ficheros y las aplicaciones que lo usan. De forma que si con el tiempo puedo mejorar el hardware de la máquina, no tengo porque volver a crear un sistema de ficheros, copiar los datos y cambiar el montaje. Con LVM simplemente digo: los 10G del LV que están en un PV los quiero mover a un PV diferente. Y el hará la mudanza sin interrumpir el funcionamiento del sistema.
  • Para poder disfrutar al máximo de la flexibilidad del LVM es importante tener la mayor cantidad de espacio libre en el VG (volveré a este tema más tarde), pero tarde o temprano nos quedaremos sin espacio en un VG (porque usemos todo el espacio de sus PVs). Bien, esto, que tradicionalmente es bastante complicado de gestionar, con LVM es tan sencillo como darle otro PV al VG. Añadimos un disco (PV) a la máquina y lo asignamos al VG, que pasa a tener todo ese espacio nuevo disponible para cualquiera de los LVs que contenga. O para crear LVs nuevos.

La idea, al menos de esta primera ventaja que nos presta el LVM, es que el almacenamiento no nos imponga límites «artificiales». Nada de particiones que no pueden crecer porque les sigue otra en el disco. O discos que una vez llenos no podemos seguir usando sin hacer malabares. El espacio de mis dispositivos está ahí a mi disposición, para que lo use como me convenga. Para crecer mientras haya espacio libre, para mover los datos entre dispositivos sin que tenga paradas en el servicio. En resumen, los megas son mios y los uso como quiero.

En la próxima entrada empezaré a hablar de los comandos para la gestión del LVM y estarán mucho más claros todos esto ejemplos y funcionalidades. ¿Preguntas? Pon un comentario e intentaré resolverlas.

$ exit

No pierdas el correo de tus servidores

Históricamente los servidores GNU/Linux han contando con un servidor de correo en sus instalaciones más básicas, aunque sólo fuese para uso propio/interno. Por ello hay aplicaciones como cron, at, logcheck, smartmontools, etc. que dan por hecho que este servicio está presente y bien configurado y lo usan para enviar avisos, algunos de máxima importancia. Por este motivo es importante asegurarse de que nuestra máquina hará llegar los posibles correos que se envíen desde ella a una dirección de correo que sea comprobada de forma periódica. Por ejemplo a nuestra propia dirección de correo.

Como alternativa podríamos entrar en la máquina y mirar el correo en ella (por ejemplo con el comando mail del paquete «mailx» o similares). El problema de esta solución es que hay que tener la disciplina de hacerlo frecuentemente y no escala en el momento que gestionemos varios servidores.

Acciones a realizar para asegurarse de que el correo llegará correctamente a una cuenta externa:

  • El servidor tiene un nombre válido de DNS (servidor.example.net) o pone uno a los correos que salgan de él.
  • El servidor tiene que tener acceso a Internet (para sacar el correo) o al menos a un servidor de correo que usemos como relay.
  • El servidor tiene que ser capaz de resolver entradas DNS (tener un servidor DNS alcanzable en el /etc/resolv.conf), salvo que lo entregue por un servidor de relay.
  • Las cuentas de los usuarios deben apuntar a la cuenta de correo real a la que queremos que llegue el correo.
  • Siempre realizar pruebas (por ejemplo con el comando mail) para comprobar el correcto comportamiento.

No voy a entrar en la configuración de red (salida a Internet y DNS) en este post, porque debería ser trivial. Si entraré en detalle en los otros puntos.

Nombre válido del servidor

La mayoría de los servidores de correo en Internet rechazarán correo proveniente de una dirección no válida, por ejemplo: root@mi_servidor, root@mi_servidor.local o root@mi_servidor.dominio_que_no_exite.com. Por ello debemos asegurarnos de que el nombre completo (FQDN) de nuestra máquina puede ser resuelto por el sistema DNS, o configurar el servidor local de correo para que use un dominio válido (por ejemplo cuando el nombre de nuestro servidor sólo es válido en su red local). En el caso de Postfix podemos usar la variable myorigin para indicarlo:

# En /etc/postfix/main.cf
# En el caso de Debian el valor de la variable está en el fichero mailname
# Podemos cambiarlo ejecutando: echo servidor.example.net > /etc/mailname
# Ejecutar "postfix reload" después de hacer los cambios
myorigin = /etc/mailname
# También podríamos especificarlo directamente
#myorigin = servidor.example.net

Servidor relay

Si nuestra máquina no está conectada directamente a Internet, porque presta un servicio local, lo ideal es que haga llegar todo su correo a un servidor que pueda realizar esta labor. Por ejemplo el servidor de correo que usemos normalmente. Llegados a este punto existen dos posibilidades: que nuestra máquina pueda ser identificada por su IP en el servidor de correo (y por tanto este último acepte su correo directamente) o que esto no sea posible y por tanto nuestra máquina tenga que identificarse con un usuario y contraseña SMTP en el servidor (como lo haría cualquier cliente de correo). Como fan de Postfix, pondré los ejemplos de configuración para dicho software. Esta sería la configuración para que un servidor (con Postfix instalado) use a otro (relay) para sacar su correo interno:

# El correo se envía a 10.20.30.40 para que éste lo envíe al destinatario final
# También podemos usar el nombre del servidor de correo en vez de su IP
relayhost = 10.20.30.40
# En caso de necesitar autenticación en el servidor relay,
# descomentar las siguientes líneas y crear el fichero indicado
#smtp_sasl_auth_enable = yes
#smtp_sasl_password_maps = hash:/etc/postfix/passwords

En el caso de necesitar autenticación, crearíamos el fichero passwords con el siguiente contenido y posteriormente ejecutaremos el comando «postmap /etc/postfix/passwords» como root:

# Contenido del fichero /etc/postfix/passwords
# Servidor          usuario_smtp:clave_smtp
10.20.30.40         fulanito@example.com:s3cr3t0s
# El campo servidor debe coincidir exactamente
# con el indicado en la opción relayhost

Dirigir el correo de los usuarios locales a una cuenta externa

Por defecto el correo para usuarios locales (root, logcheck, tu propio usuario) se quedará en la propia máquina. Para que llegue a nuestro correo tenemos varias opciones. Mi preferida es mandar todos los correos de usuarios de sistema a root, y el de éste a mi usuario local:

# /etc/aliases
logcheck: root
nagios: root
www-data: root
# [ los que ya vengan por defecto]
root: agi

Importante: Después de modificar el fichero /etc/aliases, debemos ejecutar el comando «newaliases» como root.

Llegados a este punto tenemos dos opciones. Una es meter la siguiente entrada en el /etc/aliases también:

agi: example@example.net

La otra es crear un fichero llamado «.forward» en nuestro $HOME con nuestra dirección de correo como único contenido:

echo "example@example.net" > ~/.forward

Esta última solución tiene como ventaja que no requiere del uso de root (o la ejecución de newaliases), por lo que es más útil para usuarios que no tengan dichos privilegios.

Prueba que funciona

Una vez todo configurado, queda probar que el correo llega a su destino. Para ello basta con ejecutar «ps ax | mail root» o «ls -l /etc | mail mi_usuario» o «cat /etc/hosts | mail logcheck» y comprobar que el correo llega a nuestra dirección de correo. En caso contrario habrá que empezar a revisar los logs de correo.

Es vital que se realice esta comprobación, incluso de vez en cuando de forma manual si la máquina no suele generar correo. El objetivo es evitar que el día que la herramienta de monitorización de discos (por poner un ejemplo), empieza a detectar errores y notificarnos por correo, nos enteremos inmediatamente y no pasados unos días cuando el disco esté completamente muerto.

$ exit