Skip to content

Instantly share code, notes, and snippets.

@gustawho
Last active April 11, 2024 17:46
Show Gist options
  • Star 17 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save gustawho/e501dafa9d261fe9b90f4420b7b323b1 to your computer and use it in GitHub Desktop.
Save gustawho/e501dafa9d261fe9b90f4420b7b323b1 to your computer and use it in GitHub Desktop.
Guía de Instalación de Arch Linux

Guía de Instalación de Arch Linux

El objetivo de este documento es orientar a quien sea que tenga la intención de instalar Arch Linux, por los motivos que sean. Aunque se tienen como prioridad a los nuevos usuarios, se espera que sea de utilidad a cualquiera persona, sin importar su nivel de experiencia. Aunque se ha realizado con las mejores intenciones, los errores y desinformaciones no siempre pueden evitarse. Una disculpa adelantada si esto provoca cualquier inconveniente, ¡las correcciones y recomendaciones son bienvenidas!

La estructura y el flujo de esta guía son de tal forma que, según el autor, proveen una serie de instrucciones naturales para que el resultado final de la instalación y configuración de Arch Linux sea equiparable a lo análogo de cualquier otra distribución o sistema operativo. Al principio de cada sección se ofrecen enlaces a la Wiki y a otros sitios (📌) y, aunque no necesariamente se tratarán de referencias, en la mayoría de los casos dichas entradas ofrecen soporte y una mayor profundización en los temas abordados. También se incluye, según se consideró requerido, una breve descripción de cada apartado y al final se incluyen anotaciones con explicaciones, sugerencias (💡) o advertencias (⚠️).

Será necesario modificar varios archivos desde la terminal. Es posible usar cualquier editor de texto. Dos populares son nano y vi, aunque si no se tiene experiencia trabajando con ellas se sugiere usar la primera por ser más "amigable". Algunos atajos de teclado relevantes:

  • Guardar cambios: Ctrl + O
  • Cerrar archivo: Ctrl + X
  • Buscar texto: Ctrl + W
  • Cancelar: Ctrl + C

💡 En caso de cerrar un archivo con cambios no guardados, nano preguntará si se desea hacerlo antes de salir. Presionar y o n, dependiendo de lo que se quiera hacer, seguido de Enter.

Contrario a la creencia popular, Arch Linux no es considerada una distribución minimalista, al menos no en un sentido general y aunque así pueda parecer si se le compara con alternativas como Ubuntu. Arch pone la simpleza ante todo (sigue el principio KISS), pero no busca mantener llevar el sistema al mínimo (esto queda a la disposición del usuario) y algunos paquetes que forman parte de su base no pueden ser considerados minimalistas (como systemd).

Al contener una gran cantidad de entradas en forma de guías, explicaciones y resolución de problemas para una considerable cantidad de casos, la Wiki de Arch Linux es considerada como uno de los logros de la distribución y por tanto se recomienda tomarla como primera fuente de información (además de las tradicionales páginas del manual o man pages). Si bien la mayoría de las secciones están traducidas al español y otro gran número de idiomas, las versiones en inglés suelen ser más amplias o precisas y se actualizan con mayor frecuencia.

Si es la primera vez que se instala Arch Linux, no copiar las instrucciones tal y como aparecen. Las secciones dentro de cuadros como este ejemplo denotan comandos o texto que debe ingresarse en la terminal y no en todos los casos todo el texto mostrado debe teclearse. ¡Atención!

Sistema base

📌 Installation guide (guía oficial)

📌 General Recommendations

📌 Frequently Asked Questions

📌 Arch compared to other distributions

1. Descargar la imagen ISO

💿 archlinux.org/download

⚠️ En la actualidad, Arch Linux está soportada única y oficialmente para la arquitectura x86_64 (equipos de 64 bits). Existen derivados para sistemas de 32 bits, ARM, entre otros, pero son mantenidos por terceros. Aunque las instrucciones aquí presentadas podrían aplicar para dichos proyectos, no se garantiza que así sea.

2. Crear el medio de instalación

📌 USB flash installation media

2.1. GNU/Linux

📌 Persistent block device naming

📌 dd

  • Aplicación gráfica: Etcher
  • Desde la terminal:
dd bs=4M if=archlinux-20XX.XX.XX-x86_64.iso of=/dev/sdX status=progress oflag=sync

