Presentaciones LPIC-2
Presentaciones LPIC-2
Arranque de
Linux
201.1 > Linux Kernel
LA BIOS
• Basic Input/Output System. Es un Firmware en ROM (o PROM)
• Dos partes fundamentales:
‣ Setup: Para configurar las opciones. Al arrancar se pulsa una
tecla para entrar, normalmente Supr
‣ POST: Revisa que funcionen los componentes principales
para poder arrancar
LA BIOS
C
HI SE
P
LA BIOS
• EFI/UEFI. Unified Extensible Firmware Interface
‣ Compatibilidad y emulación del BIOS
‣ Soporte para la Tabla de particiones GUID (GPT)
‣ Capacidad de gestionar y arrancar desde unidades de
almacenamiento grandes (MBR no soporta más de 2 TB).
‣ Entorno amigable y flexible, incluyendo capacidades de red.
‣ Diseño modular.
‣ Opción de “arranque seguro” (Secure Boot)
LA BIOS
LA BIOS
• Funcionamiento del arranque
‣ Al encender el PC se ejecuta el firmware de la BIOS (o UEFI)
‣ El POST comprueba que el hardware básico esté bien
‣ Se busca un cargador de arranque por orden en las unidades
que hayamos indicado en la secuencia de arranque del setup
‣ Si es BIOS se lee el primer sector de la unidad (MBR) donde
se encuentra el código para buscar el gestor de arranque
‣ Si es UEFI se ejecuta el gestor de arranque que se encuentra
en una partición especial (ESP)
MBR Y GPT
• MBR (Master Boot Record)
‣ Se encuentra en el primer sector del disco
‣ Contiene una tabla de 4 particiones
‣ Primaria, extendida o lógica
‣ No es capaz de manejar particiones de más de 2 TB
MBR Y GPT
• GPT (GUID Partition Table)
‣ Es compatible con MBR
‣ No funciona con BIOS, necesita EFI o UEFI
‣ Soporta tamaños de disco de hasta 9,4 zettabytes
‣ Puede gestionar todas las particiones que soporte el
Sistema Operativo (normalmente 128).
‣ Gestiona mejor el arranque del S. O.
Arquitectura
Del Kernel.
201.1 > Linux Kernel
Arquitectura General del Kernel de Linux
El kernel de Linux es el núcleo central del sistema operativo Linux. Es responsable de manejar toda la
interacción entre el hardware de la computadora y los procesos de software.
La arquitectura del kernel de Linux puede entenderse mejor dividiéndola en varias capas y componentes
principales:
● Sistema de Archivos: Linux soporta múltiples sistemas de archivos (como ext4, XFS, Btrfs, etc.),
permitiendo el almacenamiento y organización de archivos. El kernel maneja operaciones como la
creación, lectura, escritura y eliminación de archivos y directorios.
Arquitectura General del Kernel de Linux
● Subsistema de Red: Proporciona la funcionalidad necesaria para comunicarse con otros sistemas a
través de redes, soportando una amplia gama de protocolos.
● Interfaz de Dispositivos y Controladores: El kernel actúa como intermediario entre el hardware y los
procesos del sistema, gestionando la entrada/salida (I/O) con dispositivos a través de controladores
específicos del dispositivo.
● Seguridad: El kernel incluye características para asegurar el sistema, como el control de acceso, la
separación de privilegios y varios mecanismos de aislamiento.
Versiones
del Kernel
201.1 > Linux Kernel
Versionado del Kernel
El kernel de Linux sigue un modelo de desarrollo y lanzamiento que permite la introducción de nuevas
características, mejoras de rendimiento y correcciones de seguridad de manera organizada y predecible.
Las versiones del kernel de Linux se identifican mediante un esquema de numeración que sigue el formato X.Y.Z,
donde:
● X es el número de versión mayor. Cambios en este número indican cambios significativos o mejoras
importantes que pueden incluir incompatibilidades con versiones anteriores.
● Y es el número de versión menor. Tradicionalmente, si Y es impar (e.g., 2.5, 3.19), indica una versión en
desarrollo o "bleeding edge", donde se introducen nuevas características y cambios. Si Y es par (e.g., 2.6,
4.18), indica una versión estable, destinada al uso general. Sin embargo, desde la versión 3.0, este
esquema ha cambiado, y el foco está más en lanzar versiones estables regularmente, sin distinción
específica de números pares o impares para versiones en desarrollo.
● Ventana de Fusión (Merge Window): Justo después del lanzamiento de una nueva versión estable del
kernel, se abre una ventana de fusión de aproximadamente dos semanas. Durante este período, se
aceptan nuevas características, arquitecturas, controladores y mejoras significativas para la próxima
versión. Linus Torvalds, el creador de Linux, supervisa este proceso, fusionando cambios propuestos en el
árbol de código principal.
● Lanzamiento: Una vez que se considera que el kernel es lo suficientemente estable y no se identifican
errores críticos, Linus Torvalds realiza el lanzamiento oficial de la nueva versión estable. Luego, el ciclo se
repite para la próxima versión.
Además de las versiones regulares, ciertas versiones del kernel son designadas como soporte a largo plazo
(Long-Term Support, LTS). Estas versiones reciben actualizaciones de seguridad y correcciones de errores
durante un período extendido, típicamente de 2 a 6 años, lo que las hace ideales para sistemas que requieren
estabilidad y soporte a largo plazo, como servidores o dispositivos embebidos.
Arquitectura General del Kernel de Linux
El kernel de Linux es el núcleo central del sistema operativo Linux. Es responsable de manejar toda la
interacción entre el hardware de la computadora y los procesos de software.
La arquitectura del kernel de Linux puede entenderse mejor dividiéndola en varias capas y componentes
principales:
● Gestión de Procesos
● Gestión de Memoria
● Sistema de Archivos
● Subsistema de Red
● Seguridad
Módulos del
Kernel
201.1 > Linux Kernel
Módulos del kernel
Los módulos del kernel son archivos binarios que se adhieren a la estructura del kernel de Linux, permitiendo
interactuar directamente con el núcleo del sistema y el hardware. Pueden cargarse en el kernel en tiempo de
ejecución para añadir funcionalidades específicas al sistema operativo sin necesidad de reiniciar ni recompilar
el kernel. Permiten extender las capacidades del kernel de manera dinámica, como soporte para nuevos
dispositivos de hardware, sistemas de archivos, protocolos de red, etc.
Aunque los módulos en sí se almacenan en /lib/modules/$(uname -r)/, la configuración que determina cómo
se cargan y gestionan estos módulos puede encontrarse en /etc/
● lsmod: Muestra los módulos del kernel que están actualmente cargados en el sistema.
● modinfo: Proporciona información detallada sobre un módulo del kernel específico, incluyendo su versión,
descripción, parámetros que acepta, y más.
● insmod: Carga un módulo del kernel en el sistema. Requiere la ruta completa al archivo del módulo (.ko).
● rmmod: Elimina un módulo del kernel del sistema. Solo funciona con módulos que no tienen dependencias
actualmente cargadas.
● modprobe: Añade o elimina módulos del kernel y sus dependencias asociadas. Para cargar un módulo,
simplemente se especifica su nombre; para eliminarlo, se utiliza la opción -r.
● kmod: Es una herramienta de línea de comandos y una biblioteca para gestionar módulos del kernel de
Linux. kmod actúa como un reemplazo para varias utilidades anteriores (como lsmod, insmod, rmmod, y
modprobe), ofreciendo una forma más unificada y eficiente de gestionar módulos. Su funcionamiento
generalmente es transparente para el usuario, ya que proporciona las mismas funcionalidades que las
herramientas que reemplaza.
Módulos del kernel
El archivo [Link] se encuentra en /lib/modules/$(uname -r)/ y es crucial para gestionar las
dependencias entre módulos del kernel. Este archivo lista cada módulo seguido de los módulos de los que
depende. La presencia de [Link] asegura que cuando cargues un módulo que requiere otros módulos
para funcionar correctamente, las dependencias se carguen automáticamente en el orden correcto.
El funcionamiento de DKMS se basa en ganchos que se activan cuando se instala o se actualiza el kernel.
Cuando ocurre uno de estos eventos, DKMS automáticamente recompila e instala cualquier módulo registrado
con él para la nueva versión del kernel. Esto asegura que el módulo esté siempre disponible,
independientemente de las actualizaciones del kernel.
Ventajas de DKMS
Conveniencia: Automatiza el proceso de recompilación e instalación de módulos del kernel después de cada
actualización del kernel, eliminando la necesidad de intervención manual.
Compatibilidad: Asegura que los módulos del kernel sean compatibles con la versión actual del kernel,
reduciendo el riesgo de problemas de estabilidad o de seguridad.
Ciclo de Desarrollo
Uso de DKMS
Para usar DKMS, un módulo debe estar registrado con el sistema DKMS en el sistema operativo. Esto se hace
generalmente a través de un paquete específico del módulo que se instala en el sistema. Una vez que un
módulo está registrado, DKMS se encarga del resto, compilando e instalando el módulo automáticamente
cuando sea necesario.
DKMS es ampliamente utilizado en distribuciones de Linux para gestionar los controladores de dispositivos,
especialmente aquellos que no son parte del núcleo principal de Linux, como ciertos controladores de tarjetas
gráficas de NVIDIA o AMD, controladores de red, y otros dispositivos periféricos. Esto facilita significativamente
el proceso de mantenimiento del sistema para los administradores y usuarios, asegurando que los dispositivos
funcionen correctamente después de cada actualización del kernel.
Udev
201.1 > Linux Kernel
Udev - Gestión de Dispositivos
Se encarga de gestionar /dev/, donde se encuentran los nodos de dispositivo que representan el hardware del
sistema. Actúa como un gestor de dispositivos dinámico, permitiendo al sistema operativo responder en
tiempo real a los cambios de hardware, como conectar o desconectar dispositivos USB.
Cuando el kernel detecta un nuevo dispositivo o un dispositivo es eliminado, genera un evento en el subsistema
udev. Udev recibe este evento y lo procesa según las reglas definidas en su configuración, ubicadas en
/etc/udev/rules.d/ o /lib/udev/rules.d/. Las reglas de udev son archivos de texto que pueden incluir acciones
como renombrar un dispositivo, modificar sus permisos, o ejecutar un script cuando un dispositivo se conecta.
Características:
● Detección de hardware en Tiempo Real: udev escucha los eventos del kernel y reacciona de manera
inmediata, sin necesidad de reiniciar el sistema.
● Creación dinámica de Nodos de Dispositivo: Automáticamente crea y elimina nodos de /dev/.
● Reglas personalizables: Permite a los administradores de sistemas escribir reglas que definan cómo
deben manejarse los dispositivos.
● Gestión de permisos y accesos: A través de las reglas de udev, se pueden establecer permisos
específicos para los dispositivos, lo que contribuye a la seguridad del sistema permitiendo que solo
usuarios o grupos autorizados accedan a ciertos dispositivos.
Udevadm y más
Udevadm es la herramienta de administración de línea de comandos para udev.
● udevadm monitor: Monitorea y muestra los eventos de udev en tiempo real.
● udevadm info: Consulta la base de datos de udev para obtener información detallada sobre dispositivos
específicos.
● udevadm trigger: Permite activar manualmente los eventos udev como si un dispositivo acabara de ser
conectado.
● udevadm test: Ejecuta una simulación de eventos udev para un dispositivo específico. Esto no cambia el
sistema real ni afecta los dispositivos, pero muestra lo que udev haría si el evento ocurriera.
Otros comandos
● lshw (List Hardware) proporciona información detallada sobre el hardware del sistema. Incluye detalles
sobre la CPU, memoria, discos, tarjetas de red, y mucho más.
● lspci (List PCI) muestra información sobre todos los dispositivos PCI (Peripheral Component
Interconnect) en el sistema
● lsusb (List USB) muestra información sobre los dispositivos USB conectados al sistema, incluyendo
dispositivos integrados y externos como unidades flash, discos duros externos, webcams, y más.
Introducción
a Systemd
201.2 > Sytemd Startup Configuration
Systemd
Systemd es un sistema de inicio y gestor de servicios para Linux, diseñado para ser compatible con scripts
de inicio SysV e LSB(Linux Standard Base). Proporciona paralelización de tareas, lo que significa que puede iniciar
servicios en paralelo, acelerando el proceso de arranque. Además, systemd introduce el concepto de
"unidades" para organizar y gestionar los recursos del sistema.
Las unidades son recursos que systemd sabe cómo manejar, que pueden ser servicios, montajes de sistema de
archivos, sockets, y otros. Algunos de los tipos de unidades más comunes son:
● Service units (.service): Definen cómo iniciar, detener, reiniciar y recargar servicios.
● Target units (.target): Agrupan unidades juntas, funcionando de manera similar a los niveles de
ejecución, pero más flexibles.
Red Hat Enterprise Linux June 2014 (v7.0) Yes June 2014 (v7.0)
SUSE Linux Enterprise Server October 2014 (v12) Yes October 2014 (v12)
● Cada unidad se define en un fichero con el nombre de dicha unidad y en la extensión se indica el tipo de
unidad, por ejemplo [Link]
[Unit] [Unit]
Description=Regular background program Description=Graphical Interface
processing daemon Documentation=man:[Link](7)
Documentation=man:cron(8) Requires=[Link]
After=[Link] [Link] Wants=[Link]
Conflicts=[Link] [Link]
[Service] After=[Link] [Link] [Link]
ExecStart=/usr/sbin/cron -f [Link]
KillMode=process AllowIsolate=yes
Restart=on-failure
[Install]
WantedBy=[Link]
Systemd - Slices
Systemd aprovecha la funcionalidad de los cgroups (Control Groups) del kernel de Linux para implementar su sistema
de gestión de "slices". Cgroups permite al sistema operativo organizar procesos en grupos jerárquicos y
asignarles políticas de uso de recursos del sistema, como CPU, memoria, E/S de disco y red.
Systemd mapea su jerarquía de unidades, incluidos servicios, mount points, y slices, directamente a una jerarquía de
cgroups, permitiendo un control sobre los recursos que cada proceso puede consumir.
● Los "User Slices" se utilizan para gestionar y aislar los procesos iniciados por los usuarios del sistema. Cada
usuario que inicia sesión en el sistema obtiene su propio "user slice", que permite a systemd gestionar y limitar
los recursos usados por los procesos iniciados por el usuario. Los nombres de estos "slices" siguen el formato
user-[UID].slice, donde [UID] es el ID de usuario. Por ejemplo, los procesos iniciados por un usuario con UID
1000 serán gestionados bajo [Link].
● Los "System Slices" son utilizados para organizar y gestionar servicios del sistema y otros procesos no
relacionados directamente con sesiones de usuario individuales. Por defecto, systemd inicia varios "system
slices" para diferentes propósitos.
Systemd - System Slices
System Slices
● -.slice: La raíz de la jerarquía de cgroups de systemd. Todos los demás "slices", servicios y unidades se
encuentran bajo este slice.
● [Link]: El predeterminado para servicios del sistema. La mayoría de los servicios de systemd se colocan
aquí a menos que se especifique otro slice.
Para ver los procesos que se están ejecutando bajo el "slice" de un usuario específico, puedes usar el comando
systemctl status [Link], ajustando el número 1000 al UID del usuario de interés.
Una herramienta útil para monitorear el uso de recursos por parte de las unidades de systemd es systemd-cgtop.
Systemd - Override y Drop-in
Override (Sobrescritura): La capacidad de "override" permite a los usuarios cambiar o añadir configuraciones a las
unidades de systemd sin modificar directamente los archivos de configuración originales. Esto es útil para preservar
las personalizaciones a través de actualizaciones de paquetes, que podrían sobrescribir cambios en los archivos de
configuración estándar.
Drop-In Units (Unidades Adicionales): Son archivos de configuración adicionales que systemd lee junto con el
archivo de configuración principal de una unidad. Los "drop-in" se almacenan en directorios con un nombre que sigue
el patrón [unidad].d/ y pueden contener modificaciones o adiciones a la configuración de la unidad. Systemd combina
automáticamente la configuración del archivo principal con todos los archivos "drop-in" aplicables.
Seguridad
en systemd
201.3 > systemd Security
Seguridad en Systemd
Systemd permite configurar sus unidades para para proteger y restringir los procesos que se inician en ellas.
Podremos establecer privilegios a usuarios y grupos, asignar directorios temporales, restringir dispositivos y
redes y administrar los cgroups.
Ejemplo:
[Service]
User=www-data
Group=www-data
SupplementaryGroups=webdev
Seguridad en Systemd
PrivateTmp=: Esta opción crea un directorio /tmp y /var/tmp privado para el servicio, aislado del sistema y de otros
servicios.
Ejemplo:
[Service]
PrivateTmp=true
Esto asegura que el servicio tenga su propio espacio de directorio temporal, evitando posibles conflictos o
filtraciones de datos con otros servicios que también utilizan /tmp.
Seguridad en Systemd
DeviceAllow=: Especifica qué dispositivos puede acceder un servicio. Esto puede ser usado para limitar el
acceso a dispositivos específicos por razones de seguridad.
Ejemplo:
[Service]
DeviceAllow=/dev/null rw
DeviceAllow=/dev/random r
En este ejemplo, el servicio tiene permisos de lectura y escritura en /dev/null y solo permisos de lectura en
/dev/random.
Seguridad en Systemd
Ejemplo:
[Service]
IPAddressAllow=[Link]/24
IPAddressDeny=any
En este ejemplo, el servicio sólo puede comunicarse con dispositivos en la subred [Link]/24 y se le niega el
acceso a todas las demás direcciones IP.
RestrictNetworkInterfaces=: Restringe las interfaces de red a las que puede acceder un servicio.
Ejemplo:
[Service]
RestrictNetworkInterfaces=eth0
Linux capabilities permiten otorgar privilegios específicos a procesos sin necesidad de darles todos los
privilegios de root. Esto se configura usando AmbientCapabilities= en systemd.
Ejemplo:
[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE
Esto permite que el servicio vincule puertos menores a 1024 sin ser root. Se puede consultar man capabilities
Cgroups se usan para limitar, contabilizar y aislar el uso de recursos (CPU, memoria, disco, red) de un grupo de
procesos. Systemd utiliza cgroups para gestionar los recursos de los servicios.
Ejemplo:
[Service]
CPUQuota=20%
MemoryLimit=500M
Este ejemplo configura el servicio para que use como máximo el 20% de la CPU y 500MB de memoria.
Seguridad en Systemd
Ejemplo completo
[Unit]
Description=Ejemplo de servicio seguro
[Service]
ExecStart=/usr/bin/ejemplo
User=ejemplo
Group=ejemplo
SupplementaryGroups=ejemplo_supp
PrivateTmp=true
DeviceAllow=/dev/null rw
IPAddressAllow=[Link]/24
IPAddressDeny=any
RestrictNetworkInterfaces=eth0
AmbientCapabilities=CAP_NET_BIND_SERVICE
CPUQuota=20%
MemoryLimit=500M
[Install]
WantedBy=[Link]
GRUB 2
201.4 > Bootloaders and System Recovery
GESTORES DE ARRANQUE
La BIOS/UEFI pasan el control al gestor de arranque que será el programa
responsable de cargar el sistema operativo.
• LILO
Linux Loader, es un cargador muy antiguo que está en desuso.
• GRUB (legacy)
El sustituto de Lilo, pero también casi desaparecido por su sucesor GRUB2. Lo
podemos encontrar en distribuciones antiguas.
GRUB numera las unidades y particiones de forma especial. El primer disco será
(hd0) y la primera partición (hd0,0), después 1 y así consecutivamente
● Interfaz interactiva: GRUB proporciona una interfaz de línea de comandos donde puedes escribir
comandos manualmente para cargar sistemas operativos, configurar parámetros de kernel, y modificar la
configuración de arranque.
● Flexibilidad: Puedes utilizar la shell para cargar diferentes núcleos, pasar parámetros específicos al
kernel, y reparar o modificar entradas de arranque corruptas o mal configuradas.
● Soporte de scripts: GRUB permite ejecutar comandos desde scripts, lo que te permite automatizar
tareas repetitivas directamente desde la shell.
Shell de GRUB
Comandos Básicos de la Shell de GRUB
● ls: Lista las particiones y dispositivos reconocidos por GRUB. Es útil para identificar los dispositivos
disponibles y su estructura de partición.
● set: Muestra o establece variables de entorno de GRUB. Por ejemplo, set root=(hd0,1) configura la
partición desde la cual GRUB intentará cargar el sistema operativo.
● cat: Muestra el contenido de un archivo. Es útil para ver la configuración de los archivos de configuración
dentro de GRUB.
● configfile: Carga un archivo de configuración de GRUB. Esto puede ser utilizado para cambiar entre
diferentes configuraciones sin alterar la configuración original.
● insmod: Carga un módulo GRUB. Los módulos pueden proporcionar funcionalidad adicional como
soporte para un sistema de archivos.
● search: Busca un dispositivo por su etiqueta o UUID, lo cual es útil si no conoces la designación exacta
del disco o partición.
efivar -l
Este comando listaría todas las variables UEFI disponibles, lo que puede ayudarte a diagnosticar problemas
Al igual que GRUB 2 tiene un shell, en los entornos UEFI, existe una funcionalidad denominada UEFI Shell, que es
una interfaz de línea de comandos que permite manipular el firmware UEFI, los dispositivos y las particiones. La
shell de UEFI puede ser usada para ejecutar scripts, arrancar sistemas operativos de manera manual, y cambiar
la configuración del firmware. Sus usos principales son:
● Navegación y Gestión de Archivos: Permite navegar por los sistemas de archivos en dispositivos
reconocidos por UEFI.
● Carga de Aplicaciones EFI: Permite iniciar aplicaciones EFI, como otros gestores de arranque o
herramientas de diagnóstico.
● Modificación de Variables UEFI: Permite modificar variables de configuración que controlan el
comportamiento del firmware y del proceso de arranque.
Opciones del GRUB
Los gestores de arranque como GRUB permiten modificar o sobrescribir temporalmente las opciones de
arranque durante el proceso de inicio. Esto puede incluir cambiar parámetros del kernel, modificar el
dispositivo raíz, o ajustar otros parámetros importantes. Estos cambios pueden ser vitales para solucionar
problemas de arranque o para iniciar el sistema en un modo especial como el modo de recuperación o el modo
seguro.
Acceso al Menú de GRUB: Al iniciar el sistema, normalmente pulsando una tecla como Shift o Esc, se accede al
menú de GRUB.
Modificación de Parámetros de Arranque: En el menú de GRUB, puedes seleccionar una entrada de arranque
y presionar 'e' para editar sus comandos de inicio. Esto te permite modificar parámetros como:
Continuar el Arranque: Después de realizar los cambios, se puede continuar el proceso de arranque con las
nuevas configuraciones presionando Ctrl+x o F10, según la versión de GRUB.
Contraseña para GRUB
Configurar una contraseña en GRUB sirve para varios propósitos de seguridad:
● Restringir el Acceso al Menú de GRUB: Evita que los usuarios no autorizados cambien opciones de
arranque o editen los parámetros del kernel y de arranque.
● Prevenir el Acceso a Modos de Recuperación: Impide que alguien use el modo de recuperación o el
shell de emergencia a menos que conozca la contraseña.
● Proteger las Entradas de Arranque Específicas: Puedes configurar contraseñas para entradas
específicas, permitiendo un control más detallado sobre quién puede arrancar qué sistemas operativos
o versiones del kernel.
Configuración de la Contraseña en GRUB
1. Generar una Contraseña Hash
Primero, debes generar un hash de la contraseña que deseas usar. Esto se puede hacer usando el comando
grub-mkpasswd-pbkdf2. Este comando te pedirá que ingreses la contraseña y luego generará un hash PBKDF2
de la misma.
grub-mkpasswd-pbkdf2
Después de generar el hash de la contraseña, necesitas agregarlo al archivo de configuración de GRUB. Este
archivo suele estar ubicado en /etc/grub.d/40_custom .
set superusers="usuario"
password_pbkdf2 usuario tu_hash_de_contraseña
Reemplaza "usuario " con un nombre de usuario que elijas, y tu_hash_de_contraseña con el hash generado
anteriormente.
Configuración de la Contraseña en GRUB
Si quieres que alguna entrada del menú de arranque no necesite contraseña para arrancar, habría que añadir
--unrestricted en las líneas de menuentry en /etc/grub/[Link] o /etc/grub.d/10_linux para las que no quieres
pedir la contraseña, dejando las demás protegidas por defecto.
Después de editar y guardar el archivo de configuración, necesitas actualizar GRUB para que los cambios surtan
efecto:
update-grub
Este comando regenerará el archivo de configuración principal de GRUB, incorporando los cambios que has
realizado.
Systemd
Boot
201.4 > Bootloaders and System Recovery
Systemd-boot
systemd-boot, anteriormente conocido como gummiboot, es un gestor de arranque simple basado en UEFI que
viene con systemd. Está diseñado para ser rápido y sencillo, y proporciona funcionalidades básicas para cargar el
kernel de Linux y otras imágenes de arranque directamente en hardware con UEFI, sin depender de GRUB u otros
bootloaders más complejos.
La instalación de systemd-boot es un proceso directo, pero es importante asegurarse de que el sistema esté
utilizando UEFI y no BIOS tradicional. Aquí están los pasos básicos para instalar systemd-boot:
Instalar systemd-boot:
Si estás usando una distribución que viene con systemd, puedes usar bootctl para instalar systemd-boot:
bootctl install
Este comando instalará systemd-boot en la partición ESP (EFI System Partition) que está montada típicamente
en /boot o /efi. Copia los binarios de systemd-boot a la ESP y crea las entradas en la NVRAM del sistema UEFI
para bootear systemd-boot.
Configuración de systemd-boot
Los archivos de configuración principales son:
loader/[Link]: Este archivo configura el comportamiento general del gestor de arranque. Ejemplo de configuraciones
en [Link]:
default Debian
timeout 4
editor 0
Aquí, default especifica el patrón del archivo de entrada que se cargará por defecto. timeout establece el tiempo de espera
antes de arrancar automáticamente la entrada por defecto, y editor indica si el editor de entradas de arranque debe estar
habilitado (1) o deshabilitado (0).
Entradas de arranque: Las entradas de arranque se definen en archivos .conf ubicados en el directorio
loader/entries/ . Cada sistema operativo o kernel que desees arrancar debe tener un archivo de entrada. Un ejemplo de
un archivo de entrada para un kernel de Linux podría ser:
title Debian
linux /vmlinuz-linux
initrd /[Link]
options root=PARTUUID=xxxxx rw
Aquí, title es el nombre que aparece en el menú de arranque, linux especifica la ruta al kernel de Linux, initrd es la ruta a la
imagen initramfs, y options contiene las opciones pasadas al kernel, como la especificación del dispositivo root.
Configuración de systemd-boot
Actualizar systemd-boot
Si necesitas actualizar systemd-boot después de cambiar la configuración o actualizar el firmware, puedes ejecutar
bootctl update
Este comando actualizará los binarios de systemd-boot en la ESP si hay versiones más nuevas disponibles.
Systemd rescue
and emergency
modes
201.3 > Bootloaders and System Recovery
Modo Rescate
El modo de rescate de systemd es un estado de operación que arranca el sistema con los servicios más esenciales y un
entorno de shell para permitir la administración y reparación del sistema. En este modo, systemd intenta montar todas las
particiones del sistema de archivos, pero no arranca la mayoría de los servicios normales y mantiene el sistema en un
estado mínimo.
Durante el arranque del sistema, puedes interrumpir el proceso normal de arranque (usualmente manteniendo presionado
Shift o pulsando Esc para ingresar al menú de GRUB).
Editar la entrada de arranque en GRUB y agregar el argumento [Link]=[Link] al comando de arranque del
kernel.
Continuar el arranque.
Una vez en el modo de rescate, se te pedirá la contraseña de root para continuar. Este modo es útil para reparar sistemas
de archivos dañados, recuperar archivos perdidos, modificar configuraciones erróneas y otras tareas de diagnóstico y
recuperación.
Modo de Emergencia
El modo de emergencia es incluso más minimalista que el modo de rescate. Este modo no intenta montar las particiones
de sistema de archivos, excepto la raíz (/), y solo inicia los servicios más básicos. El modo de emergencia es útil cuando
incluso el modo de rescate es demasiado avanzado, por ejemplo, cuando hay errores serios en las particiones o el sistema
de archivos.
En el modo de emergencia, también necesitarás autenticarte como root para proceder. Este modo es adecuado para
situaciones en las que necesitas un entorno aún más controlado y minimalista para efectuar reparaciones críticas.
Directorios
Importantes
201.4 > Bootloaders and System Recovery
/boot/
1. /boot/
El directorio /boot/ es un componente esencial en la mayoría de los sistemas Linux, donde se almacenan los archivos
necesarios para el arranque del sistema. Aquí se guardan los siguientes tipos de archivos:
● vmlinuz (o vmlinuz-<version>): Es el kernel de Linux comprimido. Este archivo es cargado directamente por el gestor
de arranque (como GRUB) y es esencial para iniciar el sistema operativo.
● initramfs (o initrd, initramfs-<version>.img): Es una imagen temporal del sistema de archivos inicial que se carga en la
memoria durante el arranque antes de que el sistema de archivos raíz esté disponible. El initramfs contiene los
módulos del kernel y los scripts necesarios para montar el sistema de archivos raíz y realizar configuraciones
preliminares antes de pasar el control al sistema operativo principal.
● [Link] (o [Link]-<version>): Contiene el mapa de símbolos del kernel, que es útil para la depuración del
kernel.
● config (o config-<version>): Guarda la configuración de compilación del kernel, que documenta cómo se configuró el
kernel.
/boot/grub/
2. /boot/grub/
El directorio /boot/grub/ es específico para sistemas que usan GRUB como gestor de arranque. Contiene los archivos de
configuración y datos necesarios para que GRUB inicie el sistema operativo y otros componentes.
Incluye:
● [Link]: Es el archivo de configuración principal de GRUB. Contiene menús, entradas de arranque, y opciones que
GRUB utiliza para cargar sistemas operativos o herramientas adicionales. Este archivo no se debe editar
manualmente.
● grubenv: Almacena variables de entorno para GRUB, que pueden ser modificadas durante el arranque y guardadas
para usos posteriores.
● Fonts, modules, i386-pc, x86_64-efi, etc.: Directorios y archivos que contienen módulos, fuentes, y otros archivos
binarios que GRUB puede cargar durante el arranque. Estos módulos pueden añadir funcionalidades adicionales a
GRUB, como soporte para diferentes sistemas de archivos o capacidades de red.
/boot/efi/
El directorio /boot/efi/ es utilizado en sistemas con firmware UEFI.
Este directorio es una montura del sistema de archivos EFI (ESP - EFI System Partition) y contiene los cargadores de
arranque y las aplicaciones necesarias para sistemas UEFI.
● EFI: Directorio que contiene las aplicaciones de firmware UEFI, como el cargador de arranque de Windows, GRUB
como EFI/grub/grubx64.efi para sistemas Linux, y otras utilidades UEFI.
● Microsoft: Carpeta que contiene los archivos de arranque de Windows en sistemas dual-boot.
● BOOT: Directorio que puede contener un cargador de arranque de respaldo, como [Link], que se puede
utilizar si el cargador principal falla o no está disponible.
SMART
202.1 > Storage Device Integrity
and Encryption
Introducción a SMART
SMART es una tecnología integrada en la mayoría de los discos duros y SSD modernos que
permite a los usuarios y sistemas operativos monitorear el estado del dispositivo de
almacenamiento y detectar fallos potenciales antes de que ocurran.
Proporciona una variedad de datos sobre el estado del disco, incluyendo atributos como la
tasa de errores de lectura, el tiempo de búsqueda, el número de sectores reasignados, y
muchos otros parámetros que pueden indicar problemas de hardware inminentes.
El comando smartctl es parte del paquete smartmontools y se utiliza para controlar y
monitorear los dispositivos de almacenamiento usando SMART.
Uso Básico de smartctl
Consultar toda la información SMART del disco: smartctl -a /dev/sda
Este comando muestra todos los atributos SMART del disco /dev/sda, incluyendo información básica, atributos SMART,
y registros de auto-pruebas.
Ejecutar una prueba SMART: smartctl -t short /dev/sda smartctl -t long /dev/sda
Las pruebas SMART pueden ser cortas o largas, y verifican diferentes aspectos del hardware del disco para detectar
fallos potenciales.
Smartd
smartd es el demonio de smartmontools que monitorea continuamente los discos duros y envía alertas si detecta
problemas. Se configura con el fichero /etc/[Link].
Línea de ejemplo:
/dev/sda -a -o on -S on -s (S/../.././02|L/../../7/03) -m root@[Link]
-a: Activa todas las pruebas y notificaciones SMART.
-o on: Activa el monitoreo automático de sectores fuera de servicio.
-S on: Activa la recopilación automática de estadísticas SMART.
-s (S/../.././02|L/../../7/03): Programa pruebas cortas (S) cada día a las 2 AM y pruebas largas (L) cada semana el día 7 a
las 3 AM.
-m root@[Link]: Envía notificaciones por correo electrónico a root@[Link].
Iniciar smartd
systemctl start smartd
systemctl enable smartd
Atributos SMART
● Reallocated Sectors Count (Cuenta de Sectores Reasignados): Indica el número de sectores defectuosos que
han sido reasignados. Un aumento en este valor puede ser una señal de advertencia.
● Current Pending Sector Count (Cuenta de Sectores Pendientes): Muestra el número de sectores que están
pendientes de ser reasignados debido a errores de lectura.
● Offline Uncorrectable Sector Count (Cuenta de Sectores No Corregibles Offline): Indica el número de sectores
que no pueden ser corregidos durante una prueba offline.
● Power-On Hours (Horas de Encendido): Muestra el tiempo total que el disco ha estado en funcionamiento.
● Temperature Celsius (Temperatura en Celsius): Indica la temperatura actual del disco. Temperaturas elevadas
pueden reducir la vida útil del disco.
Encriptación de
discos y sistemas
de archivos
202.1 > Storage Device Integrity
and Encryption
Encriptación de Discos
La encriptación de discos y sistemas de archivos es una técnica esencial para proteger los
datos almacenados en dispositivos de almacenamiento.
Esta técnica garantiza que los datos no puedan ser leídos o modificados por personas no
autorizadas, protegiendo así la información sensible incluso si el dispositivo de
almacenamiento es robado o accedido de forma indebida.
Tipos de Encriptación
● Encriptación de Discos Completos
● Encriptación a Nivel de Sistema de Archivos
Encriptación de Discos Completos
La encriptación de discos completos (FDE - Full Disk Encryption) cifra todos los datos en un
disco duro o un dispositivo de almacenamiento. Este tipo de encriptación se aplica a nivel de
bloque y protege todo el contenido del disco, incluyendo los archivos del sistema, los archivos
de usuario, el espacio libre y los archivos temporales.
Ventajas:
● Seguridad Integral: Protege todos los datos en el dispositivo.
● Transparencia: Una vez que se ha autenticado, el sistema de archivos y las aplicaciones
pueden acceder a los datos sin necesidad de modificar el software.
● Protección de Todo el Sistema: Incluye archivos de sistema y de usuario.
Desventajas:
● Rendimiento: Puede afectar el rendimiento del sistema debido al cifrado y descifrado
continuo.
● Complejidad en la Recuperación: La recuperación de datos en caso de fallos del sistema
puede ser más complicada.
Encriptación a Nivel de Sistema de Archivos
La encriptación a nivel de sistema de archivos cifra archivos o directorios específicos dentro de
un sistema de archivos. Esta técnica permite un control más granular sobre qué datos se cifran
y quién puede acceder a ellos.
Ventajas:
● Flexibilidad: Permite cifrar solo los archivos sensibles.
● Rendimiento Mejorado: Menos impacto en el rendimiento ya que solo se cifran partes
específicas del disco.
● Control Granular: Facilita la implementación de políticas de acceso basadas en usuarios
o grupos.
Desventajas:
● Gestión Compleja: Requiere una gestión más detallada para asegurarse de que todos los
archivos sensibles estén cifrados.
● No Protege Todo el Disco: Los archivos no cifrados pueden ser vulnerables.
Algoritmos de Encriptación
Existen varios algoritmos de encriptación utilizados comúnmente para cifrar datos en discos y
sistemas de archivos:
Serpent
Serpent es un algoritmo de cifrado simétrico que también fue finalista en el proceso de
selección para el estándar AES. Es conocido por su alta seguridad, aunque es más lento
que AES.
Twofish
Twofish es otro algoritmo de cifrado simétrico que ofrece un buen equilibrio entre
seguridad y rendimiento. Al igual que Serpent, también fue un finalista en el proceso de
selección para AES.
Software de
cifrado
202.1 > Storage Device Integrity
and Encryption
dm-crypt
dm-crypt es una infraestructura del kernel de Linux que proporciona encriptación transparente
de dispositivos de almacenamiento a nivel de bloque. Es una de las capas más bajas en la pila de
encriptación de discos en Linux y es utilizada como backend por muchas herramientas de
encriptación, incluyendo LUKS.
● iSCSI (Internet Small Computer Systems Interface): permite enviar comandos SCSI a través de
redes IP.
● FCoE (Fibre Channel over Ethernet): encapsula comandos Fibre Channel en tramas Ethernet,
permitiendo que el tráfico Fibre Channel se transporte a través de redes Ethernet.
● AoE (ATA over Ethernet): permite la transmisión de comandos ATA a través de redes Ethernet,
proporcionando acceso a nivel de bloque a dispositivos de almacenamiento.
Identificadores en SAN
● WWID: Identificador único mundial que se asigna a cada dispositivo de almacenamiento en
una SAN. Los WWIDs son utilizados para identificar de manera única y persistente los
dispositivos de almacenamiento.
● WWN: Nombre único mundial asignado a cada puerto de red en una SAN, similar a una
dirección MAC en redes Ethernet.
○ Tipos de WWN
● LUN (Logical Unit Number): Número que se utiliza para identificar una unidad lógica dentro de
un dispositivo de almacenamiento en una SAN.
RAID
202.2 > Configuración de RAID
Introducción a RAID
RAID (Redundant Array of Independent Disks) permite mejorar el rendimiento y/o la redundancia de
los datos en los sistemas de almacenamiento.
Se pueden crear RAID usando hardware o software. En ambos casos dispondremos de una unidad de
almacenamiento con prestaciones adicionales a las de los discos originales utilizados. Se puede
aumentar velocidad de lectura y escritura, pero su mayor utilidad es conseguir mayor seguridad
protegiendo al sistema del fallo físico de un disco.
Aquí nos centraremos en cómo configurar e implementar RAID por software, específicamente RAID 0, 1
y 5, utilizando herramientas y utilidades de Linux.
Niveles de RAID
RAID 0 (Striping):
Descripción: Los datos se dividen en bloques y se distribuyen entre todos los discos del
arreglo. No ofrece redundancia.
RAID 1 (Mirroring):
Descripción: Los datos se duplican en dos discos. Ofrece redundancia al mantener una copia
idéntica de los datos en ambos discos.
Descripción: Los datos y la información de paridad se distribuyen entre tres o más discos. Si
un disco falla, los datos pueden reconstruirse a partir de la paridad.
Desventajas: Requiere al menos cuatro discos y tiene una capacidad efectiva del 50% del
total.
Niveles de RAID
Conocimiento de Otros Niveles de RAID
RAID 6: Similar a RAID 5, pero con una paridad adicional. Puede soportar la falla de dos discos.
RAID 7: Nivel patentado que añade una capa de caché adicional para mejorar el rendimiento.
Volume Groups (VG): Conjuntos de volúmenes físicos combinados para crear un pool de
almacenamiento del cual se asignan volúmenes lógicos.
● pvcreate: Inicializa un disco o partición como un volumen físico para ser utilizado en LVM.
pvcreate /dev/sda1
● pvdisplay: Muestra información sobre volúmenes físicos.
pvdisplay
● pvmove: Mueve los datos de un volumen físico a otro.
pvmove /dev/sda1 /dev/sdb1
● pvremove: Elimina la etiqueta de volumen físico de un dispositivo.
pvremove /dev/sda1
COMANDOS LVM. GRUPOS DE VOLUMENES
● vgcreate: Crea un grupo de volúmenes.
vgdisplay
● vgchange: Activa o desactiva grupos de volúmenes.
vgchange -a y myvg
● vgextend: Añade un volumen físico a un grupo de volúmenes.
vgextend myvg /dev/sdc1
● vgreduce:Elimina un volumen físico de un grupo de volúmenes.
vgremove myvg
COMANDOS LVM. VOLUMENES LÓGICOS
● lvcreate: Crea un volumen lógico.
lvdisplay
● lvextend: Aumenta el tamaño de un volumen lógico.
lvremove /dev/myvg/mylv
Instantaneas
Las instantáneas permiten crear copias de los volúmenes lógicos en un estado particular en el tiempo.
Son útiles para realizar copias de seguridad y restauraciones rápidas.
● /dev/mapper/
Directorio donde se encuentran los enlaces a los volúmenes lógicos activos.
● /etc/lvm/[Link]
Archivo de configuración principal para LVM.
ZFS
202.4 > Basic ZFS Operations
ZFS
ZFS (Zettabyte File System) es un sistema de archivos avanzado y un gestor de volúmenes lógicos
desarrollado originalmente por Sun Microsystems. ZFS combina las funcionalidades de un sistema de
archivos y un gestor de volúmenes, lo que facilita la administración del almacenamiento y proporciona
características avanzadas como protección contra la corrupción de datos, alta capacidad, snapshots, y
administración simplificada.
ZFS utiliza sumas de verificación (checksums) para cada bloque de datos almacenado. Cada vez que se
lee un bloque, ZFS verifica su integridad comparando la suma de verificación calculada con la
almacenada.
Si se detecta una discrepancia, ZFS puede corregir automáticamente el error utilizando datos
redundantes si el sistema está configurado en un RAID adecuado (como RAID-Z o Mirrors).
Características Principales de ZFS
2. Capacidad de Almacenamiento
ZFS está diseñado para manejar una cantidad extremadamente grande de datos, hasta 256 billones de
exabytes. Esto es más que suficiente para cualquier aplicación actual y futura.
3. Administración de Propiedades
ZFS permite establecer propiedades en los sistemas de archivos, como cuotas (quota), límites de reserva
(reservation), y niveles de compresión.
● Virtual Device (VDEV): Un VDEV es un bloque lógico de almacenamiento en ZFS. Los VDEVs
pueden ser discos individuales, espejos de discos, o configuraciones RAID-Z.
Los VDEVs se agrupan en pools de almacenamiento (Zpools), que son los contenedores de
almacenamiento básicos en ZFS.
● ZFS File System: Dentro de un Zpool, se pueden crear múltiples sistemas de archivos ZFS. Cada
sistema de archivos puede tener sus propias configuraciones, como cuotas y propiedades de
compresión.
Características Principales de ZFS
5. Snapshots y Clones
Un snapshot es una copia de solo lectura de un sistema de archivos ZFS o un volumen en un momento
específico. Los snapshots utilizan almacenamiento eficiente, ya que solo almacenan los cambios
incrementales realizados desde el último snapshot.
Un clone es una copia de lectura/escritura de un snapshot. Los clones también son eficientes en el uso
del almacenamiento y pueden ser utilizados para pruebas o desarrollo sin afectar los datos originales.
6. Protección y Seguridad
ZFS integra controles de acceso basados en roles (RBAC) y permite establecer permisos detallados
para usuarios y grupos.
Soporta encriptación de datos nativa, lo que asegura que los datos sean almacenados de forma segura
y solo accesibles por usuarios autorizados
Características Principales de ZFS
7. RAID Nativo
● RAID-Z: ZFS soporta varias configuraciones RAID-Z: RAID-Z1 (paridad simple), RAID-Z2 (paridad
doble) y RAID-Z3 (paridad triple). RAID-Z es similar a RAID-5 y RAID-6, pero con mejoras para
evitar el problema del "escritura de hueco" (write hole).
● Mirrors: ZFS también soporta configuraciones de espejo (mirror), donde los datos se duplican en
dos o más discos para proporcionar redundancia y alta disponibilidad.
8. Compresión y Desduplicación
● Desduplicación: ZFS puede eliminar datos duplicados en el nivel de bloque, lo que ahorra espacio
de almacenamiento. La desduplicación puede ser muy eficiente, pero también puede consumir una
cantidad significativa de memoria y CPU.
COMANDOS
Crear un Zpool zpool create mypool /dev/sda /dev/sdb
Las instantáneas de ZFS son de solo lectura y no se montan directamente. Sin embargo, se puede acceder
a ellas a través del sistema de archivos ZFS. Las instantáneas se encuentran en el directorio .zfs/snapshot
dentro del dataset.
Algunos protocolos:
‣ UDP (User Datagram Protocol): Permite el envío de paquetes sin establecer antes una
conexión. No proporciona ninguna de las garantías de funcionamiento de TCP. Al ser
más ligero, aumenta su velocidad.
‣ Clase A: [Link] (esta no se usa) - [Link] (sus primeros 3 bit son 000)
Características de IPv6
‣ Utiliza 128 bits: Admite 340 sextillones de IP's distintas. 670 mil billones por cada
milímetro cuadrado del planeta tierra. 😅
‣ Notación Hexadecimal: Está representado por ocho grupos de cuatro dígitos en
Hexadecimal (representan valores del 0 al 15, siendo el 10 la letra A y el 15 la F)
✓ Los grupos se separan por el signo de dos puntos (:)
✓ Si hay varios ceros seguidos se pueden quitar (pero solo una vez) :0000:0000: = ::
netstat ss, ip route (for netstat -r), ip -s link (for netstat -i), ip maddr (for netstat -g)
Iproute2 (ip)
‣ Des/activar interfaz: ip link set enp0s3 up/down
‣ Des/activar arp: ip link set dev enp0s3 arp on/off
‣ Ver Direcciones IP: ip addr show / ip -c a
‣ Añadir dirección IP: ip addr add [Link]/24 dev enp0s3
‣ Borrar dirección IP: ip addr del [Link]/24 dev enp0s3
‣ Ver tabla enrutamiento: ip route show
‣ Añadir ruta: ip route add [Link]/24 via [Link] dev enp0s3
‣ Borrar ruta: ip route del [Link]/24
‣ Puerta de enlace: ip route add default via [Link]
Redes inalámbricas
Una interfaz de red inalámbrica es un dispositivo que permite a un equipo conectarse a una red
sin cables físicos, utilizando ondas de radio para transmitir y recibir datos.
Modos de Operación de las Interfaces Inalámbricas
● Managed Mode: La interfaz actúa como un cliente que se conecta a un punto de acceso
(Access Point, AP).
● Monitor Mode: Permite capturar todos los paquetes que se transmiten a través de la red,
útil para análisis y seguridad.
● Ad-Hoc Mode: Permite que la interfaz se conecte directamente con otras interfaces en
un modo de red sin infraestructura.
● AP Mode: La interfaz actúa como un punto de acceso.
Iw - Configuración WiFi
iw es la herramienta de línea de comandos para configurar y obtener información de las interfaces inalámbricas. Es una
evolución de iwconfig, ofreciendo más funcionalidades y siendo compatible con las tecnologías más recientes.
Comandos Básicos
● Mostrar interfaces inalámbricas: iw dev
● Muestra las redes inalámbricas disponibles: iw dev wlan0 scan
● Des/Conectar a un punto de acceso: iw dev wlan0 dis/connect SSID
● Cambiar el modo de operación: iw dev wlan0 set type managed
wpa_supplicant es una herramienta que gestiona la autenticación en redes inalámbricas que utilizan WPA/WPA2 (Wi-Fi
Protected Access). Es crucial para conectarse a redes seguras.
Configuración Básica
● Crear un archivo de configuración. Esto genera un archivo de configuración cifrado con la contraseña de la red.
wpa_passphrase "SSID" "password" > /etc/wpa_supplicant/wpa_supplicant.conf
● Iniciar wpa_supplicant.Conecta la interfaz wlan0 utilizando el archivo de configuración proporcionado.
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
● Obtener una dirección IP
dhclient wlan0
Iwd - Configuración WiFi
iwd (iNet wireless daemon) es un demonio que gestiona las conexiones inalámbricas, diseñado para ser una alternativa
ligera a wpa_supplicant. iwctl es la herramienta de línea de comandos para interactuar con iwd.
Comandos Básicos con iwctl
● Listar dispositivos inalámbricos:iwctl device list
● Listar redes disponibles:iwctl station wlan0 get-networks
● Conectar a una red:iwctl station wlan0 connect SSID
● Configurar y verificar la conexión:iwctl station wlan0 show
VLAN, Bridges
& Bonds
203.1 > Runtime Networking Configuration
VLAN
Una VLAN (Red de Área Local Virtual) es una tecnología que permite crear redes lógicas
separadas dentro de una misma red física. Esto se logra etiquetando el tráfico de red con un
identificador de VLAN (VLAN ID). Las VLANs son útiles para segmentar el tráfico, mejorar la
seguridad y optimizar el rendimiento de la red.
En una VLAN, cada paquete de red lleva una etiqueta que indica a qué VLAN pertenece. Los
switches y routers utilizan esta etiqueta para dirigir el tráfico sólo a los dispositivos que
pertenecen a esa VLAN, aislando el tráfico de otras VLANs en la misma red física.
Bridges
Un bridge (puente) es una interfaz virtual que permite unir múltiples interfaces de red,
haciendo que funcionen como si fueran parte de una misma red física. Los bridges son
comúnmente utilizados en entornos de virtualización para permitir que las máquinas virtuales
se comuniquen entre sí y con la red física.
Un bridge actúa como un switch virtual que puede conectar varias interfaces de red (físicas y
virtuales). Los paquetes recibidos en una interfaz del bridge pueden ser reenviados a cualquier
otra interfaz dentro del mismo bridge, dependiendo de la dirección MAC de destino.
¿Bridge o router?
Un bridge opera en el nivel 2 (Capa de Enlace de Datos) del modelo OSI. Esto significa que un
bridge trabaja directamente con direcciones MAC para decidir a dónde enviar el tráfico.
Bonds
Un bond (también conocido como NIC teaming o agregación de enlaces) es una técnica que
combina múltiples interfaces de red físicas en una sola interfaz lógica. Esto se utiliza para
aumentar el ancho de banda disponible o para proporcionar redundancia en caso de fallos de
una de las interfaces físicas.
Los bonds pueden operar en varios modos, dependiendo de cómo quieras que se distribuya el
tráfico: backup, Round Robin, etc…
NetworkManager
203.2 > Persistent Network Configuration
Arquitectura de NetworkManager
NetworkManager es una herramienta de sistema para administrar las conexiones de red y los
dispositivos en sistemas operativos Linux. Está diseñada para simplificar la configuración de las
redes y proporcionar una gestión dinámica y automatizada de las interfaces de red, tanto
cableadas como inalámbricas
La arquitectura de NetworkManager está compuesta por varios componentes que trabajan en
conjunto para gestionar eficazmente las conexiones de red.
[ipv4]
method=manual
addresses=[Link]/24
gateway=[Link]
dns=[Link];[Link];
[ipv6]
method=auto
Archivos
Archivo principal de configuración:
/etc/NetworkManager/[Link]
[logging]
level=INFO
[keyfile]
unmanaged-devices=interface-name:eth1
systemd-networkd
systemd-resolved
203.2 > Persistent Network Configuratio
Systemd-networkd
Está diseñado para administrar configuraciones de red, ofreciendo una alternativa ligera y
eficiente a otras herramientas como NetworkManager, especialmente en entornos de servidor o
sistemas embebidos.
Componentes principales
● [Link]: El servicio de systemd que se ejecuta en segundo plano y
gestiona la configuración de las interfaces de red.
● [Link]: Opcional, asegura que las interfaces de red
estén completamente configuradas antes de que se inicien otros servicios que dependan
de la red.
● networkctl: Una herramienta de línea de comandos que se usa para interactuar con
systemd-networkd, permitiendo ver el estado de las interfaces, reiniciar configuraciones,
y más.
● Archivos de configuración: Los archivos de configuración de systemd-networkd se
encuentran principalmente en el directorio /etc/systemd/network/ y utilizan un formato
de archivo .network o .netdev.
Unidad de servicio systemd-networkd
Esta unidad de servicio es el corazón de systemd-networkd.
Lee los archivos de configuración en /etc/systemd/network/ y aplica las configuraciones a las
interfaces de red, como direcciones IP, rutas y DNS.
Puedes gestionar este servicio con los comandos típicos de systemd:
systemctl start systemd-networkd
systemctl enable systemd-networkd
systemctl restart systemd-networkd
[Match]
Name=eth0
[Network]
Address=[Link]/24
Gateway=[Link]
DNS=[Link]
[Network]
DHCP=yes
Configuración de systemd-networkd
Ejemplo de archivo .network para IPv6 con SLAAC (Stateless Address Autoconfiguration)
Para configurar una interfaz con IPv6 y SLAAC, el archivo se vería algo como esto:
[Match]
Name=eth0
[Network]
IPv6AcceptRA=yes
Comandos útiles
● Ver el estado: networkctl status
● Ver el estado de las conexiones: networkctl list
● Recarga los ficheros .network: networkctl reload
● Des/Activa los interfaces: networkctl down/up
systemd-resolved
systemd-resolved es otro servicio en el ecosistema systemd que se encarga de la resolución
de nombres DNS.
Características:
● Soporte para DNS sobre TLS (DoT): Esto permite realizar consultas DNS de manera
segura y cifrada.
● Resolución de nombres multi-capa: systemd-resolved permite resolver nombres de host
desde múltiples fuentes (por ejemplo, DNS local, caché de DNS, etc.).
● Gestión de caché DNS: Almacena consultas DNS para acelerar las resoluciones
posteriores.
● systemd-resolved reemplaza el antiguo uso de /etc/[Link], gestionando
dinámicamente las configuraciones de DNS.
Configuración systemd-resolved
Puedes gestionar el servicio con los comandos de systemd:
systemctl enable systemd-resolved
systemctl start systemd-resolved
Comandos útiles
● Ver el estado del resolvedor: resolvectl status
● Realizar una consulta DNS manual: resolvectl query [Link]
Ventajas de systemd-networkd y systemd-resolved
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- [Link]/24
gateway4: [Link]
nameservers:
addresses:
- [Link]
- [Link]
Configuración de Netplan
Configuración de una dirección IP dinámica con NetworkManager
network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
dhcp4: yes
Es muy común que los DNS estén configurados en /etc/[Link], pero este fichero se puede
gestionar de forma estática o dinámica mediante el paquete resolvconf
tracepath / tracepath6
traceroute / traceroute6
Parecido a trachepath pero con más opciones. Puede requerir permisos de root
ping / ping6
Envía un paquete ICMP para comprobar que el destino responde. En Linux no termina
hasta que pulsemos CONTROL+C. A no ser que se use la opción -c que indica el
número de paquetes a enviar.
RESOLUCIÓN DE PROBLEMAS BÁSICOS DE RED [Link]
netcat (nc)
Abre un puerto en un host (que hará de servidor) y recoge todo lo que le envía un
cliente. En general reenvía la salida estándar al servidor.
Algunas opciones:
‣ -l: abre el puerto para escucha (Listen): Acepta una única conexión de un cliente y se cierra.
‣ -p: Indica el puerto
‣ -k: El puerto permanece abierto después de haber recibido una conexión. Se usa con el
parámetro -l y permite infinitas conexiones.
‣ -u: El puerto abierto se abre como UDP, en vez de TCP que es la opción por defecto.
‣ -e: indica la ruta de un fichero que se ejecutará al establecer la conexión
‣ -v: Muestra información de la conexión.
‣ -z: Se usa para escanear puertos: nc -z -v destino 10-500
RESOLUCIÓN DE PROBLEMAS BÁSICOS DE RED [Link]
Socket Statistics (ss)
Obtiene información sobre los sockets (internos y de red). Sin parámetros lista todas las
conexiones actuales. Sintaxis
ss [options] [FILTER]
Opciones
‣ -t Sólo conexiones TCP, -u las UDP
‣ -l Socket a la escucha
‣ -p Muestra el nombre y PID del proceso asociado a cada conexión
‣ -s Estadísticas resumidas
‣ -n No resolver los nombres, mostrar las IP's
RESOLUCIÓN DE PROBLEMAS BÁSICOS DE RED [Link]
Filtros
FILTRO := [state ESTADO-TCP] [exclude ESTADO-TCP] [EXPRESIÓN]
Con state los sockets deben estar en: ESTABLISHED, LISTENING, CLOSED, CONNECTED,
TIME-WAIT, etc..
./configure
● Arquitectura
Makefile
Código Fuente ● Compilador
● Librerías make
make install
Configure
Los scripts configure se usan para verificar el entorno de compilación y ajustar el proceso en función del sistema en el
que se ejecuta el programa.
Crea un archivo Makefile adaptado al sistema y a las opciones especificadas por el usuario
El uso más básico de un script configure es simplemente ejecutarlo sin parámetros adicionales:
./configure
Algunos de los parámetros más utilizados permiten personalizar dónde se instalarán los archivos, habilitar o deshabilitar
características específicas del programa, o definir comportamientos especiales del proceso de compilación.
Para ver todas las opciones que acepta un script configure: ./configure --help
Make
make es una herramienta de automatización que facilita la compilación de programas. Lo hace utilizando instrucciones
definidas en un archivo llamado Makefile. Revisa qué archivos han cambiado y solo recompila los necesarios
El Makefile define cómo deben compilarse los diferentes archivos de código fuente y en qué orden. Un Makefile típico
está compuesto de reglas, que tienen la siguiente estructura:
objetivo: dependencias
comandos
● Objetivo: Es el archivo que queremos generar, como el archivo ejecutable o un archivo intermedio.
● Dependencias: Son los archivos o recursos que el objetivo necesita para ser generado. Si alguno de estos
cambia, el objetivo debe ser reconstruido.
● Comandos: Son los comandos de shell que se ejecutan para construir el objetivo. Cada línea de comandos debe
estar precedida por un tabulador.
Ejemplo:
archivo1.o: archivo1.c
gcc -c archivo1.c
Make install
make install es el paso final en el proceso de compilación e instalación de software a partir del código fuente. Se
encarga de copiar los archivos compilados a los directorios apropiados del sistema, de manera que puedan ser usados
por todos los usuarios.
Después de haber ejecutado ./configure y make, simplemente puedes ejecutar el siguiente comando para instalar el
software:
make install
Otros datos
Directorios para almacenar ficheros de código fuente:
● /usr/src/
○ Tradicionalmente, aquí se encuentran las fuentes del kernel de Linux y otros paquetes que requieren ser
compilados
● /usr/local/src/
○ Se utiliza cuando un administrador de sistemas descarga y compila programas manualmente, en lugar de
utilizar un gestor de paquetes
Patch es una utilidad que se utiliza para aplicar cambios a los archivos de código fuente de un programa. Los archivos
de parches (normalmente con la extensión .patch o .diff) contienen las diferencias entre dos versiones de un archivo, y
el comando patch aplica esos cambios al archivo original.
Sintaxis básica:
patch archivo_original < archivo_de_parche.patch
Para crear el archivo .patch, se usa la herramienta diff para generar las diferencias. El comando sería algo así:
diff -u programa.c programa_nuevo.c > cambio_programa.patch
Backup
Operations
204 > System Maintenance
Qué copiar
/proc, /sys, /dev: Son sistemas de archivos virtuales o dinámicos que no necesitan respaldo.
Consistencia
La consistencia de los respaldos se refiere a que los archivos y los datos dentro del respaldo
reflejen un estado "válido" del sistema o de la aplicación en un momento determinado, sin estar
incompletos o corrompidos por cambios en el sistema mientras se realiza el respaldo.
Pérdida de datos:
corrompidos, Fallos del hardware
eliminados..
Desventajas:
● Costo por GB (especialmente en SSDs): Aunque los HDDs tienen un costo más bajo que los SSDs el
almacenamiento en discos puede ser costoso cuando se maneja una gran cantidad de datos.
● Fiabilidad limitada: Los discos duros son más propensos a fallos mecánicos con el tiempo, y aunque los
SSDs no tienen partes móviles, también pueden fallar con el uso prolongado debido al desgaste de las
celdas de memoria.
● Durabilidad a largo plazo: Los discos no son tan duraderos para almacenamiento a largo plazo en
comparación con las cintas, y necesitan mantenerse en condiciones adecuadas (sin golpes, vibraciones,
etc.).
Servidores de almacenamiento
Medios de respaldo
Cintas (Tapes)
Beneficios:
● Costo por GB: Las cintas ofrecen un costo por gigabyte muy bajo, lo que las hace atractivas para
almacenar grandes cantidades de datos.
● Durabilidad: Las cintas pueden durar muchos años (10-30 años en condiciones adecuadas), lo
que las convierte en una opción adecuada para el archivo de largo plazo.
● Escalabilidad: Las bibliotecas de cintas permiten almacenar grandes volúmenes de datos en un
formato compacto.
Desventajas:
● Lentitud: Las cintas tienen tiempos de acceso secuenciales, lo que significa que encontrar un
archivo específico puede ser lento. Comparado con los discos duros o la nube, la restauración de
datos es mucho más lenta.
● Mantenimiento y gestión: Requieren hardware especializado (unidades de cinta y sistemas de
gestión de cintas), lo que puede aumentar los costos operativos y la complejidad.
● Disponibilidad: Aunque son duraderas, el acceso a los datos almacenados en cintas puede no
ser inmediato, especialmente si las cintas están almacenadas fuera del sitio.
Cintas
[Link]
Cintas
Servidores de almacenamiento
HDD
Precios a
Octubre del
2024
Medios de respaldo
Almacenamiento en la nube (Cloud Storage)
Beneficios
● Escalabilidad: Puedes aumentar o reducir la capacidad de almacenamiento sin necesidad de
adquirir nuevo hardware.
● Acceso remoto: Los datos pueden ser accesibles desde cualquier lugar con Internet, lo que es
ideal para respaldos distribuidos.
● Redundancia: Los proveedores suelen ofrecer almacenamiento distribuido y replicado. Los
datos están protegidos en múltiples ubicaciones, mejorando la fiabilidad y disponibilidad.
● Costos iniciales bajos: No necesitas invertir en hardware físico, lo que reduce los costos
iniciales de infraestructura.
Desventajas
● Costo a largo plazo: Los costos pueden escalar rápidamente. Además, hay costos por
transferencias de datos y operaciones de restauración.
● Dependencia de Internet: El acceso a tus respaldos depende de la conectividad a Internet.
● Seguridad: Existe un riesgo asociado con almacenar datos críticos en servidores de terceros. La
encriptación de datos es una práctica estándar para mitigar este riesgo.
● Velocidad: La transferencia de datos desde internet es menor que localmente.
Medios de respaldo
Característica Cintas Discos (HDD/SSD) Almacenamiento en la nube
Costo por GB Bajo Medio (SSD más alto) Variable (depende del uso)
Durabilidad a largo plazo Alta (hasta 30 años) Media (riesgo de fallos Alta (redundancia en la nube)
mecánicos)
Facilidad de restauración Baja (dependiente de hardware) Alta (acceso inmediato) Alta (pero dependiente de
internet)
Restaurar un respaldo:
dd if=/backup/sda1_backup.img of=/dev/sda1 bs=4M
El comando rsync
rsync es una herramienta muy poderosa para sincronizar archivos y directorios de manera
eficiente. Es especialmente útil para realizar copias de seguridad incrementales, ya que solo
copia los archivos que han cambiado o son nuevos.
Sintaxis básica de rsync:
rsync [opciones] origen destino
Este comando realiza una copia de seguridad de /home a un servidor remoto usando SSH. Esto
es útil cuando necesitas realizar respaldos a otro servidor de forma segura.
La opción --delete asegura que los archivos eliminados en /home también se eliminen en el
directorio de respaldo /backup/home/, manteniendo la sincronización actualizada
EL COMANDO TAR
• El comando tar sirve para compactar varios ficheros y directorios
en un sólo archivo.
• Mediante opciones podemos comprimir el fichero resultando
utilizando distintos métodos de compresión
• Sintaxis: tar [opciones] [Link] datos
Este comando genera un archivo .sha256 que contiene el checksum del archivo
home_backup.[Link]. Este checksum puede ser usado posteriormente para verificar la
integridad del respaldo.
Ejemplo de verificación:
sha256sum -c /backup/home_backup.sha256
Verificación con rsync
rsync es una herramienta excelente para sincronización de archivos, pero también puede ser
utilizada para verificar la integridad de los archivos comparando su contenido entre la copia de
respaldo y el original.
Comparación de archivos con rsync:
Puedes utilizar la opción --checksum de rsync para verificar que los archivos en el respaldo
coincidan con los originales, calculando y comparando checksums de los archivos en ambas
ubicaciones.
Ejemplo:
rsync -av --checksum /home/ /backup/home/
Verificación con tar
Cuando utilizas tar para crear respaldos, también puedes verificar la integridad de los archivos
comprimidos utilizando su capacidad de comprobación interna.
Verificación interna de archivos tar:
Si has creado un archivo tar comprimido, puedes verificar su integridad usando la opción
--compare o -d para comparar el contenido del archivo comprimido con los archivos
originales.
Ejemplo:
tar --compare -f /backup/home_backup.[Link]
Verificación con dd
Si estás respaldando discos completos o particiones usando dd, puedes hacer una verificación
comparando los datos de bloque bit a bit entre el respaldo y la partición original. Aunque es un
proceso lento, es muy efectivo para garantizar la exactitud de las copias a nivel de bloque.
Comparación bit a bit con cmp:
Después de crear el respaldo, puedes utilizar la herramienta cmp para comparar el archivo de
respaldo con el disco original:
cmp /dev/sda1 /backup/sda1_backup.img
Este comando compara los datos de la partición original /dev/sda1 con la imagen
/backup/sda1_backup.img y detecta cualquier diferencia entre ellos. Si no hay diferencias, el
comando no devolverá ningún mensaje, lo que indica que los datos son idénticos.
Otras herramientas
204 > System Maintenance
Otras Herramientas
BorgBackup, restic, y rclone: Herramientas de respaldo individuales
Estas herramientas están diseñadas principalmente para respaldos a nivel de archivo y están
enfocadas en la simplicidad, flexibilidad, y la facilidad de uso. Suelen ser más fáciles de
implementar en entornos más pequeños o en sistemas individuales, aunque también pueden
escalar a entornos más grandes.
BorgBackup y restic:
● Están diseñadas para realizar respaldos locales y remotos con características avanzadas
como deduplicación y cifrado.
● No requieren una arquitectura cliente-servidor complicada, por lo que son adecuadas
tanto para respaldos personales como para algunos casos de uso empresarial.
● Son perfectas para realizar respaldos de un solo sistema o pocos sistemas, sin necesidad
de infraestructura compleja.
Otras Herramientas
rclone:
Enfocado en la sincronización y transferencia de archivos entre almacenamiento local y en la
nube. No es una herramienta de respaldo tradicional, pero se puede usar para enviar respaldos
a servicios de almacenamiento en la nube.
Es muy útil en entornos donde el respaldo remoto (especialmente en la nube) es una prioridad.
Otras Herramientas
Bacula, Bareos, y BackupPC: Soluciones empresariales de respaldo centralizado
Estas herramientas tienen una arquitectura más compleja y están diseñadas para gestionar
respaldos en múltiples sistemas o servidores en entornos más grandes y complejos. Están
orientadas hacia la gestión centralizada de respaldos en infraestructuras de TI empresariales.
Bacula y Bareos:
● Siguen una arquitectura cliente-servidor. Tienes un servidor central que coordina y
gestiona los respaldos de múltiples clientes (servidores o estaciones de trabajo) en la red.
● Soportan medios de almacenamiento variados (cintas, discos, almacenamiento en red),
además de características avanzadas como automatización, gestión de volúmenes y
restauraciones centralizadas.
● Son herramientas de gran escala, más adecuadas para entornos empresariales grandes
que requieren la gestión de múltiples nodos y recursos de respaldo distribuidos.
Otras Herramientas
BackupPC:
● Aunque no tiene un enfoque cliente-servidor estricto, puede realizar respaldos de
múltiples máquinas usando protocolos como rsync, smb o tar sin necesidad de instalar un
cliente específico.
● Está diseñado para ser una solución de respaldo eficiente en la red, adecuada para
respaldar PCs y servidores sin requerir la instalación de agentes en los clientes.
Gestión de Recursos
204 > System Maintenance
Medición del Uso de CPU
La CPU es uno de los recursos más demandados en un sistema y su uso intensivo puede
afectar el rendimiento general. Hay varias herramientas útiles para medir y monitorear el
consumo de CPU:
● top/htop: Muestra información de uso de CPU, memoria, carga promedio y una lista de
procesos activos ordenados por uso de CPU.
● vmstat:proporciona una visión general de los recursos del sistema, incluyendo CPU,
memoria, y E/S. Muestra estadísticas de procesos en espera y en ejecución, actividad de
interrupciones, y tiempo de CPU utilizado por el sistema y el usuario.
● Iostat (paquete sysstat): es una herramienta que permite analizar el rendimiento del CPU
y los dispositivos de E/S. Aunque se usa frecuentemente para monitorear discos, también
proporciona información de uso de CPU.
● mpstat (paquete sysstat): permite monitorizar el uso de CPU en sistemas con múltiples
núcleos. Puedes ver el uso por cada núcleo individualmente, útil para identificar
desequilibrios en la carga de trabajo de la CPU.
Medición del Uso de Memoria
La memoria es un recurso que puede agotarse rápidamente, especialmente en sistemas con
aplicaciones intensivas en RAM. El uso de intercambio (swap) también es un buen indicador de
la salud de la memoria.
● free: muestra la cantidad total de memoria libre y usada, incluyendo intercambio (swap).
● smem: proporciona un análisis detallado del uso de memoria, incluyendo memoria
compartida entre procesos y consumo de memoria física y virtual.
● pmap: muestra un desglose del uso de memoria de un proceso específico.
pmap <PID> es útil para analizar en detalle el uso de memoria de un proceso en particular.
● vmstat, top/htop
Medición del Uso de Disco
El almacenamiento es uno de los recursos más críticos, y el uso intensivo de disco puede ser
una de las causas de los cuellos de botella en el sistema.
● iostat: es excelente para medir el rendimiento de los discos. Muestra la tasa de lectura y
escritura y el tiempo de espera (await) de cada dispositivo de disco.
● df: proporciona información sobre el uso del espacio en disco.
● du: permite ver el espacio utilizado por directorios y archivos. Es útil para localizar los
archivos y carpetas que más espacio consumen. ncdu lo hace de forma visual.
● iotop: monitorea el uso de I/O en tiempo real, mostrando los procesos que están
accediendo al disco y la cantidad de I/O que generan.
● lsof: lista los archivos abiertos en el sistema y los procesos asociados, permitiendo un
análisis detallado de la actividad de archivos y puertos.
Medición del Uso de E/S (I/O)
El rendimiento de I/O (entrada/salida) impacta directamente en la rapidez con la que los datos
se leen y escriben en el disco o se transmiten a través de la red.
● dstat: muestra métricas de CPU, disco, red y memoria en una sola línea, siendo útil para
analizar I/O de disco y red en paralelo.
● blktrace: es una herramienta avanzada para trazar operaciones de E/S a nivel de bloque
en el sistema. btt (Block Tracing Toolkit): ayuda a procesar los datos generados por
blktrace y analizar detalladamente el rendimiento de dispositivos de almacenamiento.
● ifstat: es una herramienta para monitorear la actividad de las interfaces de red,
mostrando el tráfico entrante y saliente por cada interfaz en tiempo real.
● iftop: es una herramienta de monitoreo de ancho de banda que muestra en tiempo real el
tráfico de red por conexión IP, lo que facilita la identificación de las conexiones que
consumen más ancho de banda.
● iptraf-ng: es una herramienta interactiva en línea de comandos para monitorear tráfico
de red. Ofrece detalles en tiempo real sobre paquetes entrantes y salientes, tráfico IP,
conexiones TCP, estadísticas de red por protocolo y actividad de puertos.
Problemas de rendimiento
Síntoma: Alta Carga del Sistema
Muestra un valor elevado en la métrica de "load average" (carga promedio), que representa la
cantidad de procesos en espera para ser ejecutados
● Causas:
○ Uso elevado de CPU
○ Interrupciones de hardware
○ Alta demanda de I/O
● Herramientas de diagnóstico:
○ uptime y top: uptime muestra la carga promedio en los últimos 1, 5 y 15 minutos. top
permite observar los procesos activos y ver cuáles están utilizando más CPU.
○ iostat: si muestra tiempos de espera altos (await), puede indicar que la carga de CPU
se debe a procesos esperando operaciones de disco.
○ ps y pstree: Permiten analizar procesos en ejecución. pstree puede ser útil para
identificar procesos secundarios generados por un proceso principal intensivo en CPU.
Problemas de rendimiento
Síntoma: Uso Elevado de Memoria y Consumo de Swap
Cuando el sistema se queda sin RAM, comienza a utilizar swap (espacio de intercambio en disco),
lo que puede ralentizar el sistema significativamente debido a que el acceso a disco es mucho
más lento que el acceso a RAM
● Causas
○ Procesos que consumen mucha memoria
○ Fuga de memoria: uno o varios procesos acumulan memoria sin liberarla.
○ Cache de disco excesivo: El sistema Linux utiliza RAM como caché de disco para
mejorar el rendimiento, pero esto puede convertirse en un problema si la memoria es
escasa y el sistema sigue incrementando el caché.
● Herramientas de diagnóstico:
○ free: Observa la cantidad de memoria libre y si el swap está en uso.
○ vmstat: las columnas si (swap in) y so (swap out) indican actividad de intercambio, y
valores elevados son una señal de problemas de memoria.
○ smem y pmap: smem ofrece un desglose detallado y pmap <PID> ayuda a ver el mapa
de memoria de un proceso específico.
○ top: observa la columna RES, que indica la cantidad de RAM en uso por cada proceso.
Problemas de rendimiento
Síntoma: Latencia Alta en Operaciones de Disco (I/O)
Una latencia elevada en las operaciones de disco causa lentitud en aplicaciones que requieren
acceso constante al disco, como bases de datos o servicios de archivos
● Causas
○ Procesos con alta demanda de I/O: Copias de seguridad, bases de datos o cualquier
proceso que realice numerosas lecturas/escrituras.
○ Hardware de disco lento: Discos mecánicos lentos o configuraciones de
almacenamiento compartido pueden incrementar la latencia.
○ Sobrecarga de E/S: Puede deberse a una carga elevada de I/O en disco
● Herramientas de diagnóstico
○ iotop: Muestra en tiempo real qué procesos están usando I/O de disco.
○ iostat: Permite ver el rendimiento de cada dispositivo de disco. La métrica await indica
el tiempo de espera promedio por operación de I/O.
○ blktrace y btt: Herramientas avanzadas para trazar y analizar operaciones de I/O,
útiles cuando se necesita un diagnóstico detallado del rendimiento de disco.
Problemas de rendimiento
Síntoma: Problemas de Red o Latencia de Red Elevada
Problemas de red pueden manifestarse como latencias altas, pérdida de paquetes, conexiones
inestables o lentitud en la transmisión de datos.
● Causas
○ Saturación de ancho de banda: Sobrecarga debido a un alto volumen de tráfico.
○ Configuración incorrecta de red: Problemas con la configuración de interfaces de red,
tablas de enrutamiento, o firewalls.
○ Problemas en el hardware de red: Deficiencias o fallas en los adaptadores de red,
switches o routers.
● Herramientas de diagnóstico
○ ss: Es útil para ver cuántas conexiones tiene cada servicio y detectar problemas.
○ iftop: Permite identificar procesos que están generando tráfico elevado.
○ iptraf-ng: Monitoriza el tráfico de red y ver detalles como puertos y protocolos.
○ ping y traceroute: ping ayuda a verificar la conectividad y la latencia hacia un host
específico. Traceroute permite detectar problemas en el enrutamiento de paquetes.
Problemas de rendimiento
Síntoma: Sistema Congelado o Bajo Rendimiento en General
Los usuarios experimentan retrasos significativos al intentar realizar cualquier acción, y el sistema
no responde adecuadamente a los comandos.
● Causas
○ Cuellos de botella en múltiples recursos: Puede deberse a una combinación de alta
carga de CPU, uso intensivo de memoria y consumo elevado de I/O.
○ Problemas de hardware: Fallos en CPU, memoria o discos.
○ Procesos de muy alta prioridad: Procesos configurados con una prioridad alta que
monopolizan la CPU y otros recursos.
● Herramientas de diagnóstico
○ uptime: un valor de carga promedio consistentemente alto podría indicar una
sobrecarga de recursos.
○ top y htop: revisar el consumo de CPU, memoria y E/S de los procesos para identificar
posibles culpables.
○ sar: útil para detectar aumentos repentinos en el uso de recursos.
○ dmesg: Muestra mensajes del sistema y del kernel, donde pueden aparecer errores de
hardware o advertencias que indiquen problemas.
Gestionar el consumo de recursos con systemd
Systemd proporciona una estructura jerárquica para la asignación de recursos a través de slices,
scopes y services, y permite utilizar Cgroups (grupos de control) para limitar y priorizar el uso de
CPU, memoria y E/S de disco.
● Slices: Son contenedores jerárquicos que agrupan y organizan recursos para servicios y
procesos. Al definir slices, puedes asignar una cantidad de recursos específica a un
conjunto de servicios o procesos, asegurando que no consuman más de lo asignado.
systemd crea slices predefinidas como [Link] (para procesos de usuario) y [Link]
(para servicios de sistema).
● Scopes: Son grupos de procesos temporales creados de forma dinámica, útiles para tareas
no gestionadas directamente por systemd, como procesos iniciados por usuarios. A través
de los scopes, systemd aplica restricciones de recursos, aunque no tienen la persistencia de
los servicios.
● Services: A través de los archivos de configuración de cada servicio, puedes definir límites
específicos de CPU, memoria y E/S.
Cada una de estas unidades utiliza los Cgroups (grupos de control) para restringir los recursos
que los procesos pueden consumir.
Parámetros de Configuración de CPU
Systemd ofrece varias propiedades de configuración para gestionar el uso de CPU en cada slice,
scope o servicio.
● CPUWeight: Define el peso relativo del uso de CPU para un servicio o slice en comparación
con otros. Un valor más alto otorga mayor prioridad. Su rango es de 1 a 10000.
● CPUQuota: Establece un límite en el porcentaje de tiempo de CPU que un servicio o slice
puede consumir en un período dado. Esto se especifica como porcentaje (por ejemplo, 50%
significa que el servicio puede usar la mitad del tiempo de CPU disponible).
● CPUQuotaPeriodSec: Define el período de tiempo durante el cual se evalúa CPUQuota. El
valor predeterminado suele ser 100ms, pero puede ajustarse según la carga del sistema.
● AllowedCPUs: Restringe el uso de CPU de un servicio a núcleos específicos. Esto es útil en
sistemas con múltiples núcleos donde algunos servicios necesitan estar aislados en un
conjunto de núcleos.
Control de Memoria
● MemoryMin: Establece una cantidad mínima de memoria que se garantiza para un servicio
o slice. Si otros servicios intentan usar la memoria, se preservará esta cantidad mínima para
el servicio configurado.
● MemoryLow: Define un límite suave para la memoria, permitiendo que el servicio consuma
más en caso de que haya memoria disponible. Sin embargo, en situaciones de presión de
memoria, otros servicios pueden usar la memoria hasta el límite de MemoryMin.
● MemoryHigh: Limita el consumo de memoria bajo condiciones normales, pero permite
temporalmente un uso superior. Si el consumo de memoria persiste por encima de
MemoryHigh, el sistema intentará liberar memoria.
● MemoryMax: Establece un límite máximo absoluto en la memoria que un servicio puede
consumir. Si el servicio intenta exceder este límite, el sistema matará el proceso o limitará su
uso de memoria.
Control de E/S (I/O) en Slices, Scopes y Servicios
● IOWeight: Similar a CPUWeight, define el peso relativo de E/S para un servicio o slice.
Valores más altos otorgan mayor prioridad de E/S en comparación con otros servicios.
● IODeviceWeight: Permite especificar el peso de E/S para un servicio en un dispositivo
específico, útil en sistemas con múltiples discos.
● IOReadBandwidthMax y IOWriteBandwidthMax: Limitan el ancho de banda máximo de
lectura y escritura respectivamente, especificado en bytes por segundo. Útil para garantizar
que un servicio no sobrecargue el almacenamiento con operaciones de I/O.
● IOReadIOPSMax y IOWriteIOPSMax: Establecen el número máximo de operaciones de I/O
por segundo que un servicio puede realizar en un dispositivo específico. Esto permite limitar
el número de operaciones de I/O y no solo el volumen de datos.
● IODeviceLatencyTargetSec: Define un objetivo de latencia para el dispositivo. Si la latencia
de E/S del servicio excede este objetivo, se toman medidas para reducir su impacto.
Control de E/S (I/O) en Slices, Scopes y Servicios
● IOWeight: Similar a CPUWeight, define el peso relativo de E/S para un servicio o slice.
Valores más altos otorgan mayor prioridad de E/S en comparación con otros servicios.
● IODeviceWeight: Permite especificar el peso de E/S para un servicio en un dispositivo
específico, útil en sistemas con múltiples discos.
● IOReadBandwidthMax y IOWriteBandwidthMax: Limitan el ancho de banda máximo de
lectura y escritura respectivamente, especificado en bytes por segundo. Útil para garantizar
que un servicio no sobrecargue el almacenamiento con operaciones de I/O.
● IOReadIOPSMax y IOWriteIOPSMax: Establecen el número máximo de operaciones de I/O
por segundo que un servicio puede realizar en un dispositivo específico. Esto permite limitar
el número de operaciones de I/O y no solo el volumen de datos.
● IODeviceLatencyTargetSec: Define un objetivo de latencia para el dispositivo. Si la latencia
de E/S del servicio excede este objetivo, se toman medidas para reducir su impacto.
Comandos
SSH
Es un protocolo (y programa) que permite acceder a un servidor remoto de una
forma segura cifrando la información que se intercambia con el cliente.
La función más usada es ejecutar comandos mediante terminar en una máquina
remota, pero puede usarse para copiar (scp), ftp (sftp) y para crear "túneles"
seguros usados por multitud de aplicaciones.
Para cifrar la comunicación utiliza claves públicas y privadas.
El programa clientes se configura en el fichero /etc/ssh/ssh_config y el servidor
en /etc/ssh/sshd_config.
Podemos iniciar sesión con el usuario y la contraseña o usando unas claves
instaladas en el cliente y el servidor.
PROTECCIÓN DE DATOS MEDIANTE CIFRADO [Link]
ssh-keygen
Genera un par de claves publica y privada. Por defecto usa RSA. Opciones:
‣ -t: método de cifrado (rsa, dsa, ecdsa, ed25519, ...)
‣ -b: bits usados para el cifrado
ssh-keygen -t ecdsa -b 2084
Tunel SSH
Es una conexión cifrada entre dos puntos que se establece con la intención de que
sea utilizada para trasmitir los datos de otra aplicación o servicio de forma segura.
ssh -N -f -L 8080:destino:80 usuario@origen
‣ -N : no ejecuta un comando
‣ -f : Se procesa en segundo plano
‣ -L : Especifica los puertos en el origen y el destino
SSH [Link]
● Consistencia y Confiabilidad: Todas las máquinas reciben exactamente las mismas configuraciones y
actualizaciones, eliminando inconsistencias. Los errores humanos se reducen gracias a la idempotencia,
garantizando que los estados deseados sean aplicados correctamente.
● Escalabilidad: Facilita la gestión de cientos o miles de servidores simultáneamente. Se puede implementar una
nueva máquina con una configuración idéntica en minutos.
● Trazabilidad y Auditoría: Permite registrar y documentar cada cambio realizado en el sistema. Las herramientas
de automatización suelen incluir funciones para registrar las configuraciones aplicadas.
● Recuperación Rápida: En caso de fallos, los sistemas pueden restaurarse rápidamente aplicando las
configuraciones automatizadas predefinidas.
Casos de Uso Reales
● Despliegue Rápido de Infraestructura: Configuración de clústeres de servidores para aplicaciones web y bases
de datos.
● Preparación de Entornos de Desarrollo: Creación de entornos preconfigurados para desarrolladores con las
herramientas necesarias.
● Migración entre Entornos: Migración de aplicaciones de un entorno local a la nube o entre proveedores de nube.
Principales características de Ansible
● Automatización sin agentes: Ansible utiliza SSH para comunicarse con los nodos remotos. No requiere software
adicional (agentes) en los nodos, lo que simplifica su uso.
● Declarativo, no imperativo: Escribes lo que quieres que se configure en un archivo YAML, y Ansible lo ejecuta.
● Idempotencia: Ansible garantiza que las tareas se ejecuten una sola vez, sin causar cambios adicionales si ya
están en el estado deseado.
● Inventarios: Los sistemas se agrupan en un archivo llamado inventory, donde defines hosts y grupos de hosts
para administrar.
Cómo Ansible Interactúa con Sistemas Remotos
● Conexión basada en SSH: Requiere que el nodo de control tenga acceso SSH a los nodos gestionados. Se
pueden usar claves SSH sin contraseña para facilitar la autenticación.
● Ejecución por módulos: Ansible copia módulos (scripts) al sistema remoto y los ejecuta para realizar las tareas
necesarias.
● Requisitos mínimos en el nodo remoto:
● Inventario Dinámico
○ Genera inventarios en tiempo real usando un script o un plugin.
○ Ideal para entornos en la nube o infraestructuras dinámicas.
Inventario Estático - Formato Básico INI
El archivo de inventario se encuentra típicamente en /etc/ansible/hosts por defecto. Puede ser personalizado según tus
necesidades. Un inventario puede tener nombres de host o sus IP’s.
Tiene la siguiente estructura:
[webservers]
Grupos:
[Link]
[Link] Los hosts se agrupan entre corchetes ([group_name]).
[webservers] agrupa nodos relacionados con servidores web.
[databases]
[Link] Hosts:
[Link]
Pueden ser especificados por nombre de dominio, IP o alias.
[all:vars]
ansible_user=admin
Ejemplo: [Link] o [Link].
ansible_port=22
ansible_ssh_private_key_file=/path/to/private_key Variables de grupo o globales:
[all:vars] define variables comunes para todos los hosts.
Inventario Estático - Formato Básico en YAML
Todos los inventarios en YAML comienzan con el grupo raíz all, que puede contener:
hosts: Una lista de servidores.
children: Subgrupos de hosts.
all:
hosts:
backup1:
ansible_host: [Link]
ansible_user: root
ansible_ssh_pass: mypassword
children:
web_servers:
hosts:
web1:
ansible_host: [Link]
ansible_user: ubuntu
web2:
ansible_host: [Link]
ansible_user: admin
db_servers:
hosts:
db1:
ansible_host: [Link]
ansible_user: root
Playbooks de Ansible
Los playbooks son el núcleo de Ansible, escritos en formato YAML para definir configuraciones, tareas y acciones
que deseas realizar en sistemas remotos.
Un playbook es un archivo YAML que describe las tareas a ejecutar en un conjunto de hosts. Los playbooks son
declarativos: definen el estado deseado en lugar de los pasos exactos para llegar a ese estado.
Notificar un Handler
Una tarea puede notificar a un handler si realiza un cambio:yaml
- name: Modificar configuración de Nginx
copy:
src: /local/path/[Link]
dest: /etc/nginx/[Link]
notify:
- Reiniciar Nginx
Playbooks de Ansible
Condicionales (Conditionals)
Permiten ejecutar tareas sólo si se cumplen ciertas condiciones. Se definen con la clave when.
tasks:
- name: Instalar Apache en Debian
apt:
name: apache2
state: present
when: ansible_os_family == "Debian"
Bucles (Loops)
Los bucles permiten repetir una tarea con diferentes valores. Usar un Loop Simple
tasks:
- name: Crear múltiples usuarios
user:
name: "{{ item }}"
state: present
loop:
- alice
- bob
- charlie
Playbooks de Ansible
Registros (Registers)
Los registros almacenan el resultado de una tarea para usarlo más adelante en el playbook.
Definir un Registro
tasks:
- name: Verificar si un archivo existe
stat:
path: /etc/nginx/[Link]
register: nginx_config
Usar el Registro
Utiliza el registro en una tarea condicional:
- name: Crear archivo de configuración si no existe
copy:
src: /local/path/[Link]
dest: /etc/nginx/[Link]
when: not nginx_config.[Link]
La información que contiene la variable depende del módulo que se ejecute, por ejemplo command, devuelve .stdout
porque el resultado es la salida estándar del comando. Pero stat , genera un conjunto de atributos específicos como
exists, isdir, size, entre otros.
Inventarios dinámicos
El inventario dinámico en Ansible permite gestionar nodos en infraestructuras dinámicas, donde los sistemas cambian
frecuentemente, como en entornos de nube, contenedores o máquinas virtuales. A diferencia de los inventarios
estáticos, que son archivos de texto plano, los inventarios dinámicos se generan automáticamente en tiempo de
ejecución utilizando scripts o plugins.
plugin: [Link]
compose: yes
keyed_groups:
- key: labels
prefix: docker_
plugin: [Link].aws_ec2
regions:
- us-east-1
- us-west-1
keyed_groups:
- key: tags
prefix: aws_
filters:
instance-state-name: running
Es independiente de Ansible y puede ser útil para realizar las tareas necesarias para que Ansible pueda empezar a
funcionar.
Módulos en
Ansible
205> Configuration Management
Módulos en Ansible
Los módulos de Ansible son componentes esenciales que permiten a los usuarios realizar
tareas específicas en los nodos administrados (hosts).
Es especialmente útil para aprender a usar módulos específicos o para explorar las capacidades de
Ansible sin tener que buscar en la documentación en línea.
ansible-doc -l muestra una lista de todos los módulos que puedes usar con Ansible, organizados
por tipo.
ansible-doc -s <nombre_módulo> muestra únicamente en los parámetros que admite ese módulo
Roles en Ansible
205> Configuration Management
¿Qué es un Role en Ansible?
Un rol es una forma estructurada y reutilizable de organizar código en Ansible. Permiten dividir
tareas complejas en componentes más manejables, simplificando la administración de
configuraciones. Los roles agrupan tareas, variables, plantillas, archivos y manejadores en una
estructura de directorios bien definida.
Creación de un rol
Ansible proporciona el comando ansible-galaxy para inicializar roles con la estructura
adecuada:
ansible-galaxy init <nombre_del_rol>
Por ejemplo:
ansible-galaxy init apache
Esto generará la estructura mencionada anteriormente dentro de una carpeta llamada apache.
Usar roles en un playbook
Una vez creado el rol, puedes usarlo en un playbook. Por ejemplo:
---
- name: Configurar servidores web
hosts: web
roles:
- apache
Este playbook aplicará el rol apache en todos los hosts del grupo web.
Ansible-galaxy
Ansible Galaxy es un repositorio en línea donde puedes encontrar roles predefinidos creados
por la comunidad o proveedores oficiales.
● Desencriptar archivos:
ansible-vault decrypt [Link]
Para ejecutar un playbook que utiliza Ansible Vault, debes proporcionar la contraseña:
ansible-playbook [Link] --ask-vault-pass
Plantillas Jinja2
Las plantillas Jinja2 son archivos de texto que incluyen marcadores y expresiones dinámicas. Se
utilizan para generar archivos de configuración, scripts y otros documentos que varían según el
contexto.
Sintaxis de Jinja2
Variables: Se utilizan llaves dobles {{ variable }}.
ServerName {{ server_name }}
Condicionales:
{% if environment == 'production' %}
This is the production environment.
{% else %}
This is not production.
{% endif %}
Bucles:
{% for user in users %}
- {{ [Link] }} ({{ [Link] }})
{% endfor %}
Filtros en Jinja2
Filtros comunes:
● default: Proporciona un valor predeterminado.
{{ var_name | default('default_value') }}