Como posso criar um diretório / dev / null-blackhole?

73

Eu gostaria de criar um diretório " /dev/null " (ou um diretório "blackhole") de tal forma que quaisquer arquivos escritos nele não sejam realmente escritos, mas simplesmente desapareçam.

Eu tenho um aplicativo que grava grandes arquivos temporários em um diretório. Eu não tenho controle sobre o nome dos arquivos e realmente não me importo com o conteúdo desses arquivos. Eu poderia escrever um script que periodicamente abole esses arquivos, mas os arquivos são escritos muito rapidamente e preenchem meu disco. Eu estou procurando por algo mais inteligente. Eu quero que o aplicativo "pense" que está escrevendo esses arquivos, quando, na verdade, as gravações estão sendo descartadas do outro lado.

Veja também este tópico relacionado antigo .

    
por dogbane 16.03.2011 / 09:57

5 respostas

44

Isso não é compatível com todos os tipos de unix que eu conheço, mas você pode fazer praticamente qualquer coisa com o FUSE . Há pelo menos uma implementação de nullfs¹ , um sistema de arquivos no qual cada arquivo existe e se comporta como /dev/null (essa não é a única implementação Eu já vi).

Não deve ser confundido com o * BSD nullfs , que é análogo a bindfs .

    
por 16.03.2011 / 22:45
6

Outra abordagem seria um wrapper LD_PRELOAD; basicamente uma pequena biblioteca compartilhada que é carregada antes de libc.so e intercepta chamadas para "abrir" com algo que verifica o caminho do arquivo prospectivo e substitui "/ dev / null" se ele estivesse no diretório de destino.

Isso tem a vantagem de ser (a) totalmente no espaço do usuário - não é necessário hackear o kernel; e (b) afetando somente o aplicativo único errante.

Um exemplo simples está no link , mas, no seu caso, você desejará interceptar o campo "aberto" & chamadas de sistema "creat".

    
por 21.04.2013 / 03:29
1

Se o programa é tão estúpido para não permitir que você mude esses logs, pode ser que ele também não verifique erros após abrir um arquivo de log? Eu tentaria montar algum sistema de arquivos somente leitura simulado (por exemplo, usando mount -o loop .)

    
por 16.03.2011 / 10:56
1

Você diz que remover os arquivos periodicamente com um script não é rápido o suficiente. Você poderia viver com um gatilho que exclua um arquivo temporário sempre que seu aplicativo terminar de escrevê-lo e o feche? Em caso afirmativo, você pode usar a API "inotify".

(Veja link e link )

    
por 16.03.2011 / 21:17
-7

Basta vincular esse diretório a /dev/null

rm -rf ~/.logs
ln -s /dev/null ~/.logs

/dev/null , não precisa ser um diretório. Se o programa tentar gravar em ~/.logs/log1.dump , ele continuará em /dev/null .
Eu faço isso pelo cache do Google Chrome, porque depois de um tempo ele fica tão grande que o Chrome demora alguns minutos para começar.

    
por 16.03.2011 / 13:54