#!/bin/bash
# lastact: arturo@2023-09-29
# desc: Creamos una partición en el segundo disco y lo formateamos
# 1) Disponen de un primer disco duro SDD (anteriormente era otro mecánico), donde está instalado el sistema: /dev/nvme0n1
# 2) Disponen de un segundo disco duro mécanico para datos (antes era sdb, al ser el primer disco también mecánico): /dev/sda

DESTINO="null"

#for DISCO in {sda,sdb}; do
for DISCO in "sda"; do
    (($(grep -c "${DISCO}[0-9]" /proc/partitions) == 0)) &&
        echo "=> El disco /dev/${DISCO} esta sin particionar" &&
        DESTINO="/dev/${DISCO}"
done

if [[ "${DESTINO}" == "null" ]]; then
    echo "=> Parece que no hay discos sin particionar ... comprobamos sin hay particiones sin montar ..."
    # Comprobamos si hay alguna partición de disco sin montar:
    if (($(lsblk --noheadings --raw -o NAME,MOUNTPOINT | awk '$1~/[[:digit:]]/ && $2 == ""' | wc -l) == 0)); then
        echo "=> No hay ningún disco sin particionar, ni partición por montar ... salimos!!" && exit 0
    fi
    # Escogemos la primera partición que encontremos sin montar:
    PARTICIONSINMONTAR="$(lsblk --noheadings --raw -o NAME,MOUNTPOINT | awk '$1~/[[:digit:]]/ && $2 == ""' | head -1)"
    PARTICIONROOT="$(lsblk --noheadings --raw -o MOUNTPOINT,NAME | tr -s " " ":" | grep "^/:" | cut -d":" -f2)"
    DISCOPARTICIONSINMONTAR="${PARTICIONSINMONTAR%%[[:digit:]]*}"
    NUMERODEPARTICIONSINMONTAR="${PARTICIONSINMONTAR##*[[:alpha:]]}"
    DISCOPARTICIONROOT="${PARTICIONROOT%%[[:digit:]]*}"
    echo "=> Hay particiones sin montar ... la primera es: /dev/${PARTICIONSINMONTAR}"
    echo "=> Vamos a comprobar si la podemos usar para crearla de nueva, formatearla y montarla"
    [[ "${DISCOPARTICIONSINMONTAR}" == "${DISCOPARTICIONROOT}" ]] &&
        echo "=> Es una partición del disco donde esta la partición Root / ... salimos" && exit 1
    [[ ! "${DISCOPARTICIONSINMONTAR}" =~ ^sda$|^sdb$ ]] &&
        echo "=> El disco sin particionar no es ni sda, ni sdb ... salimos" && exit 1
    # Eliminanamos la partición que está sin montar para crearla correctamente de nuevo:
    echo "=> Eliminamos la partición sin montar: /dev/${PARTICIONSINMONTAR}"
    echo "=> Disco: \"/dev/${DISCOPARTICIONSINMONTAR}\" NºPartición: \"${NUMERODEPARTICIONSINMONTAR}\""
    [[ -b "/dev/${PARTICIONSINMONTAR}" ]] &&
        parted -s "/dev/${DISCOPARTICIONSINMONTAR}" rm "${NUMERODEPARTICIONSINMONTAR}"
    # Esperamos a que ya no aparezca:
    sleep 1
    CONT=1
    while [[ -b "/dev/${PARTICIONSINMONTAR}" ]] && ((CONT < 60)); do
        ((CONT++))
        echo "=> Esperamos ${CONT} a que se elimine la partición sin montar: /dev/${PARTICIONSINMONTAR}"
        sleep 1
    done
    ((CONT > 59)) &&
        echo "=> Problemas para eliminar la partición sin montar /dev/${PARTICIONSINMONTAR} ... salimos" && exit 1
    DESTINO="/dev/${DISCOPARTICIONSINMONTAR}"
fi

[ ! -d "/media/datos" ] && mkdir "/media/datos"

echo "=> Se va a crear una partición y formatear ${DESTINO} en ext4 ..." &&
    {
        parted -s "${DESTINO}" mklabel msdos mkpart primary ext4 0% 100%
        sleep 1
        CONT=1
        while [[ ! -b "${DESTINO}1" ]] && ((CONT < 60)); do
            ((CONT++))
            echo "=> Esperamos ${CONT}sg a que se cree la partición destino: ${DESTINO}1"
            sleep 1
        done
        ((CONT > 59)) &&
            echo "=> Problemas para crear la partición destino ${DESTINO}1 ... salimos" && exit 1
        [[ -b "${DESTINO}1" ]] &&
            echo "Se ha creado la partición en ${DESTINO}: ${DESTINO}1"
    } &&
    [[ -b "${DESTINO}1" ]] &&
    mkfs.ext4 -F "${DESTINO}1" -L "Datos" ||
    {
        echo "No se ha creado la partición ${DESTINO}1 ... salimos" && exit 1
    }

! mount | grep -Eq "^${DESTINO}1" &&
    {
        echo "=> No esta montado ${DESTINO}1 ... lo montamos en /media/datos"
        mount -t ext4 -o defaults,user,rw,exec,acl,usrquota,grpquota "${DESTINO}1" "/media/datos"
    } &&
    {
        echo "=> Concedemos permisos para que todos puedan escribir ..."
        chmod 777 "/media/datos"
    }

echo "Vamos a configurar /etc/fstab ..."
LINEA="${DESTINO}1 /media/datos ext4 user,rw,exec,acl,usrquota,grpquota,defaults 0 0"
! grep -Eq "^${DESTINO}1 /media/datos ext4" "/etc/fstab" &&
    {
        echo "=> No esta configurado el fstab todavía ... vamos a ello ..."
        echo "${LINEA}" | tee -a "/etc/fstab"
    } ||
    echo "=> Ya esta configurado el disco ${DESTINO}1 en fstab"
