Archive for the ‘Linux y administración de sistemas’ Category

h1

Linux: solucionar el error «Too many open files» (ulimit y servicios)

17/07/2009

Revisión de octubre de 2026. El error Too many open files puede surgir cuando un proceso alcanza su límite de descriptores, pero también puede revelar una fuga de recursos en el programa. Aumentar indiscriminadamente el límite no corrige la causa.

Diagnóstico recomendado

En una sesión de shell comprueba el límite blando con ulimit -Sn y el duro con ulimit -Hn. Para un proceso en marcha, revisa /proc/PID/limits sustituyendo PID por el identificador real. Si la aplicación se ejecuta como servicio de systemd, consulta los valores efectivos mediante systemctl show NOMBRE.service -p LimitNOFILE: el archivo /etc/security/limits.conf no determina necesariamente sus límites. Investiga primero por qué crece el número de archivos o sockets abiertos.

Relacionado: monitorización de procesos con Monit.


Si en una aplicación (aMule por ejemplo, o algunas bases de datos como Oracle) se produce este error:

ERROR salvando archivo part: Failed to open part.met file (681.part.met ==> Fotos.tar.gz)
2009-07-16 14:14:05: Error: can't open file '/home/carlos/temporales_amule/489.part.met' (error 24: Too many open files)
2009-07-16 14:14:05: CFile: Error when opening file (/home/carlos/temporales_amule/489.part.met): Too many open files

éste es debido a la apertura simultánea de más descriptores de fichero de los permitidos por el sistema operativo. Se puede ver facilmente con el siguiente comando:

carlos@shirley:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

Para ello, o se corrige la aplicación para que no abra tantos ficheros al mismo o se cambia la configuración del sistema operativo para aumentar el límite. En este último caso, en GNU/Linux Kubuntu sería editando el fichero /etc/security/limits.conf

carlos@WhenIGrowUp:~$ sudo nano /etc/security/limits.conf
[sudo] password for carlos:

Añadir al final del fichero las siguientes lineas:

[...]
carlos soft nofile 30000
carlos hard nofile 30000

[...]

Sustituyendo logicamente «carlos» por el nombre del usuario que ejecuta la aplicación. Puede ser necesario reiniciar la sesión de ese usuario. Para comprobar que el cambio se ha aplicado correctamente, ejecutar el comando ulimit de nuevo:

carlos@shirley:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 30000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

h1

Linux 64 bits: error de bibliotecas compartidas al ejecutar Planner

17/07/2009

Revisión técnica (octubre de 2026): El programa getlibs del ejemplo de 2009 es una solución histórica para dependencias de 32 bits en sistemas de 64 bits. No descargues bibliotecas de repositorios desconocidos ni copies archivos manualmente a rutas globales. Comprueba la arquitectura del binario con file, sus dependencias con ldd y usa paquetes multiarch de confianza cuando sean compatibles.

Se conserva debajo el artículo original como referencia histórica.


Trabajando desde una plataforma de 64bits es habitual que algunas librerías no hayan sido portadas a esta arquitectura, produciendo errores similares al siguiente:

carlos@WhenIGrowUp:~$ planner
planner: error while loading shared libraries: libgailutil.so.18: cannot open shared object file: No such file or directory

Para ello existe una utilidad, que aun no está en los repositorios de Ubuntu ó Debian, llamada GetLibs. Con ella se pueden obtener las librerías necesarias para una aplicación que no funcione debido a este problema.

Descarga e instalación
carlos@WhenIGrowUp:~$ wget http://www.boundlesssupremacy.com/Cappy/getlibs/getlibs-all.deb
carlos@WhenIGrowUp:~$ sudo dpkg -i getlibs-all.deb

Solución:
carlos@WhenIGrowUp:~$ getlibs /usr/bin/planner
libgailutil.so.18: libgail18
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes NUEVOS:
libgail18
0 actualizados, 1 se instalarán, 0 para eliminar y 32 no actualizados.
Necesito descargar 30,3kB de archivos.
Se utilizarán 1368kB de espacio de disco adicional después de desempaquetar.
Des:1 http://archive.ubuntu.com hardy/main libgail18 1.22.1-0ubuntu1 [30,3kB]
Descargados 30,3kB en 0s (101kB/s)
Seleccionando el paquete libgail18 previamente no seleccionado.
(Leyendo la base de datos ...
147395 ficheros y directorios instalados actualmente.)
Desempaquetando libgail18 (de .../libgail18_1.22.1-0ubuntu1_amd64.deb) ...
Configurando libgail18 (1.22.1-0ubuntu1) ...
Processing triggers for libc6 ...
ldconfig deferred processing now taking place

carlos@WhenIGrowUp:~$ planner

h1

