Thunderbird перегружает мой жесткий диск при выполнении больших операций, что делать?

Вы можете сделать это на Perl:

perl -pe 's/^(IMS00\|.*\|).*/$1Jan15/; s/^(IMS01\|.*\|).*/$1Feb15/;' file
0
24.09.2018, 05:13
1 ответ

Быстрый straceпоказывает, что Thunderbird использует вызовfsyncдля синхронизации своих локальных баз данных после каждой почтовой операции . Это заставляет систему записывать весь кэш записи. 1

Делая это, они делают Thunderbird более стабильным, потому что значительно снизится вероятность повреждения локальных баз данных из-за возможного сбоя системы (или краха Thunderbird ); однако они изнашивают жесткие диски пользователей и делают емкость всей системы менее оптимальной.

Аналогичное поведение можно наблюдать и во многих других программах, не только в мире открытого исходного кода. Например, ext4 записывает кеш записи каждые 5 секунд , что делает их собственный fs sub -оптимальным. Или база данных PostgreSQL также делает то же самое после каждой зафиксированной транзакции . Их можно легко отключить в обоих случаях, но я не смог найти то же самое для Thunderbird.

Мое исследование не показало возможности отключить эту функцию, и перекомпилировать Thunderbird только для этой маленькой функции было явно излишним. Вместо этого легко доступен простой способ запретить все fsyncвызовы Thunderbird , в то время как Thunderbird даже не знает, что происходит.

Тот же механизм работает достаточно хорошо и для других процессов, которым нравится перегружать жесткие диски для нулевых или незначительных результатов. Для обходного пути требуется компилятор C с пакетами разработки.

Хитрость заключается в том, чтобы перехватить вызовы fsync(), доступные для Thunderbird, с помощью макета, ничего не делая.

  1. Вставьте это в небольшой файл.c, например вnosync.c:
int fsync(int arg) {
  return 0;
}

int fdatasync(int arg) {
  return 0;
}
  1. Компилируем его в небольшую разделяемую библиотеку командой gcc -s -Os -Wall -shared -o nosync.so nosync.c.

  2. После этого должна быть вызвана команда ThunderbirdLD_PRELOAD=/path/to/nosync.so thunderbird

Ого! Жесткий диск больше не убивается.

Разумеется, это снимает дополнительную защиту с внутренних баз данных Firefox.Это может быть особенно опасно, только если у вас есть важные данные в вашей локальной учетной записи. Тем не менее, сегодня Firefox чаще всего хранит все в учетной записи IMAP, его локальные базы данных лишь по существу кэшируются. Таким образом, эта регулярка fsyncне требуется.

1Thunderbird — это многопоточный -процесс, поэтому небольшой скрипт для straceвсех его потоков (strace может следовать только одному pid ).

0
28.01.2020, 04:13

Теги

Похожие вопросы