¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Ubuntu
  3. Tareas de administración
Extrait - Ubuntu Administración de un sistema Linux (2a edición)
Extractos del libro
Ubuntu Administración de un sistema Linux (2a edición) Volver a la página de compra del libro

Tareas de administración

Control y desempeño

1. Control de procesos

En el capítulo Uso de la línea de comandos, hemos descrito ya cómo controlar los procesos desde el shell. Aunque el comando ps devuelve mucha información, existen otros medios para obtenerla.

a. Los distintos estados de un proceso

Durante su vida (tiempo entre que inicia y se detiene), un proceso puede pasar por varios estados:

  • Ejecución en modo usuario (user mode).

  • Ejecución en modo núcleo (kernel mode).

  • En espera E/S (waiting).

  • Dormido (sleeping).

  • Listo para su ejecución (runnable).

  • Dormido en el swap (memoria virtual).

  • Nuevo proceso.

  • Fin de proceso (zombi).

Puede ver el estado de un proceso con el comando ps -l, columna S. En el siguiente ejemplo hay dos procesos. El estado S (sleeping) indica que el proceso duerme; el estado R (running), que el proceso está en ejecución.

$ ps -l 
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN    TTY     TIME CMD 
4 S  1000   961   803  13 80   0 -  2067 do_wait tty1 00:00:00 bash 
0 R  1000   970   961   0 80   0 -  2199 -       tty1 00:00:00 ps 

Las columnas se pueden ver con el parámetro -o, como en el ejemplo siguiente. Visualización de la lista de los procesos de eni con su pid, estado y comando:

$ ps -u eni -o pid,state,command 
   PID S COMMAND 
   948 S /lib/systemd/systemd --user 
   954 S (sd-pam) 
   960 S /usr/bin/pulseaudio -daemonize=no 
    961 S -bash 
   974 S /usr/bin/dbus-daemon -session -address=systemd: --nofork 
-nopidfile -systemd-activation 
   983 R ps -u eni -o pid,state,command 

El estado Z es peculiar: indica que un proceso terminó su ejecución y que al proceso padre aún no se le ha notificado de su finalización. A la larga, la notificación se le transmitirá al proceso padre o, en su defecto, al proceso systemd. A un proceso en el estado Z o «proceso zombi» se le agrega <defunct> a su nombre. Una acumulación de procesos zombis es la señal de un problema...

Control a través del registro de eventos

1. Consignar los eventos

Ubuntu registra los eventos de su actividad a través de dos servicios generales: rsyslogd y klogd. El comando ps ef | grep logd muestra (entre otras líneas) los dos procesos en curso. El segundo es el proceso grep.

# ps -ef|grep logd 
syslog    598    1 0 20:31 ?      00:00:00 rsyslogd -c5 
root     5804 2506 0 22:57 pts/2  00:00:00 grep --color=auto logd 

Los archivos de registro se encuentran en el directorio /var/log:

images/10RI12V6.png

Hay varios registros de eventos más en el directorio, pero, por razones de legibilidad, las grabaciones relativas a otros servicios se guardan en uno o más archivos separados. Así, en lugar de «hurgar» en el archivo syslog, el administrador tiene un acceso directo a la información de la aplicación.

Esto se gestiona mediante la configuración en el archivo /etc/rsyslog.d/50-default.conf. Aquí tiene un fragmento:

#  Default rules for rsyslog. 
# 
#                       For more information see rsyslog.conf(5)  
and /etc/rsyslog.conf 
 
# 
# First some standard log files.  Log by facility. 
# 
auth,authpriv.*                ...

Programar tareas

Ubuntu propone tres herramientas de programación de tareas correspondientes a tres tipos de tareas por realizar:

  • atd: este servicio ejecuta un trabajo determinado en un momento dado y solo una vez (a instalarse con: apt install at).

  • crond: este servicio ejecuta un trabajo (o más) a horarios precisos siguiendo un intervalo definido (el servicio ya está presente en Ubuntu Server y Desktop de forma predefinida).

  • anacron: este demonio ejecuta un trabajo (o más) después de un lapso determinado (demonio presente en Ubuntu Desktop de forma predefinida y que debe instalarse en Ubuntu Server).

Para el administrador, la utilidad básica sigue siendo el servicio cron, pero Ubuntu inicializa cron y anacron de forma predeterminada.

1. cron

a. Funcionamiento de cron

