26.8 Файлы и вторичное хранилище

После того как Emacs изменяет файл, есть две причины, по которым изменения могут не сохраниться при последующих сбоях питания или носителя, и обе они связаны с эффективностью. Во-первых, операционная система может сопоставить записанные данные с данными, уже хранящимися в другом месте на вторичном хранилище, до тех пор, пока один из файлов не будет изменен; это приведет к потере обоих файлов, если единственная копия на вторичном хранилище будет утеряна из-за сбоя носителя. Во-вторых, операционная система может не записывать данные во вторичное хранилище немедленно, что приведет к потере данных, если питание будет потеряно или произойдет сбой носителя.

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

На некоторых платформах, когда Emacs изменяет файл, другие процессы могут не быть немедленно уведомлены об изменении. Установка write-region-inhibit-fsync в nil может улучшить скорость уведомления в этом случае, хотя гарантий нет.