Files
omarchy_setup/format.sh

90 lines
2.6 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Módulo: Formateo de discos (FAT32 / exFAT / NTFS / ext4)
format_disk() {
log_step "Módulo: Formateo de discos (FAT32 / exFAT / NTFS / ext4)"
# Dependencias
local PKGS=(dosfstools exfatprogs ntfs-3g e2fsprogs)
local missing=()
for p in "${PKGS[@]}"; do
if ! pacman -Qi "$p" &>/dev/null; then
missing+=("$p")
fi
done
if [[ ${#missing[@]} -gt 0 ]]; then
log_info "Instalando dependencias: ${missing[*]}"
sudo pacman -Sy --needed --noconfirm "${missing[@]}" || {
log_error "No se pudieron instalar: ${missing[*]}"
return 1
}
fi
echo
lsblk -dpno NAME,SIZE,MODEL | sed '/loop/d' | nl -w2 -s'. '
echo
read -rp "Introduce el dispositivo a formatear (ej. /dev/sdb o /dev/sdb1): " DEVICE
if [[ ! -b "$DEVICE" ]]; then
log_error "Dispositivo no válido: $DEVICE"
return 1
fi
# Desmontar si está montado
local mp
mp=$(lsblk -no MOUNTPOINT "$DEVICE" | tr -d '[:space:]')
if [[ -n "$mp" ]]; then
log_warning "El dispositivo está montado en: $mp. Intentando desmontar..."
sudo umount "${DEVICE}"* || {
log_error "No se pudo desmontar $DEVICE"
return 1
}
fi
echo
echo "Tipos disponibles:"
echo " 1) FAT32"
echo " 2) exFAT"
echo " 3) NTFS"
echo " 4) ext4"
read -rp "Selecciona tipo [1-4]: " ft
case "$ft" in
1) FS="fat32"; CMD_BASE="sudo mkfs.fat -F32" ;;
2) FS="exfat"; CMD_BASE="sudo mkfs.exfat" ;;
3) FS="ntfs"; CMD_BASE="sudo mkfs.ntfs -f" ;;
4) FS="ext4"; CMD_BASE="sudo mkfs.ext4 -F" ;;
*) log_error "Opción inválida"; return 1 ;;
esac
read -rp "Etiqueta (opcional): " LABEL
echo
echo -e "ADVERTENCIA: Se eliminarán todos los datos en ${DEVICE}."
read -rp "Escribe 'SI' para confirmar: " confirm
if [[ "${confirm}" != "SI" ]]; then
log_info "Operación cancelada"
return 0
fi
# Añadir etiqueta si se proporcionó
if [[ -n "${LABEL}" ]]; then
case "$FS" in
fat32) CMD="${CMD_BASE} -n ${LABEL} ${DEVICE}" ;;
exfat) CMD="${CMD_BASE} -n ${LABEL} ${DEVICE}" ;;
ntfs) CMD="${CMD_BASE} -L ${LABEL} ${DEVICE}" ;;
ext4) CMD="${CMD_BASE} -L ${LABEL} ${DEVICE}" ;;
esac
else
CMD="${CMD_BASE} ${DEVICE}"
fi
log_info "Ejecutando: ${CMD}"
if eval "${CMD}"; then
log_success "Formateo completado: ${DEVICE}${FS}"
return 0
else
log_error "Fallo al formatear ${DEVICE}"
return 1
fi
}
export -f format_disk