Introducción
Community Radio tiene un clip para su programa nocturno, pero el pequeño disco multimedia está lleno. Ya se eliminó el nombre del gran registro de acceso. La emisora sigue ofreciendo su archivo, pero el espacio no ha vuelto. Borrar grabaciones valiosas resolvería el problema equivocado.
Encontrarás el archivo que Nginx mantiene abierto, usarás su señal documentada de reapertura y guardarás y reproducirás el clip entero mientras los servicios originales siguen funcionando. Solo se presupone familiaridad básica con el terminal. No necesitas C, formatear dispositivos ni configurar almacenamiento. El audio de este ensayo es una voz sintetizada en inglés.
Usa Workstation para comandos y Radio Player para escuchar. Cada laboratorio prepara su propio incidente. Trabaja solo en /home/labex/project/radio y señala únicamente al maestro identificado de la emisora; los procesos ajenos pertenecen a la plataforma.
Recuperar espacio sin detener la emisora
En este paso relacionarás un sistema de archivos lleno con un archivo eliminado concreto y recuperarás sus bloques manteniendo la emisora activa.
Escucha lo que debe conservarse
Abre Radio Player. Reproduce Archive recording y después Incoming clip. El archivo ya está en el disco multimedia; el clip entrante espera fuera. El tercer reproductor aún no tiene una grabación guardada completa. Son voces sintetizadas de ensayo, no un micrófono en directo ni una entrevista real.
En Workstation, pwd muestra tu ubicación y ls enumera entradas del directorio. Empieza en el directorio preparado de la emisora; si hace falta, vuelve con cd:
cd /home/labex/project/radio
pwd
/home/labex/project/radio
ls
media/ es el disco aislado. incoming/ está en el sistema de archivos normal de la instancia. services/ contiene las configuraciones de los dos Nginx del curso y sus archivos PID maestros. media.ext4 es el archivo de respaldo de tamaño fijo preparado por LabEx; no lo cambies. No crearás sistemas de archivos ni editarás montajes.
Confirma el fallo y el límite
findmnt -T muestra el sistema de archivos que contiene una ruta. El destino debe ser exactamente el directorio media, con origen en un dispositivo /dev/loop... y tipo ext4. El sistema raíz tiene otro origen. Un dispositivo loop presenta la imagen acotada del curso como dispositivo de bloques.
findmnt -T media -o TARGET,SOURCE,FSTYPE
findmnt -T incoming -o TARGET,SOURCE,FSTYPE
cp copia un archivo. Se espera expresamente que esta copia falle con No space left on device. Puede dejar un destino incompleto. No uses sudo: estos archivos no lo necesitan.
cp incoming/evening-recording.wav media/recordings/evening-recording.wav
Es un fallo real de capacidad del pequeño sistema multimedia. El archivo original permanece intacto. df -h muestra la capacidad de bloques con unidades legibles. du -xsh suma los bloques asignados accesibles mediante nombres bajo un directorio: -x limita al mismo sistema de archivos, -s resume y -h usa unidades legibles.
df -h media
du -xsh media
df muestra casi toda la capacidad ocupada, mientras du encuentra poco. Miden cosas diferentes. La diferencia por sí sola no identifica la causa: también influyen metadatos, bloques reservados, permisos, otras vistas de montaje y otros factores.
Encuentra al verdadero proceso que lo mantiene abierto
Una entrada de directorio relaciona un nombre con un inodo, el registro del archivo en el sistema de archivos. El número de enlaces duros indica cuántos nombres apuntan al inodo. Un proceso también puede mantener un descriptor de archivo abierto, una referencia numerada. Al quitar el último nombre, el número de enlaces baja a cero; los bloques permanecen hasta cerrar la última referencia abierta.
lsof enumera archivos abiertos. Usamos sudo para esta inspección de solo lectura porque Nginx tiene un maestro root. -nP evita resolver nombres de hosts y puertos, +L1 selecciona menos de un enlace, +f -- media selecciona el sistema que contiene media y -a combina las condiciones mediante intersección. Conserva este filtro: una lista global puede incluir archivos de memoria eliminados y procesos ajenos de la plataforma.
sudo lsof -nP -a +L1 +f -- /home/labex/project/radio/media
Espera dos filas Nginx para media/logs/access.log (deleted): maestro y trabajador. Lee PID, FD, DEVICE, SIZE/OFF, NLINK y NODE. Comparten dispositivo e inodo y tienen NLINK cero; describen el mismo archivo, así que no sumes sus tamaños. Un FD como 4w es el descriptor 4 abierto para escritura. Dispositivo/inodo identifican el archivo de este sistema aunque el nombre haya desaparecido.
cat muestra texto. Lee la configuración real y el archivo PID maestro. Las rutas pid y access_log deben corresponder a esta emisora y al registro multimedia eliminado:
cat services/studio/nginx.conf
cat services/studio/nginx.pid
MASTER es una variable de shell. $(...) captura la salida y las comillas dobles mantienen su valor como un argumento. ps muestra procesos; -o elige columnas, -p selecciona ese PID y --ppid también sus hijos. Confirma el maestro de las filas filtradas de lsof y la ruta de configuración del curso. La otra fila es un trabajador cuyo PID padre es este maestro.
MASTER=$(cat services/studio/nginx.pid)
ps -ww -o pid,ppid,user,args -p "$MASTER" --ppid "$MASTER"
No actúes si difieren el montaje, la ruta o la identidad del maestro. Revisa directorio y configuración; no adivines un PID ni señales a todos los Nginx.
Pide a este programa que reabra
El significado de una señal depende del programa. Nginx documenta USR1 como reabrir archivos de registro: cierra referencias antiguas y abre de nuevo el nombre configurado. TERM lo detendría y HUP tiene otra semántica de recarga. Lee el manual instalado con man nginx, busca SIGNALS y pulsa q para volver. La documentación de control de Nginx describe el mismo contrato.
man nginx
kill puede enviar una señal por nombre; no siempre significa terminar. Necesitas sudo para señalar al maestro root. Envía solo la señal documentada al maestro que acabas de confirmar:
sudo kill -USR1 "$MASTER"
Vuelve a observar espacio, procesos que mantienen el archivo y maestro. La reapertura es asíncrona; si aún aparece brevemente una referencia, repite estas observaciones de solo lectura tras un momento.
df -h media
sudo lsof -nP -a +L1 +f -- /home/labex/project/radio/media
ps -ww -o pid,ppid,user,args -p "$MASTER" --ppid "$MASTER"
El espacio debe volver, las filas del registro multimedia eliminado desaparecen y el PID maestro se conserva. Es normal que el lsof filtrado no muestre filas. No has detenido la emisora ni liberado un archivo de otro sistema.
curl -fsS lee una URL, falla ante errores HTTP y muestra un error breve cuando hace falta. La petición normal debe seguir funcionando. tail -n 2 muestra las últimas dos líneas del nuevo registro con nombre:
curl -fsS http://127.0.0.1:8080/on-air.txt
tail -n 2 media/logs/access.log
Espera Community Radio: archive and live programme remain available. y una nueva entrada GET /on-air.txt. El proceso original escribe ahora el nuevo registro. Si no volvió espacio, revisa los procesos filtrados; no borres el archivo, trunques descriptores, detengas servicios ni recrees el montaje. Si falta el registro nuevo, revisa la configuración intacta y repite la reapertura documentada del maestro correcto.
Guardar y utilizar la grabación completa
En este paso sustituirás la copia parcial fallida por el clip entrante completo, comprobarás sus bytes y lo usarás a través de la emisora activa.
La fuente entrante y el archivo cumplen funciones diferentes. Conserva ambos. Repetir cp al mismo destino reemplaza la copia parcial anterior sin modificar la fuente.
cp incoming/evening-recording.wav media/recordings/evening-recording.wav
cmp compara todos los bytes y no imprime nada si coinciden. Compruébalo justo después de copiar:
cmp incoming/evening-recording.wav media/recordings/evening-recording.wav
sha256sum imprime una huella del contenido. Los hashes iguales ofrecen otra comparación visible; el evaluador también compara el archivo original y la fuente con sus bytes preparados.
sha256sum incoming/evening-recording.wav media/recordings/evening-recording.wav
Ambas líneas deben tener el mismo hash. Un archivo lleno de ceros o disperso con nombre o tamaño plausible no es una grabación. Copiar al sistema de archivos equivocado también deja incompleta la entrega multimedia.
findmnt -T media/recordings/evening-recording.wav -o TARGET,SOURCE,FSTYPE
Debe seguir siendo el mismo montaje ext4 aislado. Comprueba que la emisora sirve el archivo guardado real. -o indica a curl que guarde la respuesta fuera del disco multimedia; compárala con el clip entrante:
curl -fsS http://127.0.0.1:8080/recordings/evening-recording.wav -o /tmp/radio-delivered.wav
cmp incoming/evening-recording.wav /tmp/radio-delivered.wav
Vuelve a Radio Player y recarga. Reproduce Your saved recording, avanza cerca del final y escucha la frase de cierre. Repite Archive recording. Descarga el resultado con Download saved recording. Sigue Read the on-air message; debe seguir mostrando el mensaje. El audio del navegador necesita una acción de reproducción: guardar bytes no lo inicia.
Si el reproductor informa de formato o red, compara fuente y destino y revisa la URL. Un intento con disco lleno puede dejar cabecera WAV o datos truncados; tras recuperar espacio, copia otra vez la fuente intacta. Si la comparación falla, no repares cabeceras ni cambies la fuente para que coincida con el destino roto.
df -h media
El sistema debe tener ahora espacio abundante y el clip completo guardado. Las comprobaciones solo leen archivos finales, identidad del montaje, descriptores abiertos y estado real de servicios. No envían señales, copian audio, reparan archivos ni crean la grabación por ti.
Resumen
Recuperaste capacidad real distinguiendo nombres, inodos y descriptores abiertos. La investigación filtrada por sistema de archivos relacionó el registro eliminado con el maestro correcto de Nginx; su señal documentada USR1 liberó las referencias antiguas sin sustituir el proceso. Después guardaste, comparaste, descargaste y reprodujiste el clip completo conservando el archivo y los servicios.
Una diferencia entre df/du es una pista, no un diagnóstico. La reapertura depende del programa: consulta su documentación antes de enviar señales. El ensayo usa un disco ext4 aislado y voces sintetizadas; no enseña formateo, terminación arbitraria ni una política completa de rotación.



