Eu tenho tentado usar o rsnapshot para fazer backups, mas acho inutilizável. Embora ele consiga diferenciar um diretório (50 gb) e duplicá-lo (encadernar todos os arquivos) em alguns minutos, e eu posso cp o diretório inteiro em cerca de meia hora, leva mais de uma hora para excluí-lo. Mesmo usando diretamente rm -rfv
, acho que pode levar até meio segundo para rm um único arquivo, enquanto os comandos cp
e link
são concluídos instantaneamente.
Por que rm é tão lento? Existe alguma maneira mais rápida de remover recursivamente os hardlinks? Não faz sentido para mim que copiar um arquivo demore menos tempo do que removê-lo.
O sistema de arquivos no qual estou trabalhando é uma unidade de armazenamento externo, conectada via usb e digite fuseblk (o que eu acho que significa que é ntfs). Meu computador está executando o ubuntu linux.
Saída de cima:
Cpu(s): 3.0%us, 1.5%sy, 0.0%ni, 54.8%id, 40.6%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 8063700k total, 3602416k used, 4461284k free, 557604k buffers
fonte
fuseblk
não significa que a unidade é NTFS, significa apenas que é montada como um dispositivo de bloco FUSE. Isso pode ser quase tudo.Respostas:
Por fim, não importa o que você faça,
rm
ele deve ser executadounlink
em todos os arquivos que você deseja remover (mesmo que você chamerm -r
o diretório pai). Se houver muitos arquivos a serem removidos, isso pode levar um longo tempo.Existem dois processos particularmente demorados quando você executa
rm -r
:readdir
, Seguido por,unlink
.Encontrar todos os arquivos e, em seguida, percorrer todos os arquivos para removê-lo, pode levar muito, muito tempo.
Se você achar "inutilizável" porque torna o diretório inutilizável por algum tempo, considere mover o diretório pai antes de removê-lo. Isso liberará esse nome para o programa usar novamente, sem que isso seja inconveniente demais.
Supondo que o sistema de arquivos realmente seja NTFS (não está claro na sua pergunta), o NTFS geralmente é bastante lento ao excluir grandes faixas de arquivos. Você pode considerar usar um sistema de arquivos mais adequado para seus propósitos (os sistemas de arquivos ext mais recentes têm um desempenho de exclusão muito bom, se você não tiver outras necessidades específicas). O FUSE em si também não é particularmente rápido, em geral. Você pode considerar ver se consegue fazer isso de alguma forma que não use o FUSE.
fonte
Por que rm é tão lento? Eu não faço ideia. Mas eu sei uma maneira mais rápida:
Atualização: Esta resposta no Serverfault tem algumas explicações. Parece que o rsync está excluindo os arquivos em uma ordem específica que faz com que a árvore do sistema de arquivos permaneça equilibrada e nem sempre precise de reequilibrar. O rm excluirá os arquivos e causará muito reequilíbrio à medida que forem removidos. Há algumas informações sobre o reequilíbrio aqui .
fonte
rm -rf
?rsync
ainda tem que conterunlink()
todos os arquivostest/
, e é provavelmente isso que leva tempo.unlink(2)
no diretório (e lembrando-se de fazer umafsck
tarde) ...Bem, uma vez tive um problema semelhante ao seu. Eu descobri que o seu "wa" é alto, você poderia usar
para verificar se o seu utilitário de disco está alto, isso significa que seu disco está bastante ocupado. Verifique se outros processos estão gravando no disco continuamente.
Para simplificar, use
para verificar se b é alto ou r < b . Isso indica algo errado. Na sua situação, acho que o disco io é o motivo original.
fonte