⚠ Se perderá todo el contenido de la unidad seleccionada.

💡 Una unidad de 1 GiB es suficiente.

💡 /dev/sdX es el dispositivo USB. Para verificar que se trata del dispositivo deseado, se puede utilizar el comando lsblk.

💡 Se recomienda verificar la integridad de la imagen descargada para asegurarse que se trata de un archivo íntegro y legítimo. Más información en la Wiki de Manjaro.

⚠ Si bien dd es una aplicación portable y disponible para varios sistemas operativos, no todos distribuyen la misma implementación o cuentan con versiones obsoletas. Se asegura el funcionamiento para distribuciones modernas.

2.2. Windows

3. Elegir la distribución del teclado

Por defecto se usa la distribución americana (us). Para elegir la de América Latina:

loadkeys la-latin1

💡 Para listar las distribuciones disponibles, correr ls /usr/share/kbd/keymaps/**/*.map.gz

4. Conectarse a una red inalámbrica

📌 Network configuration

📌 Wireless network configuration

Ejecutar wifi-menu y seleccionar la red deseada.

5. Usar los mejores servidores (mirrors)

📌 Reflector

Reflector es un script que es capaz de obtener la lista más reciente de mirrors desde la página MirrorStatus, filtrar los mirrors más actualizados, ordenarlos en base a su velocidad, y sobrescribir el archivo /etc/pacman.d/mirrorlist.

El primer paso es instalarlo con pacman -Sy reflector y ejecutar el siguiente comando:

reflector --protocol http --latest 30 --number 20 --sort rate --save /etc/pacman.d/mirrorlist

Lo anterior creará una lista de los 30 mirrors mejor calificados, lo cual puede reducir el tiempo de descarga de los paquetes a instalar en el nuevo sistema.

6. Particionado

📌 Partitioning

📌 GUID Partition Table

📌 File system hierarchy overview

📌 Swap

Particionado se refiere a la división de los sectores en un medio de almacenamiento y pueden ser de cualquier tamaño (limitadas por la capacidad del medio).

6.1. Sistema cifrado

📌 Disk encryption

📌 Encrypting an entire system

📌 Full disk encryption: do we need it?

En términos simples, un sistema cifrado es aquel cuyos componentes no pueden ser accedidos sin antes ingresar una contraseña (u otro método de autenticación). Todos los sistemas operativos actuales, incluyendo los de dispositivos móviles, cuentan con medios para conseguir esta tarea. A pesar de que añade una fuerte capa de protección al equipo, hay tanto ventajas como desventajas y no siempre puede ser necesario o conveniente implementarlo, priorizando en su lugar la protección física del hardware.

  • Asignar el espacio a cada partición:
cgdisk /dev/sdX
  1. 100 MiB para la partición EFI (código ef00)
  2. 250 MiB para la partición de arranque (código 8300)
  3. El resto del espacio disponible para el sistema raíz (código 8300)

⚠ Verificar que se esté usando el dispositivo correcto.

⚠ Se perderá todo el contenido de los espacios del disco modificados.

⚠️ Si cgdisk solicita elegir una tabla de particiones ("partition table"), elegir GPT.

⚠ Lo anterior asume que no se instalarán varias versiones del kernel. En caso contrario, podría ser necesario asignar un mayor espacio a la partición de arranque.

  • Crear el espacio cifrado:

    cryptsetup -c aes-xts-plain64 -y --use-random luksFormat /dev/sdX3
    cryptsetup luksOpen /dev/sdX3 luks # Accede al volumen creado

    💡 luks es el nombre del volumen y, aunque puede ser cualquier término, se sugiere usar algo descriptivo para referencias futuras.

  • Crear las particiones dentro del volumen recién creado:

    pvcreate /dev/mapper/luks # Inicializa el "volumen físico" (physical volume)
    vgcreate vg0 /dev/mapper/luks # Crea un "grupo" (group volume)
    lvcreate --size 8G vg0 --name swap # Crea el volumen lógico (logic volume) para Swap
    lvcreate -l +100%FREE vg0 --name root # Y el del sistema raíz

    💡 El nombre del grupo (vg0) y los de los volúmenes lógicos (swap y root) son arbitrarios, pero, como en el caso del volumen cifrado, se recomienda usar términos descriptivos.

    💡 El tercer comando crea el volumen lógico para Swap y 8G designa el tamaño requerido. Tradicionalmente se sugiere asignar a este espacio la misma cantidad de RAM instalada, pero para sistemas de "gran tamaño" en memoria puede no ser necesario (o, según el uso que tendrá el sistema, puede ser que ni siquiera se necesite Swap). Si el espacio en disco es limitado (como en unidades SSD) o se cuenta con la suficiente cantidad RAM, se puede usar la mitad de esta.

