После того как Emacs изменяет файл, есть две причины, по которым изменения могут не сохраниться при последующих сбоях питания или носителя, и обе они связаны с эффективностью. Во-первых, операционная система может сопоставить записанные данные с данными, уже хранящимися в другом месте на вторичном хранилище, до тех пор, пока один из файлов не будет изменен; это приведет к потере обоих файлов, если единственная копия на вторичном хранилище будет утеряна из-за сбоя носителя. Во-вторых, операционная система может не записывать данные во вторичное хранилище немедленно, что приведет к потере данных, если питание будет потеряно или произойдет сбой носителя.
Хотя оба типа сбоев в значительной степени можно избежать при соответствующей
конфигурации системы, такие системы обычно дороже или менее эффективны. В
системах более низкого уровня, чтобы выжить при сбое носителя, вы можете скопировать
файл на другое устройство, а чтобы выжить при сбое питания (или быть немедленно
уведомленным о сбое носителя) вы можете использовать функцию write-region
с переменной write-region-inhibit-fsync, установленной в nil.
Хотя эта переменная обычно равна t, поскольку это может
значительно повысить производительность, может иметь смысл временно установить ее
в nil, если вы используете Emacs для реализации транзакций,
подобных базам данных, которые выживают при сбое питания в системах более
низкого уровня.
См. Запись в файлы.
На некоторых платформах, когда Emacs изменяет файл, другие процессы могут не
быть немедленно уведомлены об изменении. Установка write-region-inhibit-fsync
в nil может улучшить скорость уведомления в этом случае, хотя
гарантий нет.