Eu li em uma postagem do stackoveflow que no Linux, quando excluímos um arquivo, ele não é realmente excluído, apenas o link da tabela de inode é removido para esse arquivo. Se for esse o caso, por que a exclusão não é uma operação de tempo constante?
Também fiz uma experiência: criei uma pasta com 1500 imagens e criei um objeto tar dessas imagens. O diretório e o arquivo tar são do mesmo tamanho. Os tempos para exclusão do objeto tar e do diretório de 1.500 imagens são os seguintes
Excluindo arquivo tar time rm test.tar
:
real 0m0.024s
user 0m0.001s
sys 0m0.024s
Excluindo diretório:time rm -r test
real 0m0.219s
user 0m0.024s
sys 0m0.191s
Pelo que entendi, essa diferença de tempo se deve à
desvinculação de 1 arquivo e à desvinculação de 1.500 arquivos. Mas a exclusão do objeto tar não deveria ser 1500x mais rápida?
Responder1
Porque énãouma operação simples de "marcar um único inode excluído":https://www.slashroot.in/how-does-file-deletion-work-linux
Pelo menos na exclusão de arquivos ext4 é muito mais rápida do que em partições ext2/ext3 devido ao uso de extensões.
No caso de SSDs, a exclusão do arquivo pode ser mais lenta do que o necessário devido ao uso da opção "descartar", que informa ao seu SSD para descartar fisicamente todos os blocos pertencentes a um arquivo para prolongar a vida útil do seu SSD. É altamentenãoaconselhável desativá-lo.