6.2. Sistema sin cifrar

cgdisk /dev/sdX
  1. 100 MiB para la partición EFI (código ef00)
  2. 250 MiB para la partición de arranque (código 8300)
  3. La mitad de la RAM instalada para Swap (código 8200)
  4. El espacio restante para el sistema raíz (código 8300)

💡 Aunque no es obligatorio tener una partición dedicada para el arranque, puede ser recomendado si se usará un esquema de particionado distinto (como /var o /home en particiones exclusivas) o si el sistema raíz usará sistemas de archivos "alternativos" como XFS o BtrFS. Si ninguna de las situaciones aplica, se puede omitir la creación de la segunda partición.

7. Sistemas de archivos

📌 File systems

7.1. Cifrado

mkfs.vfat -F32 /dev/sdX1 # Partición EFI
mkfs.ext3 /dev/sdX2 # Partición de arranque
mkfs.ext4 /dev/mapper/vg0-root # Sistema raíz
mkswap /dev/mapper/vg0-swap # Swap

⚠ Verificar los nombres y números de las unidades.

7.2. Sin cifrar

mkfs.vfat -F32 /dev/sdX1 # Partición EFI
mkfs.ext3 /dev/sdX2 # Partición de arranque, en caso de ser necesario
mkswap /dev/sdX3 # Swap
mkfs.ext4 /dev/sdX4 # Sistema raíz

⚠ Verificar los números de las particiones.

💡 Ext4 es el sistema de archivos más usado y está optimizado para el uso general. Otras opciones interesantes son XFS y BtrFS.

8. Montar las particiones

8.1. Cifrado

mount /dev/mapper/vg0-root /mnt # /mnt será el sistema raíz (/) de la nueva instalación
swapon /dev/mapper/vg0-swap # Activa Swap
mkdir /mnt/boot # Crea el directorio para /boot
mount /dev/sdX2 /mnt/boot # Monta la partición de arranque
mkdir /mnt/boot/efi # Crea el directorio para los archivos EFI
mount /dev/sdX1 /mnt/boot/efi # Monta la partición EFI

8.2. Sin cifrar

mount /dev/sdX4 /mnt # /mnt será el sistema raíz (/) de la nueva instalación
swapon /dev/sdX3 # Activa Swap
mkdir /mnt/boot # Crea el directorio para /boot si se usa una partición dedicada
mount /dev/sdX2 /mnt/boot # Monta la partición de arranque
mkdir /mnt/boot/efi # Crea el directorio para los archivos EFI
mount /dev/sdX1 /mnt/boot/efi # Monta la partición EFI

9. Instalación del sistema base

pacstrap es un script que toma como parámetros el punto de montaje del sistema raíz (/mnt) y los paquetes a descargar e instalar en dicho directorio.

pacstrap /mnt base base-devel grub git efibootmgr dialog wpa_supplicant nano linux linux-headers linux-firmware mkinitpcio

💡 Además de la base de Arch, esto instala el gestor de arranque, los componentes básicos para la creación de paquetes y las herramientas necesarias para hacer uso de wifi-menu en el nuevo sistema.

💡 Aunque es posible instalar tantos paquetes como se requieran, se sugiere apegarse a lo básico e instalar y configurar el resto después de haber reiniciado el equipo y haber accedido a él exitosamente.

💡 Si se está instalando Arch Linux junto a Windows, también instalar los paquetes os-prober y ntfs-3g para la correcta detección del segundo.

10. Configurar el montado de las particiones

📌 fstab

genfstab -pU /mnt > /mnt/etc/fstab

Esto crea el archivo /mnt/etc/fstab, el cual contiene las instrucciones necesarias para que el sistema monte al arrancar las particiones actualmente montadas a partir de /mnt.

💡 Si se está instalando en una unidad de estado sólido (SSD), modificar el archivo /mnt/etc/fstab y cambiar el parámetro relatime por noatime excepto en la partición de arranque. Esto reduce la escritura en el sistema de archivos.

