De qué va. Vas a aplicar un protocolo completo de mantenimiento de un equipo: actualizaciones, limpieza de espacio, comprobación de discos, reparación de archivos del sistema, salud del disco con SMART y tareas programadas. Termina con una tarea programada que realmente se dispara y verás el resultado.
Por qué importa. Un PC sin mantenimiento muere antes y va más lento. En una empresa, mantener 50 PCs sin automatizar es imposible.
1 Actualizaciones del sistema
Windows Update
- Win+I → Windows Update → Buscar actualizaciones.
- Mientras corre, abre PowerShell admin y ejecuta:
Get-WindowsUpdateLog | Out-Null # prepara el log (puede tardar) # Historial: qué se ha instalado Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10 # Atajo histórico wmic qfe list brief /format:table
Install-Module PSWindowsUpdate -Force -Scope CurrentUser Import-Module PSWindowsUpdate Get-WindowsUpdate # lista de updates pendientes # Install-WindowsUpdate -AcceptAll -AutoReboot
apt en Ubuntu
sudo apt update # actualiza la lista de paquetes apt list --upgradable # qué se va a actualizar sudo apt upgrade -y # instala sudo apt full-upgrade -y # también puede añadir/quitar paquetes si hace falta sudo apt autoremove -y # elimina paquetes huérfanos sudo apt clean # vacía caché de .deb descargados # Logs ls /var/log/apt/ zcat /var/log/apt/history.log.*.gz | head -30 cat /var/log/apt/history.log | tail -50
Actualizaciones automáticas
# Verifica si unattended-upgrades está instalado (suele venir) dpkg -l | grep unattended # Configurar qué se actualiza solo sudo dpkg-reconfigure --priority=low unattended-upgrades # Ver qué hace y qué decide sudo unattended-upgrade --dry-run --debug 2>&1 | head -30
2 Liberar espacio en disco
Windows · Liberador clásico + Storage Sense
- Ejecuta cleanmgr (Liberador de espacio).
- Elige C:. Apunta cuánto recuperarías.
- Pulsa «Limpiar archivos del sistema» (botón) → permite limpiar Windows.old, caché de actualizaciones, registros, etc. ¡Mucho más espacio!
- Marca todas las casillas excepto «Descargas» (puede tener cosas tuyas).
- Ejecuta la limpieza.
Storage Sense (moderno)
- Win+I → Sistema → Almacenamiento.
- Verás cuánto ocupa cada categoría (apps, archivos temporales, sistema y reservados...).
- Pincha en Archivos temporales → marca y elimina.
- Activa Sensor de almacenamiento: que limpie solo cada semana, papelera de 30 días, descargas no usadas en 60.
WinDirStat-style desde PowerShell
# Top 20 archivos más grandes en C:
Get-ChildItem C:\ -Recurse -File -ErrorAction SilentlyContinue |
Sort-Object Length -Descending |
Select-Object -First 20 FullName, @{Name="GB"; Expression={[math]::Round($_.Length/1GB,2)}}
Linux
# Cuánto ocupa cada cosa en tu home du -sh ~/* | sort -hr | head # Versión interactiva (mejor) sudo apt install -y ncdu sudo ncdu / # Limpiar sudo apt autoremove -y sudo apt clean sudo journalctl --vacuum-time=7d # logs solo de los últimos 7 días sudo journalctl --disk-usage # cuánto ocupan los logs # Caché de snap (Ubuntu) snap list --all | awk '/disabled/{print $1, $3}' | while read name rev; do sudo snap remove "$name" --revision="$rev" done
3 Comprobación de discos
Windows · chkdsk, sfc y DISM
| Herramienta | Qué hace | Cuándo |
|---|---|---|
| chkdsk | Comprueba sistema de archivos y sectores | Disco que falla, errores I/O |
| sfc /scannow | Repara archivos del sistema (DLLs corruptas) | Sistema con comportamiento raro |
| DISM | Repara la imagen base del sistema (la fuente de sfc) | Antes de sfc si sfc no logra reparar |
REM Abre CMD elevado REM Solo lectura (no repara) chkdsk C: REM Repara errores lógicos chkdsk C: /F REM Te dice que no puede porque C: está en uso. Te pregunta si quieres REM programarlo para el próximo reinicio. Di que sí (Y). REM Buscar sectores defectuosos (lento) chkdsk D: /R REM en un disco no de sistema (usa la D: si la tienes de P3) REM SFC sfc /scannow REM DISM (debe ir antes de sfc si sfc no logra reparar) DISM /Online /Cleanup-Image /CheckHealth DISM /Online /Cleanup-Image /ScanHealth DISM /Online /Cleanup-Image /RestoreHealth
Linux · fsck y debsums
# fsck necesita la partición DESMONTADA o se hace al arranque # Forzar comprobación en el próximo arranque de / sudo touch /forcefsck # marcador clásico # o sudo tune2fs -c 1 /dev/sda1 # forzar fsck cada X montajes # En particiones extra (sdb1, sdb2 de la P3) sí podemos desmontarlas y comprobar sudo umount /mnt/datos_linux sudo fsck -f /dev/sdb1 sudo mount /mnt/datos_linux # Comprobar checksums de paquetes instalados (sfc-like) sudo apt install -y debsums sudo debsums -s # solo errores; sin salida = todo bien
SMART · salud del disco
# Windows (CrystalDiskInfo recomendado, o desde CMD) wmic diskdrive get model,status PowerShell: Get-PhysicalDisk | Select-Object FriendlyName, MediaType, HealthStatus # Linux (más informativo) sudo apt install -y smartmontools sudo smartctl -i /dev/sda # info del disco sudo smartctl -H /dev/sda # salud global sudo smartctl -A /dev/sda # todos los atributos SMART sudo smartctl -t short /dev/sda # test corto (2 min) sudo smartctl -l selftest /dev/sda # resultado del test
4 Desfragmentación vs TRIM
Lo más importante: nunca desfragmentes un SSD. Windows lo sabe y, si detecta SSD, ejecuta TRIM en lugar de desfragmentar. Esta sección es corta porque casi no hay nada que hacer salvo confirmar.
Windows · «Optimizar unidades»
- Win + escribe «Optimizar unidades» → Abrir.
- Mira la columna Tipo de medio: «Unidad de estado sólido» o «Unidad de disco duro».
- Selecciona C: → Analizar. Si es SSD pondrá «no se necesita optimización» o el porcentaje TRIM. Si es HDD, pondrá fragmentación %.
- Optimizar.
REM Desde CMD: forzar TRIM en C: defrag C: /L REM Para HDDs (no tu caso en VM) defrag C: /U /V
Linux · TRIM
# Comprobar si fstrim está habilitado (timer semanal por defecto en Ubuntu) systemctl status fstrim.timer # Ejecutar TRIM manualmente sudo fstrim -av
5 Tareas programadas (Windows)
Vas a crear una tarea que realmente se ejecuta y comprobarás el resultado.
- taskschd.msc.
- Acción → Crear tarea (no «básica», nos da más opciones).
- Pestaña General: nombre Cleanup_Semanal. Marca «Ejecutar con privilegios más altos».
- Pestaña Desencadenadores: Nuevo → Semanalmente → Lunes 22:00.
- Pestaña Acciones: Nuevo → Iniciar programa → cleanmgr con argumentos /sagerun:1.
- Pestaña Condiciones: solo si está enchufado, despertar para ejecutar.
- Aceptar.
- Crear tarea básica → Prueba_Bloc.
- Cuando se desencadene → Una sola vez → fecha y hora 1 minuto en el futuro.
- Acción → Iniciar programa → notepad.exe.
- Finalizar y espera ese minuto. Aparece el Bloc de notas.
Desde CMD · schtasks
REM Crear tarea diaria a las 03:00 que ejecute un script schtasks /Create /SC DAILY /ST 03:00 /TN "Cleanup_Diario" /TR "cleanmgr /sagerun:1" /RL HIGHEST REM Listar tareas schtasks /Query /FO TABLE | findstr Prueba REM Forzar ejecución ahora (para probar) schtasks /Run /TN "Prueba_Bloc" REM Borrar schtasks /Delete /TN "Prueba_Bloc" /F
6 Tareas programadas (Linux) · cron y systemd-timer
cron
# Editar tu crontab personal crontab -e # elige nano la primera vez
Sintaxis de una línea cron:
# m h dom mon dow comando # │ │ │ │ │ # │ │ │ │ └── día de la semana (0-6, 0=domingo) # │ │ │ └── mes (1-12) # │ │ └── día del mes (1-31) # │ └── hora (0-23) # └── minuto (0-59) # Cada minuto, escribe la fecha en un archivo * * * * * date >> /tmp/cron_test.log # Todos los días a las 03:00 0 3 * * * /home/usuario/backup.sh # Cada 15 minutos */15 * * * * /usr/local/bin/check.sh # Lunes a viernes a las 09:00 0 9 * * 1-5 /opt/scripts/diario.sh # Primer día de cada mes a las 02:30 30 2 1 * * /opt/scripts/mensual.sh
crontab -e # Añade: * * * * * echo "Cron OK $(date)" >> /tmp/cron_test.log # Guardar y salir. Espera 2 minutos. cat /tmp/cron_test.log # Verás 1-2 líneas. Limpia luego con: crontab -r o edita y borra
systemd-timer (alternativa moderna)
# Listar timers activos systemctl list-timers --all | head # Ver detalles de uno systemctl status fstrim.timer cat /lib/systemd/system/fstrim.timer
7 Reto final · Script de mantenimiento
Vamos a escribir el script en /usr/local/bin/mantenimiento.sh (la carpeta estándar para scripts propios del administrador). Usaremos un truco llamado here-document: el bloque cat <<'EOF' ... EOF envía todo el texto entre las dos «EOF» como entrada a tee, que lo guarda en el archivo destino. Las comillas en 'EOF' hacen que las variables como $(date) NO se expandan ahora, sino cuando se ejecute el script.
cat <<'EOF' | sudo tee /usr/local/bin/mantenimiento.sh #!/bin/bash # La línea anterior se llama "shebang" y le dice al SO que use bash # Construimos el nombre del archivo de log con la fecha actual LOG="/var/log/mantenimiento_$(date +%Y%m%d).log" # Las llaves { ... } agrupan varios comandos; al final, > LOG 2>&1 # redirige TODA la salida (stdout y errores 2>) al archivo de log { echo "=== MANTENIMIENTO $(date) ===" echo "--- apt update ---" apt update echo "--- apt upgrade ---" apt upgrade -y echo "--- apt autoremove ---" apt autoremove -y echo "--- apt clean ---" apt clean echo "--- SMART ---" smartctl -H /dev/sda echo "--- Espacio en disco ---" df -h / echo "=== FIN $(date) ===" } >> "$LOG" 2>&1 EOF # Dar permiso de ejecución al script (sin esto no se puede ejecutar) sudo chmod +x /usr/local/bin/mantenimiento.shPaso 2 · Probarlo manualmente
sudo /usr/local/bin/mantenimiento.sh # Tarda unos minutos. No muestra nada por pantalla porque # lo está escribiendo todo en el log. Cuando termine: cat /var/log/mantenimiento_*.logPaso 3 · Programarlo con cron
Lo añadimos al cron del usuario root (no a tu cron personal, porque el script necesita privilegios):
sudo crontab -e
Te abre el editor. Añade esta línea al final y guarda:
0 23 * * 0 /usr/local/bin/mantenimiento.sh
Recordatorio de la sintaxis cron: minuto, hora, día-del-mes, mes, día-de-la-semana. 0 23 * * 0 = a las 23:00 (minuto 0, hora 23) cualquier día del mes, cualquier mes, día de la semana 0 (= domingo).