como zombar da exclusão de um arquivo? (linux)

4

Para executar alguns testes, preciso executar um aplicativo que excluirá um arquivo

Como é caro recriar esse arquivo (> 40 GBs) toda vez que eu precisar executar outro teste, quero zombar da exclusão desse arquivo.

Mas isso deve ser completamente transparente para o aplicativo excluí-lo. Isso significa que criar um symlink não é uma solução ok ([-L symlink] retorna 0 enquanto [-L file] retorna 1, então isso não seria completamente transparente para o aplicativo).

    
por Lem0n 23.03.2013 / 05:57

4 respostas

6

Existem várias soluções. dd como solução pode levar algum tempo, no entanto, usando buscar

dd of=mybigfile bs=1 count=0 seek=40G

é instantâneo. no entanto o espaço de 40g tomado pelo comando é não visto em df ...

Então, o melhor é provavelmente

fallocate -l 40g mybigfile

que cria instantaneamente mybigfile e o espaço é realmente reservado a partir do FS (e é visto em df )

- editar após comentário -

Que tal um link físico

cd data 
make 40g file "myfile"

depois para cada teste

cd ../test 
ln ../data/myfile testfile

command to unlink testfile
Os

dados e teste estão no mesmo FS (dirs diferentes para evitar erros, etc.).

O status do link físico é bastante transparente e provavelmente não será testado pelo aplicativo. A operação unlink irá remover o nome associado ao inode e então decrementará o contador de links no inode, e deve ser muito rápido (o arquivo e seus dados serão realmente liberados somente quando o contador inode desce para zero - o que não acontecerá a menos que você desvincule também data/myfile ).

    
por 23.03.2013 / 06:13
3

Use um sistema de arquivos que suporte instantâneos. ZFS e btrfs vêm à mente. Basta fazer um snap com o arquivo presente e restaurar esse instantâneo após cada teste.

Ambos os sistemas de arquivos capturam instantâneos de tal forma que a restauração deve ser muito rápida.

    
por 23.03.2013 / 06:02
3

Para coisas como essa, prefiro usar um truque LD_PRELOAD . Escreva uma pequena biblioteca C que copie unlink (e talvez stat64 se o teste também verificar a existência do arquivo) e pré-carregue-o. Teste em um arquivo menos importante:)

    
por 23.03.2013 / 11:02
1

Simples: crie um link físico para o arquivo a ser excluído, como ln original /some/where/safe . Vá em frente e assopre o arquivo, ele não será removido (apenas o link, que você pode recriar a qualquer momento).

    
por 23.03.2013 / 18:30

Tags