← Teoría P8 · UF0853 · Mantenimiento del sistema ✓ Guardado

Práctica 8 · Mantenimiento del sistema

UF: UF0853 · Sesión: 8 / 10 · Modalidad: individual
Entorno: VM Windows + VM Ubuntu
Entregable: este archivo con capturas y respuestas

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

  1. Win+I → Windows Update → Buscar actualizaciones.
  2. 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
PSWindowsUpdate (módulo avanzado, opcional)
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
Pega (Ctrl+V), arrastra una imagen o haz clic para seleccionar

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

  1. Ejecuta cleanmgr (Liberador de espacio).
  2. Elige C:. Apunta cuánto recuperarías.
  3. Pulsa «Limpiar archivos del sistema» (botón) → permite limpiar Windows.old, caché de actualizaciones, registros, etc. ¡Mucho más espacio!
  4. Marca todas las casillas excepto «Descargas» (puede tener cosas tuyas).
  5. Ejecuta la limpieza.

Storage Sense (moderno)

  1. Win+I → Sistema → Almacenamiento.
  2. Verás cuánto ocupa cada categoría (apps, archivos temporales, sistema y reservados...).
  3. Pincha en Archivos temporales → marca y elimina.
  4. Activa Sensor de almacenamiento: que limpie solo cada semana, papelera de 30 días, descargas no usadas en 60.
Pega (Ctrl+V), arrastra una imagen o haz clic para seleccionar

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
Pega (Ctrl+V), arrastra una imagen o haz clic para seleccionar

3 Comprobación de discos

Windows · chkdsk, sfc y DISM

HerramientaQué haceCuándo
chkdskComprueba sistema de archivos y sectoresDisco que falla, errores I/O
sfc /scannowRepara archivos del sistema (DLLs corruptas)Sistema con comportamiento raro
DISMRepara 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
Pega (Ctrl+V), arrastra una imagen o haz clic para seleccionar

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
En una VM los atributos SMART son simulados (el disco real es del anfitrión). Aun así, los comandos funcionan y verás los campos. En un equipo físico, los atributos clave son: Reallocated_Sector_Ct (5), Power_On_Hours (9), Current_Pending_Sector (197), Wear_Leveling_Count (177, en SSD). Si crecen, el disco está muriendo.
Pega (Ctrl+V), arrastra una imagen o haz clic para seleccionar

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»

  1. Win + escribe «Optimizar unidades» → Abrir.
  2. Mira la columna Tipo de medio: «Unidad de estado sólido» o «Unidad de disco duro».
  3. Selecciona C: → Analizar. Si es SSD pondrá «no se necesita optimización» o el porcentaje TRIM. Si es HDD, pondrá fragmentación %.
  4. 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
Pega (Ctrl+V), arrastra una imagen o haz clic para seleccionar

5 Tareas programadas (Windows)

Vas a crear una tarea que realmente se ejecuta y comprobarás el resultado.

Tarea 1 · Cleanup automático cada lunes
  1. taskschd.msc.
  2. Acción → Crear tarea (no «básica», nos da más opciones).
  3. Pestaña General: nombre Cleanup_Semanal. Marca «Ejecutar con privilegios más altos».
  4. Pestaña Desencadenadores: Nuevo → Semanalmente → Lunes 22:00.
  5. Pestaña Acciones: Nuevo → Iniciar programa → cleanmgr con argumentos /sagerun:1.
  6. Pestaña Condiciones: solo si está enchufado, despertar para ejecutar.
  7. Aceptar.
Tarea 2 · Tarea de prueba que SÍ verás funcionar
  1. Crear tarea básica → Prueba_Bloc.
  2. Cuando se desencadene → Una sola vez → fecha y hora 1 minuto en el futuro.
  3. Acción → Iniciar programa → notepad.exe.
  4. 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
Pega (Ctrl+V), arrastra una imagen o haz clic para seleccionar

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
Crea esta tarea de prueba
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
Pega (Ctrl+V), arrastra una imagen o haz clic para seleccionar

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

Escenario. Diseña un script de Linux que cada domingo a las 23:00 haga: actualizar paquetes, limpiar cachés, comprobar SMART de /dev/sda y guardar todo en un log con fecha. Después prográmalo con cron.
Paso 1 · Crear el script

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.sh
Paso 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_*.log
Paso 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).

Pega (Ctrl+V), arrastra una imagen o haz clic para seleccionar

✓ Autoevaluación final

Progreso0%