💡 Si el sistema raíz se formateó con Ext4, agregar commit=60 después de relatime (o noatime) en la línea correspondiente. Por ejemplo:

UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX   /           ext4         defaults,noatime,commit=60    0 1

💡 En /etc/fstab también es posible establecer el montaje automático de particiones, servidores remotos y otros medios de almacenamiento, facilitando el acceso a estas ubicaciones o permitiendo automatizar otras tareas. Se recomienda leer la entrada correspondiente.

11. Acceder al sistema recién creado

📌 chroot

arch-chroot /mnt /bin/bash

💡 arch-chroot es un script que automatiza lo que se conoce como "jaula chroot" (chroot jail).

12. Configurar la zona horaria

📌 System time

ln -s /usr/share/zoneinfo/America/Mexico_City /etc/localtime
hwclock --systohc --utc

💡 Lo anterior ajusta la zona horaria del sistema a la del Centro de México, modificar según sea necesario.

13. Nombrar al equipo

echo MYHOSTNAME > /etc/hostname

💡 El nombre es arbitrario y será como las redes "verán" al equipo.

14. Idioma del sistema

📌 Locale

Modificar el archivo /etc/locale.gen y descomentar (remover #) el o los idiomas que se quieran instalar. Después de haber guardado el archivo, ejecutar:

locale-gen
echo LANG=es_MX.UTF-8 >> /etc/locale.conf
echo LANGUAGE=es_MX >> /etc/locale.conf

💡 Las últimas dos líneas definen el idioma que el sistema usará por defecto para las traducciones de los mensajes e interfaces.

15. Ajustar la distribución del teclado del sistema

📌 Keyboard configuration

Crear el archivo /etc/vconsole.conf y añadir la línea KEYMAP=la-latin1 (según la distribución deseada).

16. Usuarios

📌 Users and groups

📌 File permissions and attributes

📌 Sudo

  • Para establecer la contraseña del usuario root, correr passwd.

  • Si en este punto se desean crear usuarios normales, usar:

    useradd -m -g users -G wheel -s /bin/bash USUARIO
  • Establecer la contraseña para el usuario recién creado:

    passwd USUARIO
  • Para permitir que los usuarios dentro del grupo wheel puedan usar el comando sudo (y obtener temporalmente privilegios de administración), modificar el archivo /etc/sudoers y descomentar la línea:

    # %wheel ALL=(ALL) ALL

⚠️ passwd no muestra los caracteres tecleados y es necesario ingresar la contraseña establecida dos veces.

💡 Aunque el nombre de usuario puede estar compuesto por prácticamente cualquier cadena de caracteres (letras [mayúsculas y minúsculas], números, puntos [ . ], guiones [ - ] y guiones bajos [ _ ]), por simplicidad y conveniencia es recomendable limitarse a letras en minúsculas.

💡 Las opciones sugeridas para useradd, son para crear el directorio del usuario (-m), añadir a este al grupo primario (-g, en este caso lo agrega al grupo users), al grupo secundario (-G y en este ejemplo se añade al grupo wheel, que es necesario para que el usuario pueda correr comandos con sudo, aunque si no se le pretenden proporcionar permisos de administrador, esta opción puede omitirse), el emulador de terminal a usar por defecto (-s /bin/bash) y el nombre que tendrá el usuario (así como su directorio personal).

17. Ajustar la imagen de arranque

📌 mkinitcpio

📌 Arch boot process

📌 Minimal initramfs

📌 Kernel module

Un sistema GNU/Linux arranca con lo que se conoce como una "imagen de disco RAM inicial" (initrd o initramfs), un sistema de ficheros temporal con las configuraciones necesarias para montar el sistema real y cargar el resto de los componentes. En Arch Linux, esto se ajusta en el archivo /etc/mkinitcpio.conf.

  • Añadir a la línea MODULES=(...) el modulo correspondiente al sistema de archivos (o varios) del sistema creado. Por ejemplo, MODULES=(ext4) si se usó dicho sistema de ficheros.
  • La imagen de disco generalmente es un archivo comprimido y se almacena en /boot, una por cada versión del kernel instalada. En caso de que dicho punto de montaje se encuentre en una partición limitada, puede convenir cambiar el nivel de compresión, aunque puede impactar en el tiempo de arranque (entre más comprimido esté, tomará más tiempo para extraer)

Si se optó por cifrar el sistema, además se deben agregar encrypt y lvm2 en la línea HOOKS=(...), de lo contrario el sistema no podrá montarse:

HOOKS=(base udev autodetect modconf block encrypt lvm2 keyboard fsck)

Cuando no hayan más ajustes por realizar, ejecutar mkinitcpio -p linux para regenerar la initrd.

💡 También es posible ajustar otras opciones como el nivel de compresión de las imágenes creadas, pero estas pueden considerarse "avanzadas" y es preferible modificarlas una vez comprendidas.

18. Instalar el gestor de arranque

📌 GRUB

📌 Kernel parameters

📌 Silent boot

El gestor de arranque se encarga de decirle al equipo qué sistema se iniciará. Aunque hay varios disponibles, GRUB es posiblemente el más popular. Soporta diversas funciones y es especialmente útil al manejar varias instalaciones (como al instalar una distribución GNU/Linux junto a otros sistemas operativos) y, al ser ampliamente usado, la posible resolución de problemas no debería de suponer un gran reto. Para generar los componentes necesarios en /boot, ejecutar:

grub-install /dev/sdX

Para un sistema cifrado, si no se reportaron errores, es necesario modificar el archivo /etc/default/grub y, en la línea GRUB_CMDLINE_LINUX, agregar cryptdevice=/dev/sdX4:luks:allow-discards (modificar según la partición en la que se creó el volumen cifrado).

Al guardar los cambios, correr grub-mkconfig -o /boot/grub/grub.cfg.

💡 Modificando /etc/default/grub se pueden hacer otros cambios como:

  • Reducir el tiempo de espera al listar los sistemas detectados.
  • Elegir un tema visual para GRUB.
  • Establecer la resolución de la pantalla desde el arranque inicial.
  • Lograr un "arranque silencioso" (reducir los mensajes mostrados al mínimo), modificando la línea:
GRUB_CMDLINE_LINUX_DEFAULT="audit=0 quiet loglevel=3 rd.udev.log_priority=3 udev.log_priority=3 vt.global_cursor_default=0"

💡 Si se hará uso de la hibernación del sistema, es necesario especificar la partición que contiene Swap, añadiendo resume=[PARTICIÓN] en la línea GRUB_CMDLINE_LINUX (según esta guía, resume=/dev/mapper/vg0-swap o resume=/dev/sdX3). Más información en la Wiki.

19. Iniciar el sistema instalado

Si no se detectaron errores y se hicieron los ajustes planeados, es momento de iniciar el sistema instalado:

exit # sale de la jaula chroot
umount -R /mnt # desmonta todas las particiones montadas a partir de /mnt
swapoff -a # desactiva Swap
reboot # reinicia el sistema

Cuando el equipo se apague y esté por arrancar de nuevo, es posible (y recomendado) remover la unidad USB con la imagen de instalación. Si todos los pasos anteriores fueron un éxito, la pantalla de GRUB debería de aparecer para seleccionar el sistema que acaba de crearse. ¡Felicitaciones, Arch Linux está lista para usarse!


Ajustando Arch Linux y recomendaciones generales

Después de haber seleccionado el sistema a iniciar en GRUB y habiendo finalizado el arranque, una pantalla de bienvenida solicitando el nombre de un usuario debería de estar presente: el resultado de los pasos anteriores. A partir de este "esqueleto" sigue armar Arch Linux según las necesidades y preferencias personales.

0. Restaurar la unidad usada para instalar Arch Linux

📌 Restore Your USB Key to its original state

Sin importar el método elegido para la creación del medio de instalación, posiblemente se requiera recuperar el espacio ocupado para darle otros usos al dispositivo. Al intentar acceder a la unidad, podría parecer que la capacidad máxima ha sido reducida, cuando en realidad lo mostrado se trataría únicamente de la partición detectada.

0.1. Desde GNU/Linux

En caso de que se quiera hacer en el sistema recién instalado, basta con conectar la unidad y tener disponibles permisos de administración (acceder como root o que el usuario activo sea capaz de ejecutar comandos con sudo). En caso de hacerse en otro equipo con una interfaz gráfica disponible, abrir un emulador de terminal y proceder normalmente.

  1. Ejecutar fdisk /dev/sdX, en donde /dev/sdX es el dispositivo extraíble que se desea restaurar (si se desconoce el nombre de la unidad o no se tiene certeza, utilizar lsblk o fdisk -l).
  2. La interfaz de fdisk es simple y solicita la interacción del usuario por medio de comandos, cada uno asignado a una tecla específica que debe ingresarse y presionar Enter. Lo siguiente es borrar la(s) partición(es) con el comando d hasta que aparezca el mensaje No partition is defined yet!.
  3. Crear una nueva partición con n.
  4. Aceptar las siguientes preguntas presionando Enter cuando aparezcan.
  5. Usar w para guardar los cambios.
  6. Correr mkfs.vfat -F32 /dev/sdX1 para formatear la partición creada con FAT32.

💡 Aunque hay una gran variedad de alternativas, tanto gráficas (por ejemplo, KDE Partition Manager o GNOME Disks) como en modo de texto (cgdisk, entre otras), fdisk resulta la más práctica para este caso específico al estar disponible en prácticamente cualquier distribución sin necesidad ser instalada explícitamente por el usuario.

0.2. Desde Windows

0.2.1. Modo de texto
  1. Ejecutar cmd o PowerShell con permisos de administración O presionar Win + R y correr directamente diskpart.exe.
  2. list disk
  3. select disk X, en donde X es el número de la unidad a limpiar.
  4. clean
  5. create partition primary
  6. active
  7. format fs=fat32 quick
  8. exit
0.2.2. Interfaz gráfica
  1. Presionar Win + R e ingresar diskmgmt.msc O buscar "disk management" en el Menú de Inicio.
  2. En la parte inferior de la ventana mostrada, hacer clic derecho sobre la partición en el disco a restaurar, seleccionar Delete volume... y aceptar el diálogo mostrado. Repetir según las particiones existentes.
  3. Clic derecho sobre el espacio en negro y crear una nueva partición. Se abrirá una nueva ventana en donde podrá especificarse el nombre, el sistema de archivos (FAT32) y la letra de montaje ("F:", por ejemplo).

💡 Como en GNU/Linux, hay distintas herramientas para realizar esta tarea, pero ambas opciones aquí mostradas no requieren la instalación de ningún programa de terceros y pueden ser usadas en cualquier versión de Windows, necesitando solamente el contar con privilegios de administración.

1. Gestión de paquetes

📌 pacman

📌 Official repositories

📌 Creating packages

📌 pacman/Tips and tricks

📌 Arch Build System (ABS)

📌 Arch User Repository (AUR)

[TBA]

2. Entorno gráfico

📌 Desktop environment

[TBA]

2.1. Pasos previos

📌 Xorg

📌 Wayland

📌 Intel graphics

📌 AMDGPU

📌 AMD Catalyst

📌 ATI

📌 NVIDIA

📌 Nouveau

📌 Hybrid graphics

📌 PRIME

📌 NVIDIA Optimus

📌 Bumblebee

[TBA]

2.2. Entornos de escritorio

[TBA]

3. Tipografías

📌 Fonts

📌 Font configuration

📌 Metric-compatible fonts

[TBA]

4. Otras versiones del kernel

📌 Kernel

📌 Modprobed-db

[TBA]

5. Mejorar la respuesta del equipo

Al afinar cualquier sistema, sin importar el tipo del que se trate, se debe considerar el uso primario que tendrá el equipo en cuestión. Para el caso de servidores, generalmente se hacen ajustes para mejorar el rendimiento bruto aprovechando todos los recursos disponibles (procesador, memoria y red), ya sea por la carga que representen las herramientas y plataformas corriendo en la plataforma o la cantidad de entradas y salidas de información.

Sin embargo, en equipos de escritorio no se suele priorizar la ejecución de tareas exigentes, al menos no en ambientes cotidianos o dichos procesos se llevan a cabo en intervalos de tiempo relativamente cortos (como la compilación de programas o la ejecución de videojuegos). Si bien el correcto aprovechamiento de los recursos sigue importando en estos casos, en general múltiples trabajos existen simultáneamente y es en esos momentos cuando pueden presentarse inconvenientes para el usuario.

Lo que debe buscarse no es la mejora del rendimiento, sino de la respuesta del sistema. Lo segundo se refiere a lo que en inglés se conoce como "responsiveness": qué tan "vivo" se siente el sistema; qué tan bien se adapta a la carga que se le impone; un sistema consistente. Si lo anterior no convence, un ejemplo de un sistema no responsivo es aquel que al realizar un trabajo "pesado" (como la transferencia de grandes cantidades de información o la renderización de un video) deja de ser utilizable ("se congela"). Incluso si las tareas que ponen al sistema bajo presión se realizan en poco tiempo, el resto del sistema parece inutilizable (o realmente lo es).

Es en estas situaciones es cuando puede convenir sacrificar algo de rendimiento por un entorno de trabajo más fluido.

5.1. Memoria virtual

📌 Swappiness

📌 Sysctl - Virtual memory

📌 Optimizing Linux for Slow Computers

Es posible ajustar varios componentes del sistema operativo para intentar mejorar este apartado, pero para el caso de Linux, el método más directo es cambiar algunos parámetros del núcleo que alteran el manejo de la memoria.

En el archivo /etc/sysctl.d/99-sysctl.conf (la instalación de Arch Linux no crea este fichero):

vm.swappiness = 1

vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
# O
vm.dirty_background_bytes = 16777216
vm.dirty_bytes = 50331648

vm.vfs_cache_pressure = 50
vm.min_free_kbytes = 976562

Los valores anteriores aplican para un sistema de 16 GB de RAM y no deben de usarse descuidadamente.

  • vm.swappiness Toma valores de 0 a 100, cambiando la frecuencia con la que el sistema "escribe en Swap". Un valor alto implica una mayor actividad, mientras que uno bajo la evita. En equipos con "suficiente memoria", elegir una cifra mínima puede mejorar la respuesta del sistema.
  • vm.dirty_ratio Se refiere al número de páginas de memoria en las que un proceso que genera escrituras en el almacenamiento comenzará a escribir datos sucios. Toma valores de 0 a 100 y representa el porcentaje de memoria usado para realizar la tarea descrita. Es importante elegir un valor adecuado, ya que en equipos con grandes cantidades de memoria un porcentaje alto puede representar un impacto considerable (por ejemplo, con 16 GB de RAM, 10% equivale a 1.6%).
  • vm.dirty_background_ratio Es el porcentaje de memoria del sistema que puede llenarse con páginas sucias (páginas de memoria que aún deben escribirse en el disco) antes de que se inicien los procesos de fondo encargados para moverlos al disco. La advertencia del parámetro anterior se extiende a este.
  • vm.vfs_cache_pressure Controla la frecuencia del kernel a reclamar la memoria que se usa para almacenar durante los trabajos anteriores. El valor por defecto es 100 y reducirlo provoca que la tarea se realice en menor medida (nunca ponerlo en 0).
  • vm.dirty_background_bytes, vm.dirty_bytes Son equivalentes opuestos de vm.dirty_background_ratio y vm.dirty_ratio: cumplen las mismas funciones, pero se establecen en bytes en lugar de porcentajes. Usar únicamente un par de parámetros, ya que si se especifican ambos, el valor opuesto automáticamente se cambiará a 0.
  • vm.min_free_kbytes Es el espacio de memoria en KiB reservado que evita que el equipo se quede sin este componente. Si se establecen menos de 1024 KiB, el sistema "se llenará" rápidamente, llevando a congelamientos repentinos en caso de cargas elevadas. Establecer un valor demasiado alto dejará al sistema sin memoria disponible. Se recomienda ajustarlo como ram_instalada / nucleos_procesador * 0.05.

💡 "Datos sucios" se refiere a los datos aún en memoria. Estos pueden ser información que todavía no se transfiere al disco para ser vaciada, regiones en la memoria que han sido modificados y aún no escritos en el disco, páginas que están por transferirse, pero que han cambiado desde que el proceso se inició. Es un fenómeno absolutamente normal que garantiza un buen manejo de memoria, aunque una mala configuración puede conseguir lo opuesto.

💡 Los cambios en /etc/sysctl.d/*.conf se verán reflejados en el siguiente reinicio del sistema. Para aplicarlos de inmediato, se puede usar el comando sysctl como sigue (permisos de administración requeridos):

sysctl -w vm.swappiness=1

5.2. Zram y Zswap

📌 Zswap

📌 Zram or zswap

[TBA]

6. Mejorar la calidad del audio

[TBA]

7. Optimizar Bluetooth

[TBA]

8. Aplicaciones

[TBA]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment