O comportamento que você descreve pode ser causado por aplicativos que mantêm arquivos abertos mesmo depois de serem excluídos. Se um aplicativo tiver um arquivo aberto (por exemplo, tail
) e outro aplicativo aparecer e excluir o arquivo (por exemplo, rm
), o primeiro aplicativo continuará mantendo uma referência ao arquivo até que o primeiro aplicativo feche o arquivo. Nesse ponto, o sistema de arquivos reconhecerá que o arquivo foi excluído e fechado e limpará as referências.
Aqui está uma explicação excessivamente simplista de como os arquivos e inodes estão relacionados. Um arquivo é essencialmente um registro em um sistema de arquivos que atribui um nome (ou nomes) a um inode específico. Arquivos abertos são realmente referenciados pelo inode. Quando você exclui um arquivo, na verdade, você está removendo o link entre o nome e o inode, mas um arquivo aberto também mantém um link entre o descritor de arquivo aberto e o inode também. Fechar o arquivo exclui o link entre o descritor de arquivo aberto e o inode. O inode não será recuperado pelo sistema de arquivos até que todos os links tenham sido excluídos.
Quando você observa o espaço livre informado pelo sistema de arquivos, ele informa o espaço associado a todos os inodes atualmente marcados como usados. Quando você examinar todos os diretórios e somar o espaço de arquivos usado por cada arquivo / diretório, poderá ser menor se os arquivos tiverem sido excluídos, mas ainda estiverem abertos. Sua varredura de diretório não verá o espaço usado pelos arquivos que tiveram seus links de nomes removidos.
Quando você desativa o sistema, não dá chance para que os aplicativos fechem seus arquivos. Sem essa chance, o sistema de arquivos não terá a chance de recuperar os inodes usados pelos descritores de arquivos abertos dos arquivos excluídos. Quando o sistema inicializa, o sistema de arquivos vê esses inodes sem nada que os aponte. Eles são chamados de "inodes órfãos" e o sistema de arquivos permite que você saiba que está excluindo a referência do arquivo.
Uma ferramenta que você pode usar para localizar processos com descritores de arquivos abertos é lsof
. Se você executar isso em um processo, ele mostrará todos os descritores de arquivos abertos desse processo. Os arquivos excluídos geralmente aparecem como (deleted)
, dependendo da versão.