Liberar espaço retido por um log excluído e salvar a gravação

LinuxBeginner
Pratique Agora

Introdução

A Community Radio tem um clipe para o programa da noite, mas o pequeno disco de mídia está cheio. Um responsável já excluiu o nome do grande log de acesso. A estação ainda oferece o arquivo, mas o espaço não voltou. Excluir gravações valiosas resolveria o problema errado.

Você encontrará o arquivo ainda mantido pelo Nginx, usará o sinal documentado de reabertura e salvará e reproduzirá o clipe inteiro enquanto os serviços originais continuam ativos. Basta familiaridade básica com o terminal. Não é necessário C, formatação de dispositivos ou configuração de armazenamento. O áudio do ensaio usa voz sintetizada em inglês.

Use Workstation para comandos e Radio Player para ouvir. Cada laboratório tem seu próprio incidente preparado. Trabalhe apenas em /home/labex/project/radio e sinalize somente o master identificado da estação; processos sem relação pertencem à plataforma.

Recuperar espaço sem parar a estação

Nesta etapa, você ligará o sistema de arquivos cheio a um arquivo excluído específico e recuperará seus blocos mantendo a estação ativa.

Ouça o que precisa ser preservado

Abra Radio Player. Reproduza Archive recording e depois Incoming clip. O arquivo já está no disco de mídia; o clipe de entrada aguarda fora dele. O terceiro player ainda não tem uma gravação salva completa. São vozes de ensaio sintetizadas, não um microfone ao vivo nem uma entrevista real.

Em Workstation, pwd mostra sua localização e ls lista entradas do diretório. Você começa no diretório preparado da estação; se necessário, volte com cd:

cd /home/labex/project/radio
pwd
/home/labex/project/radio
ls

media/ é o disco isolado. incoming/ está no sistema de arquivos normal da instância. services/ contém configurações e arquivos PID master dos dois Nginx pertencentes ao curso. media.ext4 é o arquivo de suporte de tamanho fixo preparado pelo LabEx; não o altere. Você não criará sistemas de arquivos nem editará montagens.

Confirme a falha e o limite

findmnt -T mostra o sistema de arquivos de um caminho. O destino deve ser exatamente o diretório media, a origem um dispositivo /dev/loop... e o tipo ext4. O sistema raiz tem outra origem. O dispositivo loop apresenta a imagem limitada do curso como um dispositivo de blocos.

findmnt -T media -o TARGET,SOURCE,FSTYPE
findmnt -T incoming -o TARGET,SOURCE,FSTYPE

cp copia um arquivo. A cópia seguinte deve falhar intencionalmente com No space left on device e pode deixar um destino incompleto. Não use sudo: esses arquivos não precisam dele.

cp incoming/evening-recording.wav media/recordings/evening-recording.wav

É uma falha real de capacidade no pequeno sistema de mídia. O arquivo original permanece intacto. df -h informa capacidade em blocos com unidades legíveis. du -xsh soma blocos alocados alcançáveis por nomes sob um diretório: -x limita ao mesmo sistema, -s resume e -h usa unidades legíveis.

df -h media
du -xsh media

df mostra quase toda a capacidade ocupada, enquanto du encontra pouco. Eles medem coisas diferentes. A diferença sozinha não determina a causa: metadados, blocos reservados, permissões, outras visões de montagem e outros fatores também importam.

Encontre quem realmente mantém o arquivo aberto

Uma entrada de diretório associa um nome a um inode, o registro do arquivo no sistema. A contagem de links físicos indica quantos nomes apontam para esse inode. Um processo também pode manter um descritor de arquivo aberto, uma referência numerada. Remover o último nome zera a contagem, mas os blocos ficam até que a última referência aberta seja fechada.

lsof lista arquivos abertos. Usamos sudo nesta inspeção somente de leitura porque o master do Nginx é root. -nP evita consultas de nomes de hosts e portas, +L1 seleciona menos de um link, +f -- media escolhe o sistema que contém media, e -a faz a interseção. Mantenha o filtro: uma lista global pode incluir arquivos de memória excluídos e processos da plataforma sem relação.

sudo lsof -nP -a +L1 +f -- /home/labex/project/radio/media

Espere duas linhas Nginx para media/logs/access.log (deleted): master e worker. Leia PID, FD, DEVICE, SIZE/OFF, NLINK e NODE. Dispositivo e inode são iguais, com NLINK zero. Os tamanhos descrevem o mesmo arquivo, portanto não os some. Um FD como 4w é o descritor 4 aberto para escrita. Dispositivo/inode identificam o arquivo deste sistema mesmo sem o nome original.

cat exibe texto. Leia a configuração real e o arquivo PID master. Os caminhos pid e access_log devem corresponder a esta estação e ao log de mídia excluído:

cat services/studio/nginx.conf
cat services/studio/nginx.pid

MASTER é uma variável do shell. $(...) captura a saída e aspas duplas mantêm o valor em um argumento. ps mostra processos; -o escolhe colunas, -p seleciona o PID e --ppid também seus filhos. Confirme o master das linhas filtradas de lsof, com o caminho de configuração do curso. A outra linha é um worker cujo PID pai é esse master.

