Introduction
Community Radio dispose d’un clip pour son programme du soir, mais le petit disque média est plein. Un responsable a déjà supprimé le nom du gros journal d’accès. La radio sert toujours son archive, mais l’espace n’est pas revenu. Supprimer des enregistrements précieux ne traiterait pas la bonne cause.
Vous trouverez le fichier encore détenu par Nginx, utiliserez son signal documenté de réouverture, puis sauvegarderez et lirez le clip entier pendant que les services d’origine fonctionnent. Seules les bases du terminal sont supposées. Aucun C, formatage ou paramétrage du stockage n’est nécessaire. L’audio de répétition est une voix anglaise synthétisée.
Utilisez Workstation pour les commandes et Radio Player pour écouter. Chaque laboratoire prépare son incident indépendant. Travaillez uniquement dans /home/labex/project/radio et ne signalez que le maître de la radio identifié ; les processus sans rapport appartiennent à la plateforme.
Récupérer l’espace sans arrêter la radio
Dans cette étape, vous relierez le système de fichiers plein à un fichier supprimé précis et récupérerez ses blocs tout en maintenant la radio active.
Écouter ce qui doit rester intact
Ouvrez Radio Player. Écoutez Archive recording, puis Incoming clip. L’archive est déjà sur le disque média ; le clip entrant attend ailleurs. Le troisième lecteur n’a pas encore d’enregistrement sauvegardé complet. Il s’agit de voix de répétition synthétiques, pas d’un microphone en direct ni d’un véritable entretien.
Dans Workstation, pwd affiche votre emplacement et ls les entrées du répertoire. Le terminal démarre dans le répertoire préparé ; au besoin, revenez avec cd :
cd /home/labex/project/radio
pwd
/home/labex/project/radio
ls
media/ est le disque isolé. incoming/ se trouve sur le système de fichiers ordinaire de l’instance. services/ contient les configurations des deux Nginx du cours et leurs fichiers PID maîtres. media.ext4 est le fichier support de taille fixe préparé par LabEx ; gardez-le inchangé. Vous ne créerez pas de système de fichiers et ne modifierez pas les montages.
Confirmer l’échec et la limite
findmnt -T indique le système de fichiers contenant un chemin. La cible doit être exactement le répertoire media, la source un périphérique /dev/loop..., et le type ext4. La racine possède une source différente. Un périphérique loop présente l’image disque bornée du cours comme périphérique de blocs.
findmnt -T media -o TARGET,SOURCE,FSTYPE
findmnt -T incoming -o TARGET,SOURCE,FSTYPE
cp copie un fichier. La copie suivante doit volontairement échouer avec No space left on device. Elle peut laisser une destination incomplète. Ne l’exécutez pas avec sudo, inutile pour ces fichiers.
cp incoming/evening-recording.wav media/recordings/evening-recording.wav
C’est un véritable manque de capacité sur le petit système média. L’archive reste intacte. df -h affiche la capacité en blocs avec des unités lisibles. du -xsh totalise les blocs alloués accessibles par les noms sous un répertoire : -x reste sur ce système, -s résume et -h choisit des unités lisibles.
df -h media
du -xsh media
df indique une capacité presque entièrement occupée, alors que du voit peu de données. Ils mesurent des choses différentes. Cet écart seul n’identifie pas la cause : métadonnées, blocs réservés, permissions, autres vues de montage et d’autres facteurs peuvent intervenir.
Trouver le détenteur réel
Une entrée de répertoire associe un nom à un inode, l’enregistrement du fichier dans le système. Le nombre de liens physiques indique combien de noms pointent vers cet inode. Un processus peut aussi détenir un descripteur de fichier ouvert, référence numérotée au fichier. Supprimer le dernier nom ramène le nombre de liens à zéro ; les blocs demeurent jusqu’à la fermeture de la dernière référence ouverte.
lsof liste les fichiers ouverts. Cette inspection en lecture seule utilise sudo, car Nginx possède un maître root. -nP évite les résolutions de noms d’hôtes et de ports, +L1 sélectionne moins d’un lien, +f -- media choisit le système contenant media, et -a réalise l’intersection. Conservez ce filtre : une liste globale peut inclure des fichiers mémoire supprimés et des processus de plateforme sans rapport.
sudo lsof -nP -a +L1 +f -- /home/labex/project/radio/media
Attendez deux lignes Nginx pour media/logs/access.log (deleted) : maître et worker. Lisez PID, FD, DEVICE, SIZE/OFF, NLINK et NODE. Elles partagent périphérique et inode, avec NLINK à zéro ; les tailles décrivent un seul fichier, ne les additionnez pas. Un FD tel que 4w désigne le descripteur 4 ouvert en écriture. Périphérique/inode identifient le fichier de ce système malgré la disparition de son nom.
cat affiche du texte. Lisez la configuration réelle et le fichier PID maître. Les chemins pid et access_log doivent correspondre à cette radio et au journal média supprimé :
cat services/studio/nginx.conf
cat services/studio/nginx.pid
MASTER est une variable du shell. $(...) capture la sortie, et les guillemets doubles gardent sa valeur dans un seul argument. ps affiche les processus ; -o choisit les colonnes, -p ce PID et --ppid ses enfants. Confirmez le maître des lignes lsof filtrées et le chemin de configuration du cours. L’autre ligne est un worker dont le PID parent est ce maître.
MASTER=$(cat services/studio/nginx.pid)
ps -ww -o pid,ppid,user,args -p "$MASTER" --ppid "$MASTER"
N’agissez pas si le montage, le chemin ou l’identité du maître diffèrent. Revérifiez répertoire et configuration, sans deviner un PID ni signaler tous les Nginx.
Demander à ce programme de rouvrir
La signification d’un signal dépend du programme. Nginx documente USR1 comme réouverture des journaux : il ferme les anciennes références et rouvre le nom configuré. TERM l’arrêterait ; HUP a une autre sémantique de rechargement. Lisez le manuel avec man nginx, trouvez SIGNALS, puis appuyez sur q. La documentation de contrôle de Nginx décrit le même contrat.
man nginx
kill peut envoyer un signal nommé et ne signifie pas toujours arrêter. sudo est nécessaire pour signaler ce maître root. Envoyez seulement le signal documenté au maître confirmé :
sudo kill -USR1 "$MASTER"
Observez à nouveau espace, détenteurs et maître. La réouverture est asynchrone ; si un détenteur apparaît encore brièvement, répétez ces observations en lecture seule après un instant.
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"
L’espace doit revenir, les lignes du journal média supprimé disparaître, et le PID maître rester identique. Un résultat lsof filtré vide est attendu. Vous n’avez ni arrêté la radio ni libéré un fichier d’un autre système.
curl -fsS lit une URL, échoue sur une erreur HTTP et affiche si nécessaire un message bref. Cette requête normale doit toujours fonctionner. tail -n 2 affiche ensuite les deux dernières lignes du nouveau journal nommé :
curl -fsS http://127.0.0.1:8080/on-air.txt
tail -n 2 media/logs/access.log
Attendez Community Radio: archive and live programme remain available. et une nouvelle entrée GET /on-air.txt. Le processus d’origine écrit désormais le nouveau journal. Si l’espace ne revient pas, revérifiez les détenteurs filtrés ; ne supprimez pas l’archive, ne tronquez pas les descripteurs, n’arrêtez pas les services et ne recréez pas le montage. Si le journal manque, vérifiez la configuration intacte et répétez la réouverture documentée pour le bon maître.
Sauvegarder et utiliser l’enregistrement complet
Dans cette étape, vous remplacerez la copie partielle ratée par le clip entrant entier, vérifierez ses octets et l’utiliserez via la radio active.
La source entrante et l’archive ont des rôles distincts. Préservez les deux. Relancer cp vers la même destination remplace la copie partielle sans modifier la source.
cp incoming/evening-recording.wav media/recordings/evening-recording.wav
cmp compare chaque octet et reste silencieux en cas d’égalité. Vérifiez juste après la copie :
cmp incoming/evening-recording.wav media/recordings/evening-recording.wav
sha256sum affiche une empreinte du contenu. Des hachages identiques donnent une autre comparaison visible ; l’évaluateur compare aussi archive et source aux octets préparés.
sha256sum incoming/evening-recording.wav media/recordings/evening-recording.wav
Les deux lignes doivent avoir le même hachage. Un fichier nul ou creux au nom ou à la taille plausible n’est pas un enregistrement. Une copie sur un mauvais système de fichiers laisse également la livraison incomplète.
findmnt -T media/recordings/evening-recording.wav -o TARGET,SOURCE,FSTYPE
Le fichier doit rester sur le même montage média ext4 isolé. Vérifiez que la radio sert réellement le fichier sauvegardé. -o demande à curl d’enregistrer la réponse hors du disque média ; comparez-la au clip entrant :
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
Revenez dans Radio Player et rechargez. Lancez Your saved recording, avancez près de la fin et écoutez la dernière phrase. Relisez Archive recording. Téléchargez le résultat avec Download saved recording. Suivez Read the on-air message : le message doit toujours apparaître. Le navigateur exige une action de lecture ; sauvegarder des octets ne lance pas l’audio.
Si le lecteur signale un problème de format ou de réseau, comparez source et destination et contrôlez l’URL. Une tentative sur disque plein peut laisser un en-tête WAV ou des données tronqués ; après récupération, recopiez la source intacte. En cas d’écart, ne réparez pas l’en-tête et ne modifiez pas la source pour l’adapter à la destination endommagée.
df -h media
Le système doit maintenant disposer d’espace et du clip complet. Les contrôles lisent seulement les fichiers finaux, l’identité du montage, les descripteurs et l’état réel des services. Ils n’envoient aucun signal, ne copient pas l’audio, ne réparent rien et ne créent pas l’enregistrement à votre place.
Résumé
Vous avez récupéré une capacité disque réelle en distinguant noms, inodes et descripteurs ouverts. L’enquête filtrée par système de fichiers a relié le journal supprimé au bon maître Nginx ; son signal documenté USR1 a libéré les anciennes références sans remplacer le processus. Vous avez ensuite sauvegardé, comparé, téléchargé et lu le clip complet en préservant l’archive et les services.
Un écart df/du est un indice, pas un diagnostic. La réouverture dépend du programme : consultez sa documentation avant tout signal. Cet exercice utilise un disque ext4 isolé et des voix synthétiques, sans enseigner formatage, arrêt arbitraire ou politique complète de rotation.



