Práctica 5 — Almacenamiento y LVM
Paso 0 — Añadir un segundo disco a la VM (si no está hecho)
Sección titulada “Paso 0 — Añadir un segundo disco a la VM (si no está hecho)"Haz esto con la VM apagada:
- En VirtualBox, selecciona tu VM y abre Configuración → Almacenamiento
- Haz clic en el icono del disco con un + junto al controlador SATA
- Selecciona Crear un nuevo disco → VDI → Reservado dinámicamente → 10 GB
- Haz clic en Finalizar y luego en OK
- Arranca la VM
Verifica que el disco aparece en el sistema:
lsblkDeberías ver /dev/sda (disco del sistema) y /dev/sdb (disco nuevo, vacío, sin particiones). Si ves /dev/vdb en lugar de sdb, úsalo en su lugar durante toda la práctica.
Setup — ejecutar una sola vez
Sección titulada “Setup — ejecutar una sola vez"mkdir -p ~/practica5/{work,entrega}sudo apt update && sudo apt install -y lvm2 quotamkdir -p ~/practica5/{work,entrega}sudo dnf install -y lvm2 quotamkdir -p ~/practica5/{work,entrega}sudo pacman -S lvm2 quota-toolsTodo lo que se pida “guardar” debe ir dentro de ~/practica5/entrega/.
Ejercicio 5.1 — Inventario de discos y particionado
Sección titulada “Ejercicio 5.1 — Inventario de discos y particionado"Contexto
Sección titulada “Contexto"Nunca operes un disco a ciegas. Un sysadmin LFCS empieza siempre haciendo un inventario completo antes de tocar nada. Aquí aprenderás a leer el mapa de discos y a crear particiones con las dos herramientas del examen: fdisk (interactiva) y parted (scriptable).
- Audita el estado inicial de los discos antes de modificar nada:
lsblklsblk -fsudo fdisk -l | head -40Guarda la salida en ~/practica5/entrega/51_inventario_previo.txt. Identifica con comentarios #:
- Qué dispositivo es el disco del sistema y cuántas particiones tiene
- Qué dispositivo es el disco nuevo y si tiene o no tabla de particiones
- Examina la tabla de particiones del disco nuevo sin modificarla:
sudo fdisk -l /dev/sdbsudo parted /dev/sdb print 2>/dev/null || echo "Sin tabla de particiones"Guarda en ~/practica5/entrega/51_disco_nuevo.txt. Explica con un comentario # la diferencia entre MBR y GPT.
- Crea una tabla GPT y dos particiones con
parted(herramienta scriptable, clave en LFCS):
# Asignar tabla de particiones GPTsudo parted /dev/sdb mklabel gpt
# Partición 1: 5 GB (para el ejercicio de LVM más adelante)sudo parted -a opt /dev/sdb mkpart primary 0% 50%
# Partición 2: el resto del disco (~5 GB, para el ejercicio de LUKS extra)sudo parted -a opt /dev/sdb mkpart primary 50% 100%
# Verificar el resultadolsblk /dev/sdbsudo parted /dev/sdb printGuarda el resultado en ~/practica5/entrega/51_particionado.txt.
- Crea una partición adicional con
fdiskpara practicar la herramienta interactiva. Elimina las dos particiones anteriores conpartedy recrea solo una confdisk:
# Borrar la tabla existentesudo parted /dev/sdb mklabel gpt
# Entrar a fdisk (interactivo)sudo fdisk /dev/sdbDentro de fdisk, sigue estos pasos:
n→ nueva particiónp→ primaria- Número
1, Enter, Enter (acepta valores por defecto para usar todo el disco) p→ imprime para verificarw→ escribe y sale
# Verifica el resultadolsblk /dev/sdbGuarda los comandos y la salida final de lsblk en ~/practica5/entrega/51_fdisk.txt. Añade un comentario # explicando por qué q en fdisk no destruye datos pero q en parted sí puede tener consecuencias.
Ejercicio 5.2 — Formateo, montaje y /etc/fstab
Sección titulada “Ejercicio 5.2 — Formateo, montaje y /etc/fstab"Contexto
Sección titulada “Contexto"Un disco particionado sigue siendo metal bruto. Para que Linux pueda guardar archivos necesita un sistema de archivos (filesystem). Aquí formatearás, montarás manualmente y harás el montaje permanente usando la tabla sagrada /etc/fstab — el error más frecuente en el examen LFCS.
- Formatea la partición
/dev/sdb1con ext4:
sudo mkfs.ext4 /dev/sdb1Observa la salida: incluye el número de inodos, el UUID del dispositivo y el tamaño de bloque. Guarda el comando y su salida en ~/practica5/entrega/52_formato.txt.
- Obtén el UUID del dispositivo (nunca uses
/dev/sdb1en fstab):
sudo blkid /dev/sdb1Copia el UUID. Lo necesitarás en el siguiente paso. Guarda la salida en el mismo fichero.
- Monta manualmente el dispositivo y prueba que funciona:
sudo mkdir -p /mnt/datossudo mount /dev/sdb1 /mnt/datos
# Verifica el montajedf -h /mnt/datosmount | grep sdb1
# Prueba de escrituraecho "prueba de escritura $(date)" | sudo tee /mnt/datos/test.txtcat /mnt/datos/test.txtGuarda la salida de df -h y mount | grep sdb1 en ~/practica5/entrega/52_montaje_manual.txt.
- Configura el montaje permanente en
/etc/fstab:
sudo nano /etc/fstabAñade al final (sustituye UUID-AQUI por el UUID real de tu partición):
UUID=UUID-AQUI /mnt/datos ext4 defaults,noatime 0 2- Prueba la entrada de fstab sin reiniciar — este paso es obligatorio en LFCS:
# Desmonta primerosudo umount /mnt/datos
# Monta todo lo que aparece en fstabsudo mount -a
# Si no hay errores, verifica que se montó correctamentedf -h /mnt/datoscat /mnt/datos/test.txt # el archivo debe seguir ahíGuarda los comandos y sus salidas en ~/practica5/entrega/52_fstab.txt. Incluye el contenido de la línea que añadiste con un comentario # explicando cada campo.
Ejercicio 5.3 — LVM completo: crear, usar y extender en caliente
Sección titulada “Ejercicio 5.3 — LVM completo: crear, usar y extender en caliente"Contexto
Sección titulada “Contexto"Las particiones clásicas son una trampa en producción: cuando se llenan no puedes ampliarlas sin parar el servidor. LVM añade una capa de abstracción que permite extender volúmenes mientras los servicios siguen corriendo. Aquí seguirás la tríada completa PV → VG → LV y extenderás un volumen en caliente.
Setup — preparar el disco para LVM
Sección titulada “Setup — preparar el disco para LVM"Si hiciste el ejercicio 5.1 y 5.2, el disco tiene una partición montada. Desmóntala primero:
sudo umount /mnt/datos 2>/dev/null || true
# Borra la tabla de particiones para empezar limpiosudo parted /dev/sdb mklabel gpt
# Verifica que el disco está vacíolsblk /dev/sdbTarea 1 — Physical Volume (PV)
Sección titulada “Tarea 1 — Physical Volume (PV)"# Inicializa el disco para LVMsudo pvcreate /dev/sdb
# Verifica el resultadosudo pvssudo pvdisplay /dev/sdbGuarda la salida de pvdisplay en ~/practica5/entrega/53_pv.txt. Identifica con un comentario # el campo “PE Size” (tamaño de Physical Extent, la unidad mínima de asignación LVM).
Tarea 2 — Volume Group (VG)
Sección titulada “Tarea 2 — Volume Group (VG)"# Crea la piscina de almacenamiento 'datos-vg'sudo vgcreate datos-vg /dev/sdb
# Verifica el resultadosudo vgssudo vgdisplay datos-vgGuarda la salida de vgdisplay en ~/practica5/entrega/53_vg.txt. Identifica con un comentario # cuánto espacio libre tiene el VG.
Tarea 3 — Logical Volumes (LV)
Sección titulada “Tarea 3 — Logical Volumes (LV)"Crea dos volúmenes lógicos para simular un entorno real:
# LV para aplicación: 4 GBsudo lvcreate -L 4G -n app-lv datos-vg
# LV para logs: 2 GBsudo lvcreate -L 2G -n logs-lv datos-vg
# Verifica los dos volúmenessudo lvssudo lvdisplay datos-vg/app-lvGuarda la salida de lvs en ~/practica5/entrega/53_lv.txt.
Tarea 4 — Formatear, montar y usar los LVs
Sección titulada “Tarea 4 — Formatear, montar y usar los LVs"# Formatea ambos LVssudo mkfs.ext4 /dev/datos-vg/app-lvsudo mkfs.ext4 /dev/datos-vg/logs-lv
# Crea puntos de montajesudo mkdir -p /srv/app /srv/logs
# Monta ambossudo mount /dev/datos-vg/app-lv /srv/appsudo mount /dev/datos-vg/logs-lv /srv/logs
# Verificadf -h /srv/app /srv/logs
# Prueba de escrituraecho "app en funcionamiento $(date)" | sudo tee /srv/app/estado.txtecho "log de prueba $(date)" | sudo tee /srv/logs/app.logGuarda la salida de df -h en ~/practica5/entrega/53_montaje_lv.txt.
Tarea 5 — Extender un LV en caliente (la magia negra de LVM)
Sección titulada “Tarea 5 — Extender un LV en caliente (la magia negra de LVM)"Simula que el volumen de logs se está llenando. Amplíalo de 2 GB a 3 GB sin desmontar:
# Comprueba el espacio libre en el VGsudo vgs
# Extiende el LV en +1Gsudo lvextend -L +1G /dev/datos-vg/logs-lv
# El LV creció, pero ext4 aún cree que mide 2 GB. Fuerza el recálculo:sudo resize2fs /dev/datos-vg/logs-lv
# Verifica que el filesystem ya ve los 3 GBdf -h /srv/logsGuarda los tres estados (antes de lvextend, después de lvextend, después de resize2fs) en ~/practica5/entrega/53_lvextend.txt. Añade un comentario # explicando por qué resize2fs es necesario aunque lvextend ya haya terminado.
Tarea 6 — Hacer los montajes permanentes con fstab
Sección titulada “Tarea 6 — Hacer los montajes permanentes con fstab"# Obtén los UUIDs de los LVssudo blkid /dev/datos-vg/app-lvsudo blkid /dev/datos-vg/logs-lvAñade las dos entradas a /etc/fstab (sustituye los UUIDs por los reales):
sudo nano /etc/fstabUUID=UUID-APP-LV /srv/app ext4 defaults 0 2UUID=UUID-LOGS-LV /srv/logs ext4 defaults 0 2Prueba la sintaxis:
sudo umount /srv/app /srv/logssudo mount -adf -h /srv/app /srv/logsGuarda el resultado en ~/practica5/entrega/53_fstab_lvm.txt.
Ejercicio 5.4 — Swap y ajuste de swappiness
Sección titulada “Ejercicio 5.4 — Swap y ajuste de swappiness"Contexto
Sección titulada “Contexto"El swap es la válvula de seguridad de la RAM: cuando la memoria física se agota, el kernel mueve páginas poco usadas al disco para evitar matar procesos. En este ejercicio crearás un fichero de swap (más flexible que una partición) y ajustarás vm.swappiness para optimizar el comportamiento en un servidor de base de datos.
- Audita el estado del swap actual:
swapon --showfree -hcat /proc/meminfo | grep -i swapGuarda en ~/practica5/entrega/54_swap_previo.txt. Identifica con un comentario # si ya hay swap activo y de qué tipo (partición o fichero).
- Crea un fichero de swap de 1 GB:
# Crea el fichero (fallocate es más rápido que dd)sudo fallocate -l 1G /swapfile
# Permisos correctos (solo root puede leer el swap — contiene RAM)sudo chmod 600 /swapfile
# Formatea como swapsudo mkswap /swapfile
# Activa el swapsudo swapon /swapfile
# Verificaswapon --showfree -hGuarda la salida de swapon --show y free -h en ~/practica5/entrega/54_swap_creado.txt.
- Haz el swap permanente en fstab:
sudo nano /etc/fstabAñade al final:
/swapfile none swap sw 0 0Verifica la sintaxis:
sudo mount -aswapon --showGuarda en ~/practica5/entrega/54_swap_fstab.txt.
- Ajusta
vm.swappinesspara un servidor de base de datos:
# Ver el valor actual (60 por defecto en Debian)sysctl vm.swappiness
# Cambiar temporalmente a 10 (estándar para servidores BD)sudo sysctl -w vm.swappiness=10
# Verificar el cambio en calientesysctl vm.swappinessHazlo permanente creando un fichero de configuración de sysctl:
echo "vm.swappiness = 10" | sudo tee /etc/sysctl.d/99-swappiness.confsudo sysctl --system
# Verifica que el valor persistesysctl vm.swappinessGuarda los comandos y salidas en ~/practica5/entrega/54_swappiness.txt. Explica con un comentario # por qué un servidor de base de datos prefiere vm.swappiness=10 en lugar del valor por defecto de 60.
- Prueba el swapoff y vuelve a activar:
# Desactiva el swap (mueve las páginas de vuelta a RAM)sudo swapoff /swapfileswapon --show
# Activa de nuevosudo swapon /swapfileswapon --showGuarda la salida en ~/practica5/entrega/54_swapoff.txt.
Ejercicio 5.5 — Cuotas de disco por usuario
Sección titulada “Ejercicio 5.5 — Cuotas de disco por usuario"Contexto
Sección titulada “Contexto"Sin cuotas, un usuario puede llenar el disco del servidor y derribar todos los servicios. Las cuotas permiten establecer límites soft (avisador con periodo de gracia) y hard (límite absoluto que el kernel nunca permite superar). Aquí configurarás cuotas sobre el volumen LVM /srv/app creado en el ejercicio anterior.
Setup — usuarios de prueba
Sección titulada “Setup — usuarios de prueba"# Crea usuarios de prueba (si no existen del módulo 3)id cuota_alice 2>/dev/null || sudo useradd -m -s /bin/bash cuota_aliceid cuota_bob 2>/dev/null || sudo useradd -m -s /bin/bash cuota_bobecho "cuota_alice:linux123" | sudo chpasswdecho "cuota_bob:linux123" | sudo chpasswd- Activa cuotas en el volumen
/srv/app:
Edita /etc/fstab y añade las opciones de cuota a la línea de /srv/app:
sudo nano /etc/fstabModifica la línea de /srv/app:
# Antes:UUID=UUID-APP-LV /srv/app ext4 defaults 0 2
# Después:UUID=UUID-APP-LV /srv/app ext4 defaults,usrquota,grpquota 0 2Remontar para aplicar las opciones:
sudo mount -o remount /srv/app
# Verifica que las opciones están activascat /proc/mounts | grep srv/appGuarda la salida en ~/practica5/entrega/55_cuotas_activadas.txt.
- Inicializa la base de datos de cuotas:
# Instala las herramientas si no estánsudo apt install -y quota
# Crea los ficheros de base de datossudo quotacheck -cugm /srv/app
# Activa el sistema de cuotassudo quotaon /srv/app
# Verifica que está activosudo quotaon -p /srv/appGuarda la salida en ~/practica5/entrega/55_quotaon.txt.
- Asigna cuotas a
cuota_alice:
sudo edquota -u cuota_aliceEn el editor que se abre, modifica los campos soft y hard para bloques (1 MB = 1024 bloques):
# Establece: soft = 100 MB (102400 bloques), hard = 150 MB (153600 bloques)Filesystem blocks soft hard inodes soft hard/dev/... 0 102400 153600 0 0 0Guarda y sal. Verifica la cuota asignada:
sudo quota -u cuota_aliceGuarda la salida en ~/practica5/entrega/55_quota_alice.txt.
- Copia la misma cuota a
cuota_bobusando la plantilla:
sudo edquota -p cuota_alice cuota_bobsudo quota -u cuota_bobGuarda la salida en el mismo fichero.
- Prueba los límites en la práctica.
Crea archivos como cuota_alice hasta superar el límite soft (deberías ver un aviso) y luego hasta el límite hard (debe fallar):
# Crea un directorio de trabajo para alicesudo mkdir -p /srv/app/cuota_alicesudo chown cuota_alice:cuota_alice /srv/app/cuota_alice
# Escribe ~110 MB (supera el soft de 100 MB)sudo -u cuota_alice dd if=/dev/zero of=/srv/app/cuota_alice/fichero_grande.bin bs=1M count=110 2>&1 || true
# Verifica el estado de la cuotasudo quota -u cuota_aliceGuarda los comandos y salidas en ~/practica5/entrega/55_prueba_limite.txt. Documenta con comentarios #:
- Si el sistema emitió un aviso al superar el soft
- Si pudo superar el hard
- Genera un informe de cuotas del sistema:
sudo repquota /srv/appGuarda la salida en ~/practica5/entrega/55_repquota.txt. Identifica con comentarios # qué significa el símbolo -- y +- en la columna de estado de cada usuario.
📤 Bloque de entrega
Sección titulada “📤 Bloque de entrega"Guarda la verificación del estado antes de empaquetar:
{ echo "=== ENTREGA PRÁCTICA 5 ===" echo "" echo "--- 5.1: Mapa de discos ---" lsblk echo "" echo "--- 5.2: Montajes activos ---" df -h | grep -E "mnt|srv" echo "" echo "--- 5.3: Estado LVM ---" sudo pvs && sudo vgs && sudo lvs echo "" echo "--- 5.3: Tamaño real de /srv/logs tras lvextend ---" df -h /srv/logs echo "" echo "--- 5.4: Swap activo ---" swapon --show free -h | grep Swap echo "" echo "--- 5.4: vm.swappiness ---" sysctl vm.swappiness echo "" echo "--- 5.5: Cuotas activas ---" sudo repquota /srv/app echo "" echo "--- fstab (líneas añadidas) ---" grep -E "datos-vg|swapfile|srv" /etc/fstab} > ~/practica5/entrega/verificacion.txtPara empaquetar y enviar, sigue las instrucciones comunes: Cómo entregar las prácticas (usa N = 5).
🧨 Desafíos extra (MUY DIFÍCILES) — Almacenamiento avanzado
Sección titulada “🧨 Desafíos extra (MUY DIFÍCILES) — Almacenamiento avanzado"Estos ejercicios cubren técnicas de nivel empresarial. No son obligatorios pero son muy frecuentes en el examen LFCS real.
Reglas:
- Solo puedes usar comandos de terminal.
- No reinstales ni recreces desde cero sin entender el error.
- Todo el trabajo se documenta en
~/practica5/entrega/.
Ejercicio 5.6 ⚡ EXTRA — Volumen cifrado con LUKS
Sección titulada “Ejercicio 5.6 ⚡ EXTRA — Volumen cifrado con LUKS"Contexto
Sección titulada “Contexto"LUKS cifra el contenido completo de una partición. Aunque alguien extraiga el disco físicamente, sin la clave solo verá datos aleatorios. Aquí crearás un volumen LUKS, aprenderás a abrirlo y cerrarlo, y configurarás el descifrado automático al arranque.
sudo apt install -y cryptsetup
# Verifica que /dev/sdb2 existelsblk /dev/sdb# Si no existe sdb2, crea las particiones de nuevo:# sudo parted /dev/sdb mklabel gpt# sudo parted -a opt /dev/sdb mkpart primary 0% 50%# sudo parted -a opt /dev/sdb mkpart primary 50% 100%- Crea el volumen LUKS sobre
/dev/sdb2:
# Formatea la partición como LUKS (escribe YES en mayúsculas cuando lo pida)# Elige una passphrase que recuerdes (ej. "practica5luks")sudo cryptsetup luksFormat /dev/sdb2Verifica la cabecera LUKS:
sudo cryptsetup luksDump /dev/sdb2 | head -20Guarda la salida en ~/practica5/entrega/56_luks_header.txt.
- Abre el volumen, formatea y monta:
# Abre el volumen cifrado y lo expone como /dev/mapper/privadosudo cryptsetup luksOpen /dev/sdb2 privado
# Formatea el dispositivo descifradosudo mkfs.ext4 /dev/mapper/privado
# Monta y usasudo mkdir -p /mnt/privadosudo mount /dev/mapper/privado /mnt/privadoecho "dato confidencial $(date)" | sudo tee /mnt/privado/secreto.txtdf -h /mnt/privadoGuarda los comandos y la salida de df -h en ~/practica5/entrega/56_luks_montado.txt.
- Cierra el volumen y demuestra que los datos están cifrados:
# Desmonta y cierra el mappersudo umount /mnt/privadosudo cryptsetup luksClose privado
# Intenta leer la partición sin descifrar (debe ser ilegible)sudo strings /dev/sdb2 | head -5 || echo "contenido ilegible — cifrado correcto"
# Reabre para confirmar que los datos siguen ahísudo cryptsetup luksOpen /dev/sdb2 privadosudo mount /dev/mapper/privado /mnt/privadocat /mnt/privado/secreto.txtGuarda en ~/practica5/entrega/56_luks_verificacion.txt.
- Añade una segunda clave de acceso (key slot):
# Añade una nueva passphrase (necesitas la original para autorizar)sudo cryptsetup luksAddKey /dev/sdb2
# Verifica que hay dos slots activossudo cryptsetup luksDump /dev/sdb2 | grep "Key Slot"Guarda en ~/practica5/entrega/56_luks_slots.txt. Explica con un comentario # para qué sirve tener múltiples key slots en un entorno de equipo.
- Haz un backup de la cabecera LUKS (práctica obligatoria en producción):
sudo cryptsetup luksHeaderBackup /dev/sdb2 \ --header-backup-file ~/practica5/entrega/56_sdb2_luks_header.bak
ls -lh ~/practica5/entrega/56_sdb2_luks_header.bakExplica con un comentario # qué pasaría si la cabecera LUKS se corrompe y no tienes backup.
Ejercicio 5.7 ⚡ EXTRA — LVM con errores de fstab y montaje roto
Sección titulada “Ejercicio 5.7 ⚡ EXTRA — LVM con errores de fstab y montaje roto"Setup (ejecuta UNA sola vez)
Sección titulada “Setup (ejecuta UNA sola vez)"bash -lc 'set -euo pipefailbase="$HOME/practica5/work"mkdir -p "$base"
# Crea un VG y LV de prueba sobre un dispositivo loop (no necesita disco extra)sudo fallocate -l 500M /tmp/lvm_disco_prueba.imgLOOP=$(sudo losetup --find --show /tmp/lvm_disco_prueba.img)echo "Dispositivo loop: $LOOP" | tee "$base/loop_device.txt"
sudo pvcreate "$LOOP"sudo vgcreate practica-vg "$LOOP"sudo lvcreate -L 200M -n datos-lv practica-vgsudo lvcreate -L 100M -n config-lv practica-vg
sudo mkfs.ext4 /dev/practica-vg/datos-lv 2>/dev/nullsudo mkfs.ext4 /dev/practica-vg/config-lv 2>/dev/null
sudo mkdir -p /mnt/practica_datos /mnt/practica_configsudo mount /dev/practica-vg/datos-lv /mnt/practica_datossudo mount /dev/practica-vg/config-lv /mnt/practica_config
echo "datos de prueba OK" | sudo tee /mnt/practica_datos/archivo.txtecho "config de prueba OK" | sudo tee /mnt/practica_config/settings.conf
# Siembra error 1: UUID incorrecto en fstabUUID_REAL=$(sudo blkid -s UUID -o value /dev/practica-vg/datos-lv)UUID_FALSO="00000000-0000-0000-0000-000000000000"echo "UUID_REAL=$UUID_REAL" >> "$base/loop_device.txt"echo "UUID_FALSO=$UUID_FALSO" >> "$base/loop_device.txt"
# Siembra error 2: permisos del punto de montaje de config incorrectos (solo root puede entrar)sudo chmod 700 /mnt/practica_config
sudo umount /mnt/practica_datos /mnt/practica_config
echo "Escenario 5.7 creado"cat "$base/loop_device.txt"'Objetivo
Sección titulada “Objetivo"Desde tu terminal, debes conseguir que:
- El volumen
datos-lvse monte correctamente en/mnt/practica_datosy sea accesible sin errores - El volumen
config-lvse monte en/mnt/practica_configy sea escribible por usuarios normales del grupowebdevs(o cualquier grupo que elijas) - El contenido de los ficheros de prueba siga intacto tras los arreglos
Proceso de diagnóstico
Sección titulada “Proceso de diagnóstico"# Inspecciona el estado actual del VG/LVsudo vgssudo lvs
# Intenta montar ambos y observa qué fallasudo mount /dev/practica-vg/datos-lv /mnt/practica_datossudo mount /dev/practica-vg/config-lv /mnt/practica_config
# Prueba acceso como usuario normalls -la /mnt/practica_configEntregables
Sección titulada “Entregables"Guarda en ~/practica5/entrega/57_solucion.txt:
- Qué errores encontraste en cada volumen (causa exacta)
- Los comandos de corrección que ejecutaste (en orden)
- Evidencia de que el objetivo se cumple:
{ echo "=== VERIFICACIÓN 5.7 ===" echo "" echo "--- Montajes activos ---" df -h | grep practica echo "" echo "--- Contenido preservado ---" cat /mnt/practica_datos/archivo.txt cat /mnt/practica_config/settings.conf echo "" echo "--- Permisos corregidos ---" ls -la /mnt/practica_config} >> ~/practica5/entrega/57_solucion.txt