From 6f66c6a882a619ffbe47cd98e75b6bb9e43e8500 Mon Sep 17 00:00:00 2001 From: Marco Gallegos Date: Fri, 14 Nov 2025 19:33:53 -0600 Subject: [PATCH] =?UTF-8?q?Implementaci=C3=B3n=20del=20m=C3=B3dulo=20de=20?= =?UTF-8?q?formateo=20de=20discos=20con=20soporte=20para=20FAT32,=20exFAT,?= =?UTF-8?q?=20NTFS=20y=20ext4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- format.sh | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 format.sh diff --git a/format.sh b/format.sh new file mode 100644 index 0000000..3b9d399 --- /dev/null +++ b/format.sh @@ -0,0 +1,90 @@ +#!/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 \ No newline at end of file