El servicio cron trabaja a partir del archivo /etc/crontab o de los archivos /etc/cron.d/* que contienen las entradas correspondientes a los directorios respectivos y los scripts que se han de ejecutar:

  • para las horas: /etc/cron.hourly

  • para los días: /etc/cron.daily

  • para las semanas: /etc/cron.weekly

  • para los meses: /etc/cron.monthly

Ejemplo de archivo /etc/crontab

images/10RIT15.png

Las cuatro últimas líneas muestran la periodicidad en un patrón de minutos/horas/días/meses/días de la semana, lo que da:

  • El 17.o minuto de cada hora para /etc/cron.hourly.

  • Cada día a las 6:25 para /etc/cron.daily.

  • Cada semana el domingo a las 6:47 para /etc/cron.weekly.

  • El primer día de cada mes a las 6:52 para /etc/cron.monthly.

Observe la presencia de un nombre...

Archivar y respaldar

Realizar copias de seguridad de los datos es parte integral del trabajo del administrador del sistema. La cuestión no es por qué hacer un respaldo, sino cuándo, cómo y qué respaldar. Corolario de la práctica de las copias de seguridad: aprender a manipular los archivos.

1. Principios del respaldo de datos

Hay que distinguir entre los distintos métodos: el llamado método incremental se utiliza para hacer respaldos de los archivos modificados (o que probablemente hayan cambiado) desde la última copia de seguridad. Esta práctica es suficiente en muchos casos, pero no es la única: se puede considerar una copia de seguridad completa a intervalos regulares.

De hecho, para una mayor eficacia, se utilizan tres métodos al mismo tiempo:

  • Respaldo completo, que, como su nombre indica, guarda todos los datos en un instante T.

  • Respaldo incremental, que guarda solo los datos que han cambiado desde la última copia de seguridad completa.

  • Respaldo diferencial, que guarda solo los datos modificados desde la última copia de seguridad (independientemente de su tipo).

Las unidades de tiempo generalmente utilizadas son el día, la semana y el mes. A continuación, encontrará un ejemplo de un ciclo de respaldo:

Dom

Lun

Mar

Mié

Jue

Vie

Sáb

Semana 1

C

D

D

I

D

D

D

Semana 2

C

D

D

I

D

D

D

Semana 3

C

D

D

I

D

D

D

Semana 4

C

D

D

I

D

D

D

Y utilizando, claro está, diferentes soportes de respaldo.

2. Comandos y herramientas de respaldo

Los ejemplos se refieren al respaldo del directorio de usuario, /home.

a. El comando tar (tape archiver)

Esta utilidad lee los archivos y los guarda secuencialmente en el archivo de salida. Utiliza una utilidad externa para comprimir los datos en línea: gzip (la más común) o bzip2 (la más potente). Algunos problemas espinosos son: la restauración de datos (los archivos corruptos no son recuperables), la realización de respaldos de todo un sistema (para /proc o los directorios...

Intervenciones sobre el núcleo

1. Presentación

En la gran mayoría de los casos, no será necesario manipular los parámetros del núcleo o compilar un nuevo núcleo. Pero la tarea del administrador también consiste en adaptar los parámetros del núcleo al funcionamiento óptimo del sistema.

Como recuerda frecuentemente su creador, Linus Torvalds, la definición de Linux se limita al núcleo (kernel) y no a una distribución, como por desgracia cree el uso popular. Mantenido por una comunidad de desarrolladores (y con su creador como «jefe» indiscutible) bajo la licencia GNU, el núcleo gestiona los recursos físicos y luego lógicos de un sistema informático. El sistema Linux Ubuntu es compatible con el estándar POSIX, que es una API (biblioteca de programas o interfaz) que rige las solicitudes de servicios de los procesos al núcleo.

El núcleo de Linux se denomina modular porque gestiona de forma dinámica los controladores de los periféricos en función de las necesidades.

Las fuentes oficiales del núcleo pueden descargarse del sitio web oficial de este: https://www.kernel.org

La versión inicial del núcleo Ubuntu:

# uname -r 
5.4.0-21-generic 

El número tiene en cuenta una versión principal (5.4) y una revisión que concierne a la corrección de errores o la adición de funcionalidades (aquí, 0). El último número (21) indica una variación en la configuración; puede definir perfectamente su propia variación en caso de una construcción diferente del núcleo.

2. /proc y /sys

Los directorios /proc y /sys son pseudosistemas de archivos. Son virtuales y no ocupan espacio en los medios de almacenamiento. Se trata de interfaces de acceso al núcleo y a los periféricos.

El directorio /proc (originalmente procfs, process filesystem) proporcionaba información sobre todos los procesos en ejecución, en la forma /proc/<PID>/*. Se ha ampliado para proporcionar información sobre el sistema: bus, red, equipo, controladores, sistemas de archivos… La información está generalmente en lectura, según el caso, salvo en /proc/sys, que por lo común está en escritura (ver los derechos de cada...

Puesta en práctica

1. Consumo de recursos

Preguntas

1/ ¿Qué constata en la siguiente captura de pantalla?

images/08RI01N.png

2/ ¿Qué acción podría causar tal carga en el sistema?

3/ Añadir más memoria al sistema ¿mejoraría el comportamiento de la máquina?

4/ ¿Le parece razonable lanzar un nuevo proceso que consuma recursos de la CPU? ¿Y en memoria? ¿Y de I/O?

5/ Si se trata de una situación recurrente y normal en términos de funcionamiento, ¿cuáles podrían ser las soluciones para mejorar el rendimiento?

6/ ¿Cómo haría usted para identificar el proceso responsable de esta carga?

Respuestas

1/ El comando vmstat 2 2 produce dos líneas de resultados. La primera toma valores estadísticos desde el inicio del sistema e indica una carga de CPU muy baja en promedio (id = 98).

La segunda línea, en cambio, indica una carga alta (id = 0), una carga baja en tiempo de usuario (us = 3), una alta en sistema (sy = 31) y una muy alta en wait IO (wa = 66).

Por lo tanto, podemos deducir de estas dos líneas que, globalmente, el sistema no está muy ocupado, pero que recientemente se ha lanzado un proceso que consume mucho tiempo y provoca muchas esperas de I/O (en realidad, esperas de interrupción del sistema).

2/ A priori, el proceso responsable de esta carga realiza accesos...