Error «Caracter multibyte amplio inválido ó incompleto»

30/06/2009

Si al hacer una operación de escritura en una partición NTFS se produce el siguiente error:

cp: no se puede efectuar `stat' sobre «//mnt/dvd/Monta\361a.avi»: Caracter multibyte amplio inválido ó incompleto

Se soluciona montando la unidad especificando unas locales compatibles con los caracteres conflictivos:

# sudo mount -t ntfs /dev/sdb1 /mnt/ -o locale=es_ES.utf8

h1

Cómo crear un sistema de archivos NTFS desde Linux: precauciones y ejemplo

18/06/2009

Advertencia importante (2026): el formateo destruye los datos de la partición elegida. Comprueba el disco, la partición y las copias de seguridad antes de ejecutar cualquier comando. Los nombres /dev/sdb1 del ejemplo son específicos de otra máquina y pueden identificar un dispositivo distinto en la tuya. En muchas distribuciones actuales, la herramienta mkfs.ntfs se proporciona mediante el paquete ntfs-3g; el antiguo paquete ntfsprogs puede no existir por separado. Consulta lsblk -f sin modificar nada antes de proceder.


A veces esnecesario formatear una partición en FAT32 o NTFS desde Linux (HD multimedia, dispositivos móviles que solo soportan FAT32, etc). En el caso de NTFS, es tal sencillo como descargar la utilidad mkfs.ntfs y utilizarla con la misma normalidad que mkfs.ext:

Descarga e instalación:
carlos@WhenIGrowUp:/$ sudo apt-get install ntfsprogs
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes extras:
libntfs10
Se instalarán los siguientes paquetes NUEVOS:
libntfs10 ntfsprogs
0 actualizados, 2 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 383kB de archivos.
Se utilizarán 942kB de espacio de disco adicional después de desempaquetar.
¿Desea continuar [S/n]?
Des:1 http://archive.ubuntu.com hardy/main libntfs10 2.0.0-1ubuntu2 [114kB]
Des:2 http://archive.ubuntu.com hardy/main ntfsprogs 2.0.0-1ubuntu2 [268kB]
Descargados 383kB en 1s (335kB/s)
Seleccionando el paquete libntfs10 previamente no seleccionado.
(Leyendo la base de datos ...
145091 ficheros y directorios instalados actualmente.)
Desempaquetando libntfs10 (de .../libntfs10_2.0.0-1ubuntu2_amd64.deb) ...
Seleccionando el paquete ntfsprogs previamente no seleccionado.
Desempaquetando ntfsprogs (de .../ntfsprogs_2.0.0-1ubuntu2_amd64.deb) ...
Configurando libntfs10 (2.0.0-1ubuntu2) ...
Configurando ntfsprogs (2.0.0-1ubuntu2) ...
Processing triggers for libc6 ...
ldconfig deferred processing now taking place

Formateo:
carlos@WhenIGrowUp:~# mkfs.ntfs /dev/sdb1
Cluster size has been automatically set to 4096 bytes.
100% - Done.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.

y listo, ya se puede utilizar:
carlos@WhenIGrowUp:~# mount /dev/sdb1 /mnt/

Recordar que si se desea su montaje automático en el arranque del sistema hay que incluirlo en el fichero /etc/fstab .

Otros artículos relacionados: Solucionar problemas de exFAT

h1

Error «mount: tipo de sistema de ficheros ‘ext4’ desconocido»

17/06/2009

Durante la progresiva desaparición de ReiserFS, consolidándose ext3 como sistema de ficheros en GNU/Linux 10 años después de su publicación se ha incluido como oficial el soporte de ext4 en el Kernel, con muchas mejoras y aumento de rendimiento (algunos equipos ya arrancan en 10″).

Tras formatear una partición con fsck.ext4, si al montarla ocurre el siguiente error:

carlos@shirley:~$ sudo mount -t ext4 /dev/sdc1 /mnt/
mount: tipo de sistema de ficheros 'ext4' desconocido
mount: unknown filesystem type 'ext4'

Es necesario utilizar un kernel 2.6.28 o superior. Para ver la versión que se está utilizando en ese momento:

carlos@shirley:~$ uname -a

y para instalar un kernel con soporte para ext4:

root@shirley:~# apt-cache search 2.6.28
root@shirley:~# apt-get install linux-image-2.6.28-11-generic

Tras esto, verificar que en el siguiente arranque se va a utilizar ese kernel. Para ello, si se utiliza Grub como gestor de arranque, comprobar o adaptar su fichero de configuración para que lo utilice:

carlos@WhenIGrowUp:/$ sudo /boot/grub/menu.lst
[...]
default 0
[...]
## ## End Default Options ##
title Ubuntu 8.10, kernel 2.6.28-11-generic
root (hd1,0)
kernel /boot/vmlinuz-2.6.28-11-generic root=UUID=bc4f22438-f175-2f7b-aebf-123456789 ro quiet splash reboot=b pci=noacpi
initrd /boot/initrd.img-2.6.28-11-generic
[...]

Guardar y reiniciar.

Nota I: si se pone la partición «/» en ext4, debe cambiarse el gestor de arranque a uno que soporte ext4. Grub por ej. no lo soporta, es necesario actualizarlo a Grub2.
Nota II: se se desea migrar una partición existente, se puede seguir el siguiente work around.

h1

Monit: error «Alert handler failed, retry scheduled for next cycle»

06/06/2009

Revisión (octubre de 2026): el mensaje indica que Monit no pudo completar el envío de una alerta. La causa puede ser la red, DNS, puertos, autenticación, certificados o parámetros TLS; no se debe eliminar la autenticación o el cifrado como solución general.

Revisa el registro de Monit, la configuración real del servidor de correo, el puerto y el mecanismo de autenticación exigido. Comprueba la sintaxis de la configuración y protege las credenciales. El comentario de using TLSV1 mostrado abajo corresponde a un ejemplo antiguo y no implica que TLS 1.0 sea apropiado actualmente.

Relacionado: Monit con Gmail y TLS.


Este error en Monit (utilidad software libre para la monitorización de sistemas, , no confundirla con su hermana comercial Mmonit) :

Alert handler failed, retry scheduled for next cycle

a la hora de enviar una alerta por correo electrónico se puede encontrar en /var/log/monit.log

Según la documentación oficial de Monit se puede deber a una incorrecta configuración de la cuenta de correo en el fichero /etc/monit/monitrc.
Generalmente la línea de tipo de autenticación suele ser la principal causa si ésta no es adecuada, luego con comentarla se soluciona la mayoría de los problemas (o ajustarla si se conocen los parámetros correctos del servidor).

#using TLSV1

h1

Cómo dividir y unir archivos grandes en Linux con split y cat

29/05/2009

Actualización (octubre de 2026): los comandos split y cat siguen siendo útiles para dividir y reconstruir ficheros. Ejemplo sencillo, en un directorio que contenga el archivo original:

split -d -b 100M archivoGrande.avi parte_
cat parte_[0-9]* > archivoRecompuesto.avi
sha256sum archivoGrande.avi archivoRecompuesto.avi

Los dos hashes SHA-256 deben coincidir para considerar idénticos ambos archivos. Mantén juntas todas las partes y usa una secuencia de nombres que permita ordenarlas correctamente. El ejemplo histórico de 2009 y sus tamaños se conservan abajo.

Relacionado: script de copias de seguridad en Linux.


En otros sistemas operativos hay utilidades bien conocidas como Hacha o ZIP que permiten dividir cualquier fichero en varias partes, de modo que sea más fácil para manejar (transmitirlo por Internet en protocolos que no tengan recuperación ante interrupciones, o grabarlo en medios físicos de capacidad limitada como DVDs).

En Linux existen varias alternativas, siendo la más conocida «split»:

carlos@shirley:/tmp/prueba$ split -d --bytes=100m archivoGrande.avi archivoPequeno_
carlos@shirley:/tmp/prueba$ ls -la
total 1144332
drwxr-xr-x 2 4096 2009-05-29 13:16 .
drwxrwxrwt 18 4096 2009-05-29 13:14 ..
-rw-r--r-- 1 585306112 2009-05-29 13:12 archivoGrande.avi
-rw-r--r-- 1 104857600 2009-05-29 13:16 archivoPequeno_00
-rw-r--r-- 1 104857600 2009-05-29 13:16 archivoPequeno_01
-rw-r--r-- 1 104857600 2009-05-29 13:16 archivoPequeno_02
-rw-r--r-- 1 104857600 2009-05-29 13:16 archivoPequeno_03
-rw-r--r-- 1 104857600 2009-05-29 13:16 archivoPequeno_04
-rw-r--r-- 1  61018112 2009-05-29 13:16 archivoPequeno_05

Para recomponerlo, en GNU/Linux vale con:
carlos@shirley:/tmp/prueba$ cat archivoPequeno_0* > archivoRecompuesto.avi

Y se puede comprobar que el proceso ha funcionado bien buscando diferencias entre el original y el recompuesto:
carlos@shirley:/tmp/prueba$ diff archivoGrande.avi archivoRecompuesto.avi
carlos@shirley:/tmp/prueba$

Mientras, si es necesario recomponerlo en Ms. Windows:
c:\> copy /b archivoPequeno_0* archivoRecompuesto.avi

Además, en GNU/Linux hay otras opciones como Dar (alternativa mejorada de Tar), Hoz o con interfaz gráfico como Dalle.

Fuente: LinuxPoison

04857600

Otros artículos relacionados: Copias de seguridad con Bash

h1

Script bash para generar alarmas según la ocupación del disco

25/05/2009

En caso de necesitar monitorear discos recibiendo un correo electrónico si se alcanza un porcentaje de ocupación determinado, un workaround rápido puede ser este pequeño script, personalizándolo con los valores propios:

#!/bin/bash
#It is neccesary to install "sendEmail", not "sendmail"

MONITOR1=80 #First alarm (%)
MONITOR2=90 #Second alarm (%)
DISCO=`df -h | grep /dev/sda2 | cut -c 41-42` #Change /dev/sda2, use the disk you want to monitor.
GB=`df -h | grep /dev/sda2 | cut -c 35-38`

#If your smtp server needs authentication, add parameters "-xu USERNAME" and "-xp PASSWORD"

if [ $DISCO -ge $MONITOR2 ]
then
echo "Espacio critico en disco, superado $MONITOR2"
sendEmail -l /var/log/syslog -f direccionRemite@gmail.com -t direccionDestino@gmail.com -u "Espacio CRITICO en Shirley - /dev/sda1" -m "El disco de Shirley está al $DISCO%. Espacio libre de $GB" -s miServidorSMTP.com
logger "80% alcanzado"
else
if [ $DISCO -gt $MONITOR1 ]
then
echo "Espacio critico en disco, superado $MONITOR1"
sendEmail -l /var/log/syslog -f direccionRemite@gmail.com -t direccionDestino@gmail.com -u "Espacio CRÍTICO en Shirley - /dev/sda1" -m "El disco de Shirley está al $DISCO%. Espacio libre de $GB" -s miServidorSMTP.com
logger "____________90% alcanzado"____________
else
echo "Disco OK"
fi
fi

Una vez creado el script, es necesario darle permiso de ejecución:
chmod 700 /root/alarma.ocupacion.sda2.sh

E incluirlo en el cron con la periodicidad deseada:
root@shirley:~# crontab -e
# m h dom mon dow command
* 19 * * * /root/alarma.ocupacion.sda1.sh
* 22 * * * /root/alarma.ocupacion.sda1.sh
* 9 * * * /root/alarma.ocupacion.sda1.sh

h1

Linux: por qué aparece «BAD PASSWORD» al cambiar una contraseña

08/05/2009

Advertencia de seguridad (2026): el ejemplo histórico explica cómo podía asignarse una contraseña débil desde una cuenta con privilegios. No se recomienda eludir las políticas de contraseñas. La configuración efectiva de PAM, las restricciones y la posibilidad de que el administrador establezca una clave débil dependen de la distribución y de la política vigente. Usa contraseñas únicas y robustas; si passwd rechaza una clave, revisa el motivo antes de intervenir.


Cuando el propio usuario intenta cambiar su password, el sistema comprueba la resistencia ante ataques del nuevo password. Si cumple unos mínimos, éste se acepta; en otro caso, se rechaza:

[carlos@shirley ~]$ passwd
Changing password for user carlos.
Changing password for carlos
(current) UNIX password: ******
New UNIX password: *******
BAD PASSWORD: it is based on your username
New UNIX password: *******

Si de todas maneras se quiere poner un password débil, éste lo debe poner root a ese usuario:

[carlos@shirley ~]# su -
Password: *******

[root@shirley ~]# passwd carlos
Changing password for user carlos.
New UNIX password: ****
Retype new UNIX password: ****
passwd: all authentication tokens updated successfully.

Otros artículos relacionados: Autenticación SSH mediante claves públicas

h1

Enviar los sucesos de logs por red

19/02/2009

En GNU/Linux para enviar los eventos que se registran en los logs a un servidor remoto syslogd es necesario editar la configuración de los eventos y añadir la IP a la que se reenviarán.

Es posible grabarlos en local y enviarlos simultanemanete a uno o varios hosts. Para ello se edita el fichero de configuración:

#nano /etc/syslog.conf

y se añade una línea por cada evento que se quiera replicar.

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none @172.18.222.86

# The authpriv file has restricted access.
authpriv.* /var/log/secure
authpriv.* @172.26.0.5

# Log all the mail messages in one place.
mail.* -/var/log/maillog
mail.* @172.26.0.5

# Log cron stuff
cron.* /var/log/cron
cron.* @LogsServer

# Everybody gets emergency messages
*.emerg *
*.emerg @172.26.0.5

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
uucp,news.crit @172.26.0.5

# Save boot messages also to boot.log
local7.* /var/log/boot.log
local7.* @172.26.0.5

Tras editarlo, es necesario reiniciar el demonio de logs
#sudo /etc/init.d/syslog restart