Created
June 26, 2020 17:32
-
-
Save rubenher55/b00785d1e5f83527177c4e77033b7f50 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| OPTIMIZACION SSD ARCHLINUX | |
| 1. TRIM | |
| REQUISITOS PARA PODER ACTIVAR TRIM | |
| Para activar TRIM deberemos cumplir con las siguientes condiciones: | |
| El sistema operativo tiene que soportar TRIM. Todas los sistemas operativos a partir de Windows 7 y las distros linux con un kernel igual o posterior al 2.6.28 soportan TRIM. | |
| Disponer de una unidad SSD con un firmware que soporte TRIM. La totalidad de unidades SSD actuales tienen pleno soporte. | |
| El sistema de archivos de vuestro equipo tiene que ser btrfs, ext3, ext4 gfs2m jfs, vfat, f2fs, ntfs, ocfs2 o xfs. | |
| ¿CÓMO ACTIVAR TRIM DE FORMA CORRECTA EN LINUX? | |
| Existen dos modos de activar TRIM. Los modos son los siguientes: | |
| TRIM Continuo: En modo continuo ejecutará TRIM cada vez que borremos un archivo de nuestra unidad de almacenamiento. | |
| TRIM periódico: Se aplicará TRIM de forma periódica y automática en la fecha y hora que especifiquemos. Normalmente es suficiente ejecutar TRIM una vez por semana. | |
| ¿Hay que usar TRIM en modo continuo o en modo periódico? | |
| En mi caso recomiendo activar TRIM de forma periódica. Activar TRIM en modo continuo genera los siguientes inconvenientes: | |
| Reducción de la vida útil de la unidad de almacenamiento. TRIM en modo continuo implica lecturas y escrituras adicionales a nuestra unidad de almacenamiento. | |
| Rendimiento inferior al esperado. En determinados casos se pueden producir congelaciones y corrupción del sistema de archivos. Por ejemplo, en mi caso de forma aleatoria se me congela Chrome durante segundos. | |
| Imposibilidad de recuperar archivos borrados. Si borramos un fichero por equivocación nos será prácticamente imposible recuperarlo. | |
| Por lo tanto, en este artículo aprenderemos a configurar y activar TRIM para que únicamente se ejecute de forma periódica. | |
| Al usar TRIM en modo periódico únicamente recomiendo no andar justos de capacidad de almacenamiento en nuestro SSD. | |
| 1. Activar TRIM periódico en Linux usando systemd | |
| Para poder usar fstrim tenemos que asegurar que el paquete util-linux esté instalado. Para ello ejecutamos el siguiente comando en la terminal: | |
| sudo apt install util-linux | |
| Nota: En el caso que no usen el gestor de paquete apt deberán modificar el comando que acabamos de ejecutar. | |
| En el caso que sean usuarios de Debian 8 y 9 ejecuten el siguiente comando para crear los servicios de Systemd: | |
| sudo cp /usr/share/doc/util-linux/examples/fstrim.{service,timer} /etc/systemd/system | |
| A continuación, todos los usuarios de cualquier distro deberán ejecutar el siguiente comando para habilitar TRIM: | |
| sudo systemctl enable fstrim.timer | |
| Acto seguido ejecutaremos el siguiente comando para iniciar el servicio: | |
| sudo systemctl start fstrim.timer | |
| En estos momento el soporte TRIM debería estar habilitado. Para comprobar que está habilitado tan solo tenemos que ejecutar el siguiente comando: | |
| sudo systemctl status fstrim.timer | |
| El resultado obtenido en mi caso es el siguiente: | |
| ● fstrim.timer - Discard unused blocks once a week | |
| Loaded: loaded (/lib/systemd/system/fstrim.timer; enabled; vendor preset: enabled) | |
| Active: active (waiting) since Fri 2019-02-22 19:47:05 CET; 22min ago | |
| Trigger: Mon 2019-02-25 00:00:00 CET; 2 days left | |
| Docs: man:fstrim | |
| Si analizamos la salida del comando vemos la palabras active y waiting. Por lo tanto TRIM está habilitado. Otra información que podremos encontrar es la siguiente: | |
| Se ejecutará TRIM una vez por semana en todas las particiones montadas de nuestra unidad de almacenamiento SSD. | |
| Se aplicará todos los Lunes a las 00:00 horas. | |
| La hora en que se ha levantado el servicio fstrim. | |
| 2. Activar TRIM en volúmenes LVM | |
| NO LO HE ACTIVADO | |
| Para activar TRIM en volúmenes LVM deberemos ejecutar el siguiente comando en la terminal: | |
| sudo nano /etc/lvm/lvm.conf | |
| Cuando se abra el editor de textos cambiaremos el valor issue_discards de 0 a 1. De tal forma que quede del siguiente modo: | |
| # [...] | |
| devices { | |
| # [...] | |
| issue_discards = 1 | |
| # [...] | |
| } | |
| # [...] | |
| Una vez aplicados los cambios los guardamos y reiniciamos el ordenador. | |
| Activar TRIM en particiones cifradas con dm-crypt | |
| 3. Para habilitar TRIM en particiones cifradas realizaremos lo siguiente. Abriremos una terminal y ejecutaremos el siguiente comando: | |
| NO LO HE ACTIVADO | |
| sudo nano /etc/crypttab | |
| Cuando se abra el editor de textos añadiremos la opción discard en el apartado <options>. | |
| <target name> <source device> <key file> <options> | |
| sda3_crypt /dev/sda3 none luks,discard | |
| Una vez realizadas las modificaciones guardamos los cambios y cerramos el fichero. | |
| Finalmente actualizaremos la configuración de arranque del sistema ejecutando el siguiente comando en la terminal: | |
| sudo update-initramfs -u -k all | |
| Ver la periodicidad con que se ejecuta TRIM | |
| Para ver la periodicidad con que se ejecutará TRIM tan solo tenemos que ejecutar el siguiente comando en la terminal: | |
| cat /etc/systemd/system/timers.target.wants/fstrim.timer | |
| En mi caso el resultado obtenido es el siguiente: | |
| [Unit] | |
| Description=Discard unused blocks once a week | |
| Documentation=man:fstrim | |
| [Timer] | |
| OnCalendar=weekly | |
| AccuracySec=1h | |
| Persistent=true | |
| [Install] | |
| WantedBy=timers.target | |
| Analizando la salida del comando podemos observar lo siguiente: | |
| TRIM se ejecuta una vez a la semana. La frecuencia es más que correcta y no recomiendo que se modifique. Si quisierais cambiar la frecuencia tan solo tendríamos que reemplazar weekly por otro valor como por ejemplo Mon,Tue *-*-01..04 12:00:00. Está ejemplo ejecutaría TRIM los 4 primeros días del mes siempre y cuando sean Lunes o Martes a las 12 del mediodía. | |
| La precisión temporal con que se ejecutará la tarea TRIM será de ± 1 hora. | |
| El valor de persistencia está fijado en True. De este modo, aunque el ordenador no esté abierto a la hora que se tiene que ejecutar, TRIM se ejecutará al abrirlo. | |
| Comprobar la última vez que se ejecuto TRIM | |
| Para comprobar la última vez que se aplico TRIM ejecutamos el siguiente comando en la terminal: | |
| systemctl list-timers fstrim.timer --all | |
| El resultado obtenido en mi caso es el siguiente: | |
| NEXT LEFT LAST PASSED UNIT ACTIVATES | |
| Mon 2019-02-18 00:00:00 CET 1 day 13h left Mon 2019-02-11 08:39:42 CET 5 days ago fstrim.timer fstrim.service | |
| Si analizamos la salida del comando vemos lo siguiente: | |
| Trim se ejecutará el próximo Lunes a las 00:00 horas. | |
| Falta 1 día y 13 ahora para que se ejecute Trim. | |
| La última vez en que se ejecuto fue el pasado Lunes a la 08:39:42h. No se ejecuto a las 00:00 porque en este momento el ordenador estaba apagado. Por lo tanto cuando TRIM se ejecuto cuando abrí el ordenador | |
| Consultar los logs de TRIM | |
| Si queremos consultar los logs de TRIM podemos ejecutar el siguiente comando en la terminal: | |
| sudo journalctl -u fstrim.timer | |
| Cada vez que reiniciemos el ordenador o servidor se borrará el log de fstrim.timer. Si queréis que el log sea persistente tendréis que realizar lo siguiente. | |
| Inicialmente crearemos la carpeta que almacenará los logs ejecutando el siguiente comando en la terminal: | |
| sudo -p mkdir /var/log/journal | |
| Acto seguido indicamos que los logs del espacio volátil /run/log/journal/ se almacenen en /var/log/journal ejecutando el siguiente comando: | |
| sudo systemd-tmpfiles --create --prefix /var/log/journal | |
| Finalmente reiniciamos el servicio systemd-journald ejecutando el siguiente comando: | |
| sudo systemctl restart systemd-journald | |
| 4. Actualizar firmware de SSD | |
| CRUCIAL | |
| O desde su pagina con su software o ver Wiki. | |
| SAMSUNG | |
| O desde su pagina con su software o ver Wiki. | |
| 5. Optimizar lectura/escritura en SSD /etc/fstab | |
| En este archivo no he tocado nada esta vez de lectura y escritura, seguire investigando ya que al trabajar con LVM on LUKS no recomiendan tocar por problemas de seguridad. | |
| Lo que si he añadido es la carpeta /tmp a RAM. | |
| En principio los otros discon del LVM on LUKS se quedan por defecto. | |
| /dev/mapper/mi-disco-cifrado /mnt/mi-disco-cifrado ext4 defaults 1 2 | |
| tmpfs /tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,defaults 0 0 | |
| 6. Optimizar el uso de la partición SWAP | |
| El valor de intercambio representa cuando el kernel prefiere la swap a la RAM. Configurarlo a un valor muy bajo, significa que el kernel casi siempre usara la RAM. Lo que mejorara el desempeño, para hacer esto debemos agregar estas lineas al archivo | |
| Para ello modificamos el archivo /etc/sysctl.d/99-sysctl.conf | |
| vm.swappiness=20 | |
| vm.vfs_cache_pressure=50 | |
| 7. Temporales de Navegadores en RAM | |
| En Firefox que es el que utilizo se cambian 3 parametros en la configuración del navegador. | |
| about:config | |
| browser.cache.disk.enable = FALSE | |
| browser.cache.memory.enable = TRUE | |
| browser.cache.memory.max_entry_size = -1 | |
| Para otros navegadores hay que editar el archivo FSTAB. | |
| 8. Modificar la frecuencia con la que el sistema borra los archivos temporales | |
| Tanto la carpeta /tmp (que en mi caso deberá estar vacio ya que la he montado en RAM) como la carpeta /var/tmp. | |
| Para ello modificaremos el siguiente archivo: | |
| sudo nano /usr/lib/tmpfiles.d/tmp.conf | |
| Añadiendo o modificando el archivo para que tenga la siguiente línea: | |
| D /var/tmp 1777 root root 30d | |
| 9. I/O Schedulers | |
| Debera mostrar mq-deadline que es el formato correcto para SSD o en su defecto noop. | |
| To list the available schedulers for a device and the active scheduler (in brackets): | |
| cat /sys/block/sda/queue/scheduler | |
| mq-deadline kyber [bfq] none | |
| To list the available schedulers for all devices: | |
| grep "" /sys/block/*/queue/scheduler | |
| /sys/block/pktcdvd0/queue/scheduler:none | |
| /sys/block/sda/queue/scheduler:mq-deadline kyber [bfq] none | |
| /sys/block/sr0/queue/scheduler:[mq-deadline] kyber bfq none | |
| 10. Temporales en Ram (tmpfs) | |
| Modificar el archivo /etc/fstab añadiendo la línea siguiente al final: | |
| tmpfs /var/tmp tmpfs noexec,rw,auto,nouser,sync,noatime,nodev,nosuid,mode=1777 0 0 | |
| Si utilizamos mucha RAM, por ejemplo, por que utilizamos máquinas virtuales, podremos limitar el uso de la RAM añadiendo el parámetro delimitador size. Con este parámetro estamos ordenando al sistema, que bajo ningún concepto conceda más RAM a dichos puntos de montaje que el indicado con el parámetro size. A continuación ponemos un ejemplo de como limitar el tamaño asignado a 2GB: | |
| tmpfs /tmp tmpfs size=2G,noexec,rw,auto,nouser,sync,noatime,nodev,nosuid,mode=1777 0 0 | |
| A continuación explicamos algunas de las opciones de montaje: | |
| noatime: Deshabilita por completo el registro de tiempo de acceso para cualquier archivo. Implica la aplicación de nodiratime. Teniendo en cuanta que además se anota el acceso a los ficheros cacheados y el acceso constante a todos los ficheros de procesos del sistema, es un número muy importante de escrituras de fechas de acceso. Al reducir la cantidad de escrituras que el sistema operativo realiza sobre el disco, incrementamos la vida de la unidad SSD. | |
| nodiratime: Deshabilita el registro de tiempos de acceso para los directorios, pero mantiene activo el registro para los archivos. | |
| relatime: Limita el registro de timestamps únicamente a aquellos casos en que el archivo se modifica. | |
| De las tres opciones anteriores, la opción menos invasiva es claramente relatime, que ya de por sí ofrecerá alguna ganancia en el rendimiento de nuestros discos duros, sobre todo mecánicos. La opción que más rendimiento ofrece es noatime. | |
| size: Limita el tamaño que se utilizará de RAM | |
| defaults: Asigna las opciones de montaje predeterminadas que serán utilizadas para el sistema de archivos. Las opciones predeterminadas para ext4 son: rw, suid, dev, exec, auto, nouser, async. | |
| rw: Monta el sistema de archivos en modo lectura-escritura. | |
| ro: Monta el sistema de archivos en modo sólo lectura. | |
| suid: Permite las operaciones de suid, y sgid bits. Se utiliza principalmente para permitir a los usuarios comunes ejecutar binarios con privilegios concedidos temporalmente con el fin de realizar una tarea específica. | |
| nosuid: Bloquea el funcionamiento de suid, y sgid bits. | |
| exec: Permite la ejecución de binarios residentes en el sistema de archivos. | |
| noexec: No permite la ejecución de binarios que se encuentren en el sistema de archivos. | |
| auto: El sistema de archivos será montado automáticamente durante el arranque, o cuando la orden mount -a se invoque. | |
| noauto: El sistema de archivos no será montado automáticamente, solo cuando se le ordene manualmente. | |
| user: Permite a cualquier usuario montar el sistema de archivos. Esta opción incluye noexec, nosuid, nodev, a menos que se indique lo contrario. | |
| nouser: Solo el usuario root puede montar el sistema de archivos. | |
| users: Permite que cualquier usuario perteneciente al grupo users montar el sistema de archivos. | |
| owner: Permite al propietario del dispositivo montarlo. | |
| dev: Intérprete de los dispositivos especiales o de bloque del sistema de archivos. | |
| nodev: Impide la interpretación de los dispositivos especiales o de bloques del sistema de archivos. | |
| sync: Todo el I/O se debe hacer de forma sincrónica. | |
| async: Todo el I/O se debe hacer de forma asíncrona. | |
| discard: Emite las órdenes TRIM para dispositivos de bloques subyacentes cuando se liberan los bloques. Recomendado para usar si el sistema de archivos se encuentra en un sistemas de ficheros ubicados en unidades SSD. | |
| nodelalloc: Desactiva la función de ext4 de delayed allocation, que reserva el espacio pero no lo escribe. Aplaza la escritura de bloques hasta que se esté en el tiempo de escritura. Es más que nada por seguridad. | |
| barrier=0: Desactiva las barreras automáticamente. Se refiere a los límites de escritura. Si es igual a cero los elimina, si es igual a 1, los activa. Podemos prescindir de estas barreras si los discos están protegidos contra cortes de corriente. Sólo en este caso, incluimos la opción barrier=0 | |
| i_version: Habilita el uso de la versión extendida de 64 bits en sistemas de ficheros ext4. | |
| commit=30: Retrasa la escritura de los metadatos de ficheros, con lo que se reduce mucho el uso de disco. No recomendable si estuviésemos en un ordenador con batería. | |
| inode_readahead_blks=64: Aumenta de 32 a 64 el tamaño de los bloques de lectura. | |
| data=writeback: Evita que los metadatos de los archivos sean escritos de forma lenta tras escribir los archivos. Esta opción no provoca corrupción en el sistema de archivos, pero puede provocar que los cambios mas recientes se pierdan si cae el sistema. No lo incluiremos en nuestros ejemplos ya que no funciona en algunos sistemas. | |
| flush: La opción vfat permite eliminar datos con más frecuencia, de modo que los cuadros de diálogo de copia o las barras de progreso se mantenga hasta que se hayan escrito todos los datos. | |
| nofail: Monta el dispositivo cuando está presente, pero ignora su ausencia. Esto evita que se cometan errores durante el arranque para los medios extraíbles. | |
| mode=1777: Permite que cualquiera pueda crear archivos, pero protegiéndolos de la manipulación de otros usuarios. | |
| 11. Deshabilitar Hibernación y Suspensión | |
| Deshabilitar suspender e hibernar | |
| La siguiente regla desactiva la suspensión e hibernación para todos los usuarios. | |
| /etc/polkit-1/rules.d/10-disable-suspend.rules | |
| polkit.addRule (función (acción, asunto) { | |
| if (action.id == "org.freedesktop.login1.suspend" || | |
| action.id == "org.freedesktop.login1.suspend-multiple-sessions" || | |
| action.id == "org.freedesktop.login1.hibernate" || | |
| action.id == "org.freedesktop.login1.hibernate-multiple-sessions") | |
| { | |
| return polkit.Result.NO; | |
| } | |
| }); | |
| 12. Reflector (actualizador de Mirrorlist) | |
| Reflector es un script que puede recuperar la última lista de servidores de réplicas desde la página MirrorStatus, filtrar la mayoría de los servidores de réplicas actualizados, ordénarlos por velocidad y sobrescribir el archivo /etc/pacman.d/mirrorlist. | |
| Por ejemplo: | |
| reflector --verbose --latest 5 --sort rate --save /etc/pacman.d/mirrorlist | |
| Despues podemos asociar esta tarea para que se repita periódicamente. Esto vale para diferentes tareas y se puede realizar en Arch de 3 maneras diferentes: | |
| Hook de pacman | |
| Puede crear un hook de pacman que ejecute reflector y elimine el archivo .pacnew creado cada vez que pacman-mirrorlist obtenga una actualización: | |
| /etc/pacman.d/hooks/mirrorupgrade.hook | |
| [Trigger] | |
| Operation = Upgrade | |
| Type = Package | |
| Target = pacman-mirrorlist | |
| [Action] | |
| Description = Actualizar pacman-mirrorlist con reflector y eliminar pacnew... | |
| When = PostTransaction | |
| Depends = reflector | |
| Exec = /bin/sh -c "reflector --country 'United States' --latest 200 --age 24 --sort rate --save /etc/pacman.d/mirrorlist; rm -f /etc/pacman.d/mirrorlist.pacnew" | |
| Asegúrese de sustituir los argumentos de reflector con los que desee. | |
| Servicio systemd | |
| Este es un ejemplo de unidad de servicio (de systemd) que espera a que la red esté activa y conectada antes de ejecutar reflector: | |
| /etc/systemd/system/reflector.service | |
| [Unit] | |
| Description=Actualizar la lista de servidores de réplica de pacman | |
| Wants=network-online.target | |
| After=network-online.target | |
| [Service] | |
| Type=oneshot | |
| ExecStart=/usr/bin/reflector --protocol https --latest 30 --number 20 --sort rate --save /etc/pacman.d/mirrorlist | |
| [Install] | |
| RequiredBy=multi-user.target | |
| Inicie reflector.service para actualizar la lista de servidores de réplica. Para actualizar la lista de servidores de réplica cada vez que arranque el equipo, active el servicio. | |
| Nota: para obtener más información sobre la implementación de la dependencia de la conexión de red, consulte Systemd#Running services after the network is up. | |
| Temporizador de systemd | |
| Si desea ejecutar reflector.service semanalmente, cree un archivo .timer asociado. Por ejemplo:: | |
| /etc/systemd/system/reflector.timer | |
| [Unit] | |
| Description=Ejecutar reflector semanalmente | |
| [Timer] | |
| OnCalendar=Mon *-*-* 7:00:00 | |
| RandomizedDelaySec=15h | |
| Persistent=true | |
| [Install] | |
| WantedBy=timers.target | |
| Y luego solo tiene que iniciar reflector.timer. | |
| Tarea de cron | |
| Para actualizar la lista servidores de réplica diariamente, considere lo siguiente: | |
| /etc/cron.daily/mirrorlist | |
| #!/bin/bash | |
| # Obtener los del país | |
| /usr/bin/reflector -c "India" -p http --sort rate > /etc/pacman.d/mirrorlist | |
| # Trabajar con otras alternativas | |
| /usr/bin/reflector -p http --latest 20 -p https -p ftp --sort rate >> /etc/pacman.d/mirrorlist | |
| 13. Instalar Yay (helper de repositorio AUR) | |
| Para instalar Yay: | |
| sudo pacman -S --needed base-devel git wget yajl {Instalar helper yay} | |
| cd /tmp | |
| git clone https://aur.archlinux.org/yay.git | |
| cd yay | |
| makepkg -si | |
| yay es un ayudante de AUR escrito en el lenguaje Go. Este ayudante nos ofrece una interfaz muy mínima, una búsqueda similar a Yaourt y sobre todo no requiere dependencias para su funcionamiento. | |
| Los comandos básicos de uso son, por ejemplo para buscar un paquete o aplicacion: | |
| yay -Ss <package-name> | |
| Para instalar una aplicación usando yay: | |
| yay -S <package-name> | |
| Si quieren realizar una actualización del sistema | |
| yay -Syu | |
| Actualizar el sistema, incluyendo los paquetes instalados de AUR. | |
| yay -Syua | |
| Podemos instalar algún gestor de paquetes grafico para buscar e instalar paquetes tanto oficiales como de repositorios AUR como por ejemplo Pamac u Octopi | |
| 14. Solucionar posible problema en Discover (no aparecen aplicaciones) | |
| sudo pacman -Qi discover | |
| sudo pacman -S packagekit-qt5 fwupd | |
| sudo pacman -S appstream |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment