Após excluir muitos arquivos grandes, o espaço livre aumenta com um grande atraso

15

Ontem, excluí 71 GB de arquivos no meu servidor doméstico / de mídia.
Espaço livre antes: 117 GB
Espaço livre depois: 126 GB

Portanto, em vez de ter 71 GB de espaço livre adicional, eu tinha apenas 9 GB. Verifiquei duas vezes se nenhum arquivo estava aberto e realmente excluí 71 GB e o espaço livre aumentou apenas 9 GB.

Eu também tentei sincronizar, mas sem efeito.

Esta não é a primeira vez que isso acontece. Na verdade, eu vejo esse comportamento há anos, de vez em quando. Primeiro no ext3, agora no ext4.
Quando isso acontece, posso recuperar o espaço livre desmontando e remontando o sistema de arquivos. Nesses casos, a desmontagem leva até 2 minutos em vez de quase nenhum tempo.

Hoje em dia, não consigo desmontar e remontar facilmente o sistema de arquivos, pois ele está permanentemente ocupado com o meu software de gravador de vídeo, o servidor de nuvem própria da minha família e alguns outros serviços que eu não tinha até agora. E não quero me levantar às três horas da noite apenas para desmontar e remontar.

Não, o utilitário 'at' não funciona porque um dos serviços executa tarefas de longa execução não recuperáveis ​​e, portanto, precisa de uma verificação manual do estado para encontrar um bom momento em que pode ser desligado, ou seja, uma tarefa foi concluída.

Mas nesta manhã, notei que o espaço foi liberado da noite para o dia. Parece-me que houve algum tipo de limpeza, e isso pode ser a mesma coisa que leva mais tempo para desmontar.

Até o momento, só notei esse comportamento ao excluir uma grande quantidade de dados. Por outro lado, não tenho certeza se isso acontece regularmente e a diferença é pequena demais para notar.

O sistema de arquivos foi criado com 0% reservado para root ( mkfs -m 0). De acordo com fsck -f(eu sempre faço isso entre desmontar e remontar), o sistema de arquivos não está corrompido e, de acordo com o teste estendido do diagnóstico SMART, o hardware também está OK.

[EDITAR]

tune2fs 1.42 (29-Nov-2011)  
Filesystem volume name:   bigdata  
Last mounted on:          /bigdata  
Filesystem UUID:          6aebd17a-e064-41dc-9c68-c9a3acbe4f66  
Filesystem magic number:  0xEF53  
Filesystem revision #:    1 (dynamic)  
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize  
Filesystem flags:         signed_directory_hash   
Default mount options:    user_xattr acl  
Filesystem state:         clean  
Errors behavior:          Continue  
Filesystem OS type:       Linux  
Inode count:              121413632  
Block count:              485645568  
Reserved block count:     0  
Free blocks:              29081276  
Free inodes:              121382378  
First block:              0  
Block size:               4096  
Fragment size:            4096  
Reserved GDT blocks:      908  
Blocks per group:         32768  
Fragments per group:      32768  
Inodes per group:         8192  
Inode blocks per group:   512  
Flex block group size:    16  
Filesystem created:       Tue Dec 25 23:42:35 2012  
Last mount time:          Fri Jan  3 17:37:36 2014  
Last write time:          Fri Jan  3 17:37:36 2014  
Mount count:              37  
Maximum mount count:      -1  
Last checked:             Thu Apr 18 17:03:40 2013  
Check interval:           0 (<none>)  
Lifetime writes:          14 TB  
Reserved blocks uid:      0 (user root)  
Reserved blocks gid:      0 (group root)  
First inode:              11  
Inode size:           256  
Required extra isize:     28  
Desired extra isize:      28  
Journal inode:            8  
Default directory hash:   half_md4  
Directory Hash Seed:      be2b977e-5127-4843-9123-fe33b6d7b573  
Journal backup:           inode blocks  

[/EDITAR]

Então, aqui estão minhas 2 perguntas:

  1. O que esta acontecendo aqui? Por que o espaço é liberado em quantidade ou com atraso em vez de excluir imediatamente?
  2. Existe algo que eu possa fazer para desencadear a liberação do espaço agora mesmo sem desmontar e remontar?
Markus N.
fonte
Isso me cheira muito, pois os arquivos ainda estão abertos por alguma coisa. Como você está confirmando que nenhum dos arquivos está aberto após a exclusão? lsof | grep -i deletedgeralmente é a melhor maneira de verificar isso.
Garrett
2
Normalmente, você não pode desmontar um sistema de arquivos quando os arquivos estão abertos. Portanto, se umount for bem-sucedido, não haverá arquivos abertos. Exceto ontem, eu sempre fazia o mesmo ciclo de remontagem quando percebia isso.
Markus N.
Este é realmente o caso. Quais são as suas opções de montagem ext4?
21414 Garrett
noatime, padrões
Markus N.
Você tem algum tipo de sistema de backup em execução que pode estar mantendo cópias dos arquivos ou alternativamente vinculando-os?
derobert

Respostas:

9

Existem dois fatores que podem estar interagindo.

  • Ao contrário do Windows, você pode excluir arquivos que estão abertos. Se você excluir um filme que está sendo transmitido por streaming, ele será removido do diretório, mas continuará existindo como um arquivo até que o programa de streaming o feche. Quando o software de streaming o fechar, o espaço será liberado. O fuser -mcomando pode ser usado para encontrar a identificação do processo de qualquer processo com arquivos abertos. Alguns programas podem não fechar imediatamente os arquivos quando terminam com eles.

  • Ambos são sistemas de arquivos registrados no diário. As alterações são gravadas em um diário e, em seguida, confirmadas. Pode demorar um pouco para que as alterações sejam confirmadas. O sistema operacional geralmente armazena em cache as alterações do disco e apenas confirma as alterações no disco periodicamente. A execução do synccomando deve liberar quaisquer alterações pendentes no disco. A montagem do disco com a syncopção aumentará a velocidade do disco, mas trabalhará mais o disco.

BillThor
fonte
1
Sim, eu sei que posso excluir arquivos que estão abertos. Eu sei sobre as relações entre entradas de diretório e inodes. Mas tenho certeza de que os arquivos não estavam abertos, caso contrário não seria possível desmontar o sistema de arquivos ... Mas seu segundo item parece interessante. Pode realmente levar mais de 30 minutos para que os arquivos excluídos sejam confirmados? 30 minutos é o tempo entre excluir os arquivos e ir para a cama anteontem, então não sei dizer quanto tempo realmente levou.
Markus N.
1
@MarkusN. Alguns sistemas operacionais armazenam em cache muitos dados do sistema de arquivos. Se o espaço não for necessário, eles podem gravar dados de log de transações suficientes para garantir que o espaço seja liberado, mas gastam seu tempo liberando o espaço. Se você desmontar uma chave USB depois de gravar muitos dados, poderá levar muito tempo até que os dados sejam descarregados antes de removê-la. É uma troca entre gravar com segurança no disco e não atrasar outras ações.
BillThor
Obrigado pela edição. Mas, como você vê na minha pergunta original, eu já tentei sincronizar sem efeito.
Markus N.
1
@MarkusN. Não acho que a sincronização seja tão eficaz quanto antes. Provavelmente, apenas garante que os dados do diário sejam gravados, não necessariamente que todas as alterações sejam confirmadas. Desmontar / montar forçará o diário a ser aplicado. Não sei a prioridade de agendamento para exclusões, mas espero que seja relativamente baixa. Explorar o código pode responder a mais de suas perguntas.
BillThor
Parece-me razoável.
Markus N.