MASTER=$(cat services/studio/nginx.pid)
ps -ww -o pid,ppid,user,args -p "$MASTER" --ppid "$MASTER"

Não aja se montagem, caminho ou identidade do master forem diferentes. Confira diretório e configuração, sem adivinhar PID ou sinalizar todos os Nginx.

Peça a este programa que reabra

O significado de um sinal depende do programa. O Nginx documenta USR1 como reabrir arquivos de log: fecha referências antigas e abre novamente o nome configurado. TERM o interromperia, e HUP tem outra semântica de recarga. Leia o manual com man nginx, encontre SIGNALS e pressione q para voltar. A documentação de controle do Nginx apresenta o mesmo contrato.

man nginx

kill pode enviar um sinal por nome e nem sempre significa terminar. É necessário sudo para sinalizar o master root. Envie apenas o sinal documentado ao master confirmado:

sudo kill -USR1 "$MASTER"

Observe novamente espaço, detentores do arquivo e master. A reabertura é assíncrona; se um detentor ainda aparecer brevemente, repita essas observações de leitura após um 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"

O espaço deve retornar, as linhas do log de mídia excluído devem desaparecer e o PID master continuar igual. Um resultado filtrado vazio de lsof é esperado. Você não parou a estação nem liberou arquivo de outro sistema.

curl -fsS lê uma URL, falha em erros HTTP e exibe erro breve quando necessário. Esta solicitação normal precisa continuar funcionando. tail -n 2 mostra as últimas duas linhas do novo log com nome:

curl -fsS http://127.0.0.1:8080/on-air.txt
tail -n 2 media/logs/access.log

Espere Community Radio: archive and live programme remain available. e uma nova entrada GET /on-air.txt. O processo original agora escreve no novo log. Se não voltou espaço, examine novamente os detentores filtrados. Não exclua o arquivo, trunque descritores, pare serviços ou recrie a montagem. Se o novo log não existir, confira a configuração intacta e repita a reabertura documentada para o master correto.

Salvar e usar a gravação completa

Nesta etapa, você substituirá a cópia parcial malsucedida pelo clipe inteiro, verificará seus bytes e o usará pela estação ativa.

A fonte de entrada e o arquivo têm papéis diferentes. Preserve ambos. Repetir cp no mesmo destino substitui a cópia parcial sem modificar a fonte.

cp incoming/evening-recording.wav media/recordings/evening-recording.wav

cmp compara cada byte e fica silencioso quando os arquivos coincidem. Verifique logo após a cópia:

cmp incoming/evening-recording.wav media/recordings/evening-recording.wav

sha256sum imprime uma impressão digital do conteúdo. Hashes iguais oferecem outra comparação visível; a avaliação também compara arquivo e fonte originais aos bytes preparados.

sha256sum incoming/evening-recording.wav media/recordings/evening-recording.wav

As duas linhas precisam ter o mesmo hash. Um arquivo zerado ou esparso com nome ou tamanho plausível não é uma gravação. Uma cópia no sistema de arquivos errado também deixa a entrega de mídia incompleta.

findmnt -T media/recordings/evening-recording.wav -o TARGET,SOURCE,FSTYPE

O arquivo deve continuar na mesma montagem ext4 isolada. Confira se a estação serve o arquivo realmente salvo. -o manda curl salvar a resposta fora do disco de mídia; compare-a com o clipe de entrada:

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

Volte a Radio Player e recarregue. Reproduza Your saved recording, avance perto do fim e ouça a frase final. Reproduza Archive recording novamente. Baixe por Download saved recording. Siga Read the on-air message: a mensagem deve continuar disponível. O áudio do navegador exige ação de reprodução; salvar bytes não o inicia.

Se o player indicar erro de formato ou rede, compare fonte e destino e confira a URL. Uma tentativa com disco cheio pode truncar cabeçalho WAV ou dados. Após recuperar espaço, copie novamente a fonte intacta. Se a comparação falhar, não conserte cabeçalhos nem altere a fonte para combinar com o destino quebrado.

df -h media

Agora o sistema deve ter espaço suficiente e o clipe completo. As verificações apenas leem arquivos finais, identidade da montagem, descritores abertos e estado real dos serviços. Não enviam sinais, copiam áudio, corrigem arquivos ou criam a gravação por você.

Resumo

Você recuperou capacidade real distinguindo nomes, inodes e descritores abertos. A investigação filtrada por sistema de arquivos associou o log excluído ao master correto do Nginx; o sinal documentado USR1 liberou referências antigas sem substituir o processo. Depois, você salvou, comparou, baixou e reproduziu todo o clipe mantendo o arquivo e os serviços.

Uma diferença entre df/du é uma pista, não um diagnóstico. A reabertura depende do programa: consulte sua documentação antes de enviar sinais. O ensaio usa um disco ext4 isolado e vozes sintetizadas; não ensina formatação, término arbitrário de processos ou uma política completa de rotação.