Um rápido strace
mostra que o Thunderbird usa uma chamada fsync
para sincronizar seus bancos de dados locais após cada operação de email . Isso força o sistema a gravar todo o seu cache de gravação. 1
Fazendo isso, eles tornam o thunderbird mais estável, porque a probabilidade do dano dos bancos de dados locais diminuirá significativamente devido a uma possível falha do sistema (ou travamento do thunderbird); no entanto, eles usam os HDDs dos usuários e tornam a capacidade de todo o sistema menos otimizada.
Comportamento semelhante também pode ser visto em muitos outros softwares, não apenas no mundo opensource. Por exemplo, o ext4 grava o cache de gravação em cada 5 segundos , tornando seu próprio fs sub-ótimo. Ou o banco de dados PostgreSQL também faz o mesmo após cada transação confirmada . Estes podem ser facilmente desativados em ambos os casos, mas não consegui encontrar o mesmo para o Thunderbird. Minha pesquisa mostrou que não há como desativar esse recurso, e recompilar o thunderbird apenas por esse pequeno recurso foi claramente um exagero. Em vez disso, uma forma simples de proibir todas as chamadas fsync
do Thunderbird é facilmente disponível, enquanto o Thunderbird nem sabe o que está acontecendo.
O mesmo mecanismo funciona muito bem também para outros processos que gostam de sobrecarregar os hdds de zero a pequenos resultados. A solução alternativa requer um compilador C com os pacotes de desenvolvimento.
O truque é ligar as chamadas fsync()
disponíveis para o thunderbird com uma simulação, sem fazer nada.
- Insira isso em um pequeno arquivo .c, por exemplo, em
nosync.c
:
int fsync(int arg) {
return 0;
}
int fdatasync(int arg) {
return 0;
}
-
Nós compilamos em uma pequena biblioteca compartilhada com o comando
gcc -s -Os -Wall -shared -o nosync.so nosync.c
. -
Depois disso, o thunderbird deve ser chamado pelo comando
LD_PRELOAD=/path/to/nosync.so thunderbird
Uau! Não há mais mortes por HDD.
Claro, isso remove a proteção extra dos bancos de dados internos do Firefox. Pode ser particularmente perigoso somente se você tiver dados importantes em sua conta local. No entanto, o Firefox mantém hoje mais tipicamente tudo em uma conta IMAP, seus bancos de dados locais são essencialmente apenas cache. Assim, este fsync
regular não é necessário.
1 O Thunderbird é um processo multi-threaded, portanto, um pequeno script para strace
de todos os seus threads (strace pode seguir apenas um único pid).