Esta entrada iba a estar incluida dentro de los Mods del Servidor, pero decidí ampliarla e individualizarla. En mi caso Debian 10 esta instalado sobre un disco duro SSD, con sus respectivas ventajas pero también incovenientes.

Aprovechando la posibilidad de poder ampliar el Servidor con almacenamiento extra al disponer de bahías libres, decidí recuperar un HD de 320Gb para almacenamiento y backup. Tras haber formateado, montado y cableado el HD, vamos a proceder a configurarlo de forma permanente en el arranque del sistema. Para ello necesitamos saber como es identificado y que tipo de formato tiene:

sudo fdisk -l && sudo blkid

Adjunto información devuelta en mi caso:

pi@overclock:~$ sudo fdisk -l
Disco /dev/sda: 465,8 GiB, 500107862016 bytes, 976773168 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador del disco: 0xb19ld81os

Disposit.  Inicio  Comienzo     Final  Sectores Tamaño Id Tipo
/dev/sda1         943960062 976771071  32811010  15,7G  5 Extendida
/dev/sda2  *           2048 943958015 943955968 450,1G 83 Linux
/dev/sda5         943960064 976771071  32811008  15,7G 82 Linux swap / Solaris

Las entradas de la tabla de particiones no están en el orden del disco.


Disco /dev/sdb: 298,1 GiB, 320072933376 bytes, 625142448 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador del disco: 0x0xb19ld81os

Disposit.  Inicio Comienzo     Final  Sectores Tamaño Id Tipo
/dev/sdb1             2048 625141759 625139712 298,1G 83 Linux

pi@overclock:~$ sudo blkid
/dev/sda2: LABEL="Overclock" UUID="ea691ed1-9a94-47b3-8534-3e00c7f0922f" TYPE="ext4" PARTUUID="8764b210-02"
/dev/sda5: UUID="b64de4e0-eedf-4e31-aeeb-e460ef6ac57c" TYPE="swap" PARTUUID="8764b210-05"
/dev/sdb1: LABEL="rednas" UUID="2f42917d-7c1f-4b7f-bff0-963f19b9dcf5" TYPE="ext4" PARTUUID="4539b160-01"

Se observa que el SSD esta reconocido como /dev/sda (512Gb) y el HD como /dev/sdb (320Gb) con partición EXT4. Apuntamos los UUID con respecto a la partición para configurar el sistema.

Ahora toca preparar la carpeta donde se realizara el montado de la unidad en el arranque del sistema:

sudo mkdir -p /media/rednas

A continuación editamos el fichero fstab, que es el encargado de realizar el montado de unidades:

sudo nano /etc/fstab

Y agregariamos al final del fichero la información obtenida anteriormente, en mi caso (UUID + Punto montaje + Formato & Opciones):

UUID=2f42917d-7c1f-4b7f-bff0-963f19b9dcf5   /media/rednas ext4    defaults,relatime  0    0

TIP: El disco duro que se ha añadido esta formateado como EXT4, si estuviese formateado como FAT32 sustituiria en la linea de codigo ext4 por vfat y si estuviese formateado como NTFS cambiaria ext4 por ntfs.

Guardamos los cambios (Ctrl+O), salimos del editor de texto (Ctrl+X) y activamos los cambios:

sudo mount -a

Adjunto mi fichero fstab para contrastar configuración, cuidado si copias información con UUID + Punto montaje + Formato & Opciones:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sdc2 during installation
#
# SSD
UUID=ea691ed1-9a94-47b3-8534-3e00c7f0922f   /   ext4    noatime,nodelalloc,i_version,inode_readahead_blks=64,errors=remount-ro  0   1
# SWAP 
UUID=b64de4e0-eedf-4e31-aeeb-e460ef6ac57c   none    swap    sw  0   0
#
# Lector DVD
#/dev/sr0   /media/cdrom0   udf,iso9660 user,noauto 0   0
#
# NAS
UUID=2f42917d-7c1f-4b7f-bff0-963f19b9dcf5   /media/rednas   ext4    defaults,relatime  0    0

