Вы можете сделать это на Perl:
perl -pe 's/^(IMS00\|.*\|).*/$1Jan15/; s/^(IMS01\|.*\|).*/$1Feb15/;' file
Быстрый strace
показывает, что Thunderbird использует вызовfsync
для синхронизации своих локальных баз данных после каждой почтовой операции . Это заставляет систему записывать весь кэш записи. 1
Делая это, они делают Thunderbird более стабильным, потому что значительно снизится вероятность повреждения локальных баз данных из-за возможного сбоя системы (или краха Thunderbird ); однако они изнашивают жесткие диски пользователей и делают емкость всей системы менее оптимальной.
Аналогичное поведение можно наблюдать и во многих других программах, не только в мире открытого исходного кода. Например, ext4 записывает кеш записи каждые 5 секунд , что делает их собственный fs sub -оптимальным. Или база данных PostgreSQL также делает то же самое после каждой зафиксированной транзакции . Их можно легко отключить в обоих случаях, но я не смог найти то же самое для Thunderbird.
Мое исследование не показало возможности отключить эту функцию, и перекомпилировать Thunderbird только для этой маленькой функции было явно излишним. Вместо этого легко доступен простой способ запретить все fsync
вызовы Thunderbird , в то время как Thunderbird даже не знает, что происходит.
Тот же механизм работает достаточно хорошо и для других процессов, которым нравится перегружать жесткие диски для нулевых или незначительных результатов. Для обходного пути требуется компилятор C с пакетами разработки.
fsync()
, доступные для Thunderbird, с помощью макета, ничего не делая. nosync.c
:int fsync(int arg) {
return 0;
}
int fdatasync(int arg) {
return 0;
}
Компилируем его в небольшую разделяемую библиотеку командой gcc -s -Os -Wall -shared -o nosync.so nosync.c
.
После этого должна быть вызвана команда ThunderbirdLD_PRELOAD=/path/to/nosync.so thunderbird
Ого! Жесткий диск больше не убивается.
Разумеется, это снимает дополнительную защиту с внутренних баз данных Firefox.Это может быть особенно опасно, только если у вас есть важные данные в вашей локальной учетной записи. Тем не менее, сегодня Firefox чаще всего хранит все в учетной записи IMAP, его локальные базы данных лишь по существу кэшируются. Таким образом, эта регулярка fsync
не требуется.
1Thunderbird — это многопоточный -процесс, поэтому небольшой скрипт для strace
всех его потоков (strace может следовать только одному pid ).