Я работаю над проектом для устройства, которое должно постоянно записывать информацию на устройство хранения. Устройство должно быть в состоянии терять энергию, но точно сохранять информацию, которую оно собирает, до момента потери питания.
Я искал ответы на вопрос, что произойдет, если в такой системе будет потеряно питание. Есть ли проблемы с потерей питания и не закрытием файла? Возможно ли повреждение данных?
Спасибо
Весь вопрос «безопасного хранения данных при отключении питания» довольно сложно решить в общем виде — точное решение будет зависеть от точного типа данных, скорости передачи данных и т. Д.
Чтобы сохранить информацию «при выключенном питании», данные должны храниться в энергонезависимой памяти (флэш-памяти, EEPROM или ОЗУ с резервным питанием от батареи). Опять же, это аппаратное решение.
Если вы можете «потерять данные, записанные в файл»? Да, вполне возможно, что файл может быть записан неправильно, если питание устройства хранения файлов потеряно, когда система находится в процессе записи.
Ответ на этот вопрос действительно зависит от того, сколько свободы у вас есть для сборки / настройки оборудования, чтобы справиться с этой ситуацией. Системы, рассчитанные на высокую надежность, будут иметь возможность обнаруживать сбои питания и продолжать работать в течение нескольких секунд (иногда намного больше) после отключения питания, а когда происходит отключение питания, оно переходит к «сохранить все данные, и красиво выключить «режим. Как правило, это выполняется с помощью источника бесперебойного питания (ИБП), который имеет механизм сигнализации, который сигнализирует об отсутствии внешнего питания, и когда система получает этот сигнал, запускает аварийное отключение.
Если у вас нет способа подключить ИБП и отключить его упорядоченным образом, то есть другие функции, такие как ведение журнала файловой системы, которая может предоставить вам хороший набор данных, но не гарантируется, что вы получите полные данные (и вам нужно обрабатывать формат файла так, чтобы «обрезанные данные» не полностью разрушали файл — классический пример — это zip-файл, в котором «каталог» (список содержимого) хранится в самом конце файла. вы можете заполнить 99,9% файла, но недостающие 0,1% — это то, что вам нужно для декодирования всего содержимого.
Да, повреждение данных определенно возможно.
Однако есть несколько рекомендаций, чтобы свести его к минимуму программным способом:
ext3/ext4
использование data=journal
, Не меньше).sync/syncfs/fsync
системные вызовы или использование sync
вариант крепления).Таким образом, даже если вы потеряете данные, будут записаны только последние несколько байтов, и файловая система в целом не будет повреждена.
Вы заметите, что я принял Unix-у ОС. Насколько я знаю, Windows не дает достаточного контроля, чтобы навязывать такие ограничения файловой системе.