Para finalizar la configuración del montaje, le daremos permisos a nuestro usuario (pi)

sudo chmod 755 -R /media/rednas && sudo chown pi:pi -R /media/rednas

UNIDADES USB AUTOMATICAS

Cuando conectamos un pendrive a nuestro sistema, en TTY no se monta automaticamente y es posible solucionarlo gracias a un script contribución de Mikel Blackwell. Para ello creamos el siguiente script dandole permisos de ejecución:

sudo nano /usr/local/bin/usb-mount.sh && sudo chmod +x /usr/local/bin/usb-mount.sh

Y le agregamos el siguiente contenido:

#!/bin/bash

# This script is called from our systemd unit file to mount or unmount
# a USB drive.

usage()
{
    echo "Usage: $0 {add|remove} device_name (e.g. sdb1)"
    exit 1
}

if [[ $# -ne 2 ]]; then
    usage
fi

ACTION=$1
DEVBASE=$2
DEVICE="/dev/${DEVBASE}"

# See if this drive is already mounted, and if so where
MOUNT_POINT=$(/bin/mount | /bin/grep ${DEVICE} | /usr/bin/awk '{ print $3 }')

do_mount()
{
    if [[ -n ${MOUNT_POINT} ]]; then
        echo "Warning: ${DEVICE} is already mounted at ${MOUNT_POINT}"
        exit 1
    fi

    # Get info for this drive: $ID_FS_LABEL, $ID_FS_UUID, and $ID_FS_TYPE
    eval $(/sbin/blkid -o udev ${DEVICE})

    # Figure out a mount point to use
    LABEL=${ID_FS_LABEL}
    if [[ -z "${LABEL}" ]]; then
        LABEL=${DEVBASE}
    elif /bin/grep -q " /media/${LABEL} " /etc/mtab; then
        # Already in use, make a unique one
        LABEL+="-${DEVBASE}"
    fi
    MOUNT_POINT="/media/${LABEL}"

    echo "Mount point: ${MOUNT_POINT}"

    /bin/mkdir -p ${MOUNT_POINT}

    # Global mount options
    OPTS="rw,relatime"

    # File system type specific mount options
    if [[ ${ID_FS_TYPE} == "vfat" ]]; then
        OPTS+=",users,gid=100,umask=000,shortname=mixed,utf8=1,flush"
    fi

    if ! /bin/mount -o ${OPTS} ${DEVICE} ${MOUNT_POINT}; then
        echo "Error mounting ${DEVICE} (status = $?)"
        /bin/rmdir ${MOUNT_POINT}
        exit 1
    fi

    echo "**** Mounted ${DEVICE} at ${MOUNT_POINT} ****"
}

do_unmount()
{
    if [[ -z ${MOUNT_POINT} ]]; then
        echo "Warning: ${DEVICE} is not mounted"
    else
        /bin/umount -l ${DEVICE}
        echo "**** Unmounted ${DEVICE}"
    fi

    # Delete all empty dirs in /media that aren't being used as mount
    # points. This is kind of overkill, but if the drive was unmounted
    # prior to removal we no longer know its mount point, and we don't
    # want to leave it orphaned...
    for f in /media/* ; do
        if [[ -n $(/usr/bin/find "$f" -maxdepth 0 -type d -empty) ]]; then
            if ! /bin/grep -q " $f " /etc/mtab; then
                echo "**** Removing mount point $f"
                /bin/rmdir "$f"
            fi
        fi
    done
}

case "${ACTION}" in
    add)
        do_mount
        ;;
    remove)
        do_unmount
        ;;
    *)
        usage
        ;;
esac

Guardamos los cambios (Ctrl+O), salimos del editor de texto (Ctrl+X) y creamos el siguiente servicio:

sudo nano /etc/systemd/system/usb-mount@.service && sudo systemctl daemon-reload

Agregandole el siguiente contenido:

[Unit]
Description=Automontaje USB en %i
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/local/bin/usb-mount.sh add %i
ExecStop=/usr/local/bin/usb-mount.sh remove %i

Guardamos los cambios (Ctrl+O), salimos del editor de texto (Ctrl+X) y creamos la siguiente regla del sistema:

sudo nano /etc/udev/rules.d/99-local.rules && sudo udevadm control --reload-rules

Agregandole el siguiente contenido:

KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/bin/systemctl start usb-mount@%k.service"

KERNEL=="sd[a-z][0-9]", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="/bin/systemctl stop usb-mount@%k.service"

Y listo, cuando conectemos un dispositivo de almacenamiento externo USB, este se montara en la ruta /media con el nombre de la etiqueta USB. Ejemplo:

pi@overclock:~$ ls /media
cdrom  rednas lordusb

TIP

Recuerda que cuando configuramos el Servidor Multimedia, definiamos rutas de almacenamiento en el SSD y ahora podremos ampliarlas o cambiarlas al almacenamiento externo.

OPTIMIZAR SSD

Si contamos con más de 4GB de RAM, podemos hacer que la carpeta temporal del sistema no use el disco duro. Es la carpeta donde escriben muchas aplicaciones que estamos usando. Son datos que se borran al apagar el ordenador, con lo que no nos importa que se escriban en RAM. Para activarlo editamos nuevamente fstab:

sudo nano /etc/fstab

Y agregamos la siguiente sentencia al final del fichero:

# MODS SSD
tmpfs   /tmp   tmpfs  noatime,nodiratime,nodev,nosuid,mode=1777,defaults    0   0

Guardamos los cambios (Ctrl+O) y salimos del editor de texto (Ctrl+X). Adjunto como queda mi fichero fstab definitivo:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sdc2 during installation
#
# SSD
UUID=ea691ed1-9a94-47b3-8534-3e00c7f0922f   /   ext4    noatime,nodelalloc,i_version,inode_readahead_blks=64,errors=remount-ro  0   1
# SWAP 
UUID=b64de4e0-eedf-4e31-aeeb-e460ef6ac57c   none    swap    sw  0   0
#
# Lector DVD
#/dev/sr0   /media/cdrom0   udf,iso9660 user,noauto 0   0
#
# NAS
UUID=2f42917d-7c1f-4b7f-bff0-963f19b9dcf5   /media/rednas   ext4    defaults,relatime  0    0
#
# MODS SSD
tmpfs   /tmp    tmpfs   noatime,nodiratime,nodev,nosuid,mode=1777,defaults  0   0

La partición swap, como ya sabéis es una partición cuyo fin principal es su uso cuando la RAM está llena, pero la cual no está vacía aunque tengas la RAM a la mitad. Por ello es recomendable decirle al sistema que la use lo menos posible, sólo si es estrictamente necesario, editando:

sudo nano /etc/sysctl.conf

Y agregamos al final del fichero las siguientes ordenes:

#
# MODS
#
vm.swappiness=1
vm.vfs_cache_pressure=50
vm.dirty_writeback_centisecs=1500

Guardamos los cambios (Ctrl+O) y salimos del editor de texto (Ctrl+X). Y para terminar cuando borramos un fichero, el sistema operativo lo marca como espacio utilizable. Los discos SSD pueden encargarse de controlar dichos bloques de espacio y reagruparlos, con lo que a través de la controladora del disco, la gestión del espacio será más rápida. Para que la controladora se encargue, le solicitamos que analice el disco desde el sistema operativo con el comando fstrim.

Vamos a programar esta tarea, para que la realice a diario:

sudo nano /etc/cron.daily/fstrim

Y agregamos el siguiente contenido:

#!/bin/sh
/sbin/fstrim --all || true

Guardamos los cambios (Ctrl+O), salimos del editor de texto (Ctrl+X) y le damos permisos de ejecución:

sudo chmod +x /etc/cron.daily/fstrim

Solamente nos queda reiniciar el Servidor para activar las nuevas mejoras:

sudo reboot