![Как проверить, настроена ли моя система Linux на немедленную синхронизацию изменений с диском?](https://rvso.com/image/109251/%D0%9A%D0%B0%D0%BA%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C%2C%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B0%20%D0%BB%D0%B8%20%D0%BC%D0%BE%D1%8F%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%20Linux%20%D0%BD%D0%B0%20%D0%BD%D0%B5%D0%BC%D0%B5%D0%B4%D0%BB%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%20%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8E%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9%20%D1%81%20%D0%B4%D0%B8%D1%81%D0%BA%D0%BE%D0%BC%3F.png)
Я заметил, что в моей системе есть индексирующий движок,вспоминатьиспользует много места на диске, когда работает, и что диск был активен каждый раз, когда я менял настройки дополнения Firefox. Я не знаю, предназначены ли эти приложения для немедленной синхронизации изменений на диске или это связано с какими-то настройками в конфигурации системы.
Есть ли способ это выяснить?
P.S. Я оставил вопрос наРеквизиты программного обеспеченияо проблеме recoll/xapian.
решение1
Проверьте, отображается ли файловая система в выводе grep -w sync /proc/mounts
. Спойлер: ответ — нет. Монтирование файловой системы с немедленной синхронизацией происходит крайне медленно. (Кроме того, это приводит к большому количеству мелких записей, что сокращает срок службы флэш-устройств.)
Некоторые приложения сбрасывают данные на диск, вызываяfdatasync
. К сожалению, API Unix не очень хорошо спроектированы, когда дело касается устойчивости¹. С точки зрения приложения, некоторые изменения должны быть устойчивыми, поскольку приложение передало данные на удаленную машину, указывающие на то, что изменение было сохранено. В этом случае fdatasync
это правильный интерфейс. Но многим приложениям нужно что-то другое, а именно гарантия того, что если они сделают изменение 1, за которым последует изменение 2, и система выйдет из строя на полпути, то после перезапуска не будет изменения 2 без изменения 1. (Пример: изменение 1 = запись новой версии файла, изменение 2 = удаление старой версии.) Файловые системы переупорядочивают записи файловой системы для повышения производительности; обычно это невидимо для приложений, поскольку это касается только того, что происходит между кэшем/буфером файловой системы и диском, а не чего-либо, что видно приложениям. Но в случае сбоя системы содержимое диска отражает порядок фактических записей на диск. Нет API, который бы говорил «это изменение должно произойти до того изменения», поэтому приложения используют его fdatasync
как запасной вариант для бедных (выполнить изменение 1, вызвать, fdatasync
чтобы убедиться, что оно было распространено на диск, затем выполнить изменение 2). Это может негативно сказаться на производительности, особенно на носителях с медленной записью, таких как флэш-память.
Если приложение работает слишком медленно в вашей системе из-за чрезмерного использования fdatasync
или его аналогаfsync
, вы можете использоватьeatmydataчтобы свести на нет вызовы fsync
/ fdatasync
. Но будьте осторожны, если ваша система рухнет в середине, вы можете остаться с несогласованными данными.
Я не уверен, относится ли мой ответ к recolll или к изменению настроек дополнения Firefox. Эти операции вполне могут бытьчтениес диска. Особенно вспоминаю — его работа — считывать много данных!
Кроме того, даже если изменения не синхронизируются с диском немедленно, можно ожидать, что некоторые данные будут записаны. Если данные не записаны на диск, они должны оставаться в памяти, и в то же время эта память не может использоваться для других, более полезных вещей. Более того, было бы пустой тратой времени не держать диск занятым: если есть данные для записи, ядро начнет их записывать, в то время как приложение продолжит выполняться и производить больше данных.
¹ Устойчивость в контексте проектирования файловой системы — это вопрос о том, сохранятся ли изменения в файловой системе в случае сбоя системы.