Existe uma maneira de rastrear o espaço em disco liberado por um processo?

1

Estou familiarizado com vários métodos de rastreamento de E / S de disco, como uma taxa (por exemplo, bytes / segundo) e cumulativamente (por exemplo, bytes) para operações de leitura e gravação, mas não sei (e não consigo encontrar ) qualquer meio de rastrear a quantidade de espaço em disco liberado por um processo. Eu suspeito que isso possa ter algo a ver com as complexidades de definir quando / como o espaço em disco é "liberado".

Por exemplo, rm file não sobrescreve o conteúdo do arquivo com alguma forma de "nada", mas limpa ponteiros e coisas do tipo. Em outras palavras, basicamente desaloca o espaço em disco associado a file . Mas há muitas outras maneiras de liberar espaço em disco. Para um file não vazio pré-existente, fazer echo '' >file limpar seu conteúdo. Links e arquivos rígidos que são abertos por vários processos potencialmente complicam ainda mais o uso do disco de rastreamento, pois a definição de quando / como o espaço é liberado tem algum grau de ambiguidade.

    
por TTT 08.01.2017 / 20:56

1 resposta

2

“Espaço em disco liberado por um processo” não é um conceito muito útil porque é muito confuso. Se o processo A remove um arquivo que ainda está aberto no processo B, você credita A para liberar o espaço quando ele remove o arquivo (que é quando o sistema se compromete a liberar o espaço em disco) ou B quando fecha o arquivo? o espaço é realmente liberado)? Se um arquivo tem dois hard links e dois processos cada um removem um ao mesmo tempo, é realmente significativo creditar o segundo para o espaço liberado e não o primeiro? Se um processo sobrescreve um segmento de um arquivo, isso conta como liberando os dados sobrescritos? (Sua resposta muda se o sistema de arquivos executa deduplicação?) Etc.

Você poderia escolher uma definição e instrumentar o código do kernel para rastreá-la, mas seria uma escolha um tanto arbitrária e teria utilidade prática limitada, e é por isso que ela não é um recurso comumente disponível. Cada recurso tem um custo: tempo de programação para implementá-lo, tempo de programador para mantê-lo mais tarde, risco de erros que ele introduz, memória e consumo de CPU…

Você provavelmente pode implementar isso (novamente, escolhendo uma definição específica) para cenários comuns usando recursos de depuração existentes, como o Systemtap no Linux.

    
por 09.01.2017 / 01:07