Встроенная файловая система и выключение

Я работаю над встроенным приложением без какой-либо ОС, которая нуждается в использовании файловой системы. Я много раз сталкивался с участниками проекта, и некоторые со мной согласны, что система должна корректно завершать работу системы в случае сбоя питания, иначе файловая система может сойти с ума.

Некоторые люди говорят, что это не имеет значения, если вы просто выключите систему и позволите природе работать, но я думаю, что это одно из худших решений, особенно если вы знаете, что это принесет вам проблему и, возможно, сократит ваш продукт. срок жизни.

В последнем абзаце я только предположил, что это проблема, но мой вопрос остается:

Влияет ли отключение питания на файловую систему?

5 ответов

Решение

Для не журналируемой файловой системы неожиданное отключение может означать повреждение определенных данных, включая структуру каталогов. Это происходит, если в кеше есть несохраненные данные или FS находится в процессе записи многоблочного обновления, и прерывание происходит, когда записываются только некоторые блоки.

Журналирование решает эту проблему в основном - если в середине происходит прерывание, процедура восстановления или операция проверки и восстановления, выполняемая FS (обычно неявно), приводит файловую систему в согласованное состояние. Однако это состояние не всегда является последним - то есть, если в кеше памяти было несколько данных, они могут быть потеряны даже при журналировании. Это потому, что ведение журнала спасает вас от повреждения файловой системы, но не творит чудеса.

Режим сквозной записи (без кэширования записи) уменьшает вероятность потери данных, но не решает проблему полностью, так как журналирование будет работать как кеш (в течение очень короткого времени).

К сожалению, резервное копирование или дублирование данных являются основными способами предотвращения потери данных.

Вот список различных методов, помогающих встроенной системе переносить сбой питания. Это может быть непрактично для вашего конкретного применения.

  1. Использовать файловую систему ведения журнала - может выдерживать неполные записи из-за сбоя питания, сбоя ОС и т. Д. Большинство современных файловых систем заносятся в журнал, но вы должны выполнить домашнюю работу для подтверждения.

  2. Если вашему приложению не нужна производительность записи, отключите все кэширование записи. Проверьте драйверы дисков для вариантов кэширования. В Linux/Unix рассмотрите возможность монтирования файловой системы в режиме синхронизации.

  3. Если это не должно быть доступно для записи, сделайте это только для чтения. Постарайтесь сохранить исполняемые файлы вашего приложения и файлы операционной системы в их собственных разделах с защитой от записи (например, монтировать чтение только в Linux). Ваши данные для чтения / записи должны находиться в отдельном разделе. Даже если данные вашего приложения будут повреждены, ваша система все равно сможет загрузиться (хотя и с отказоустойчивой конфигурацией по умолчанию).

    3a. Для данных, которые записываются только один раз (например, Настройки конфигурации), старайтесь большую часть времени сохранять их монтированными только для чтения. Если есть изменение настроек, временно как R/W, обновите данные, а затем размонтируйте / перемонтируйте их только для чтения.

    3b. Используйте технику, аналогичную 3a, для обработки обновлений приложений / ОС в полевых условиях.

    3в. Если для вас нецелесообразно монтировать FS только для чтения, по крайней мере, рассмотрите возможность открытия отдельных файлов только для чтения (например, fp=fopen("configuration.ini", "r")).

  4. Если возможно, используйте отдельные устройства для хранения. Хранение вещей в отдельных разделах обеспечивает некоторую защиту, но все еще существуют крайние случаи, когда таблица разделов может быть повреждена и сделать весь диск нечитаемым. Использование физически отдельных устройств дополнительно изолирует одно поврежденное устройство, разрушая всю систему. В идеальном мире у вас было бы как минимум 4 отдельных устройства:

    4а. Загрузчик

    4b. Операционная система и код приложения

    4c. Настройки конфигурации

    4e. Данные Приложения

  5. Знайте характеристики своих устройств хранения и контролируйте марку / модель / ревизию используемых устройств. Некоторые жесткие диски игнорируют команды очистки кеша из ОС. У нас были случаи, когда некоторые модели карт CompactFlash повреждали себя при сбое питания, но у "промышленных" моделей такой проблемы не было. Разумеется, эта информация не была опубликована ни в одной спецификации, и ее необходимо было собрать путем экспериментального тестирования. Мы разработали список одобренных CF-карт и провели инвентаризацию этих карт. Нам периодически приходилось обновлять этот список, поскольку старые карты устарели, иначе производитель внесет изменения.

  6. Поместите ваши временные файлы в RAM-диск. Если вы храните эти записи вне диска, вы исключаете их как потенциальный источник повреждения. Вы также уменьшаете износ вспышки.

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

    7а. Ваша система должна поддерживать как минимум две копии своих параметров конфигурации: "основной" и "резервный". Если первичный сбой по какой-либо причине, переключитесь на резервную копию. Вам также следует рассмотреть механизмы создания резервных копий всякий раз, когда конфигурация изменяется или после того, как пользователь объявил "хорошую" конфигурацию (тестирование в производственном режиме).

    7b. Не удалось установить раздел данных приложения? Автоматически запускать chkdsk/fsck.

    7с. Не удалось ли chkdsk/fsck решить проблему? Автоматически переформатируйте раздел и верните его в известное состояние.

    7d. Есть ли у вас Boot Loader или другой метод восстановления ОС и приложения после сбоя?

    7e. Убедитесь, что ваша система подаст звуковой сигнал, мигнет светодиод или что-то еще, чтобы указать пользователю, что произошло.

  8. Сбои питания должны быть частью квалификационного тестирования вашей системы. Единственный способ убедиться, что у вас надежная система, - это протестировать ее. Выдерните шнур питания из системы и запишите, что происходит. Попробуйте восстановить питание в нескольких точках работы системы (во время работы, во время загрузки, в середине конфигурации и т. Д.). Повторите каждый тест несколько раз.

  9. Если вы не можете смягчить все проблемы с перебоями в питании, включите в систему аккумулятор или суперконденсатор - имейте в виду, что вам потребуется фоновый процесс в вашей ОС, чтобы инициировать постепенное отключение при снижении энергопотребления. Кроме того, батареи потребуют периодического тестирования и замены с возрастом.

В дополнение к ответу msemack, к сожалению, мой рейтинг слишком низок, чтобы оставлять комментарии к его ответу против отдельного ответа.

Влияет ли отключение питания на файловую систему?

Да, если не будут приняты надлежащие меры для предотвращения коррупции. Смотрите предыдущие ответы для параметров файловой системы, чтобы помочь смягчить. Однако, если ATA flush/sleep не реализованы должным образом на вашем устройстве, вы можете столкнуться со сценарием, который мы сделали. В нашем сценарии устройство было повреждено за пределами файловой системы, и fdisk/format не восстановит устройство.

Вместо этого требуется восстановление безопасности ATA для восстановления устройства после повреждения. Чтобы избежать этого, мы реализовали команду ожидания ATA до потери мощности. Для этого потребовалось 400 мс, чтобы выдержать время ожидания ATA 160 мс, и оставалось свободное пространство для деградации колпачков в течение срока службы продукта.

Примечания из нашего сценария:

  • fdisk/format не удалось восстановить / восстановить диск.
  • Утилита проверки диска нашей энергосберегающей файловой системы возвратила, что у устройства были плохие блоки, но на самом деле их не было.
  • flush / sync вернул успех, быстро и, скорее всего, не был реализован.
  • После повреждения dd не смог прочитать устройство за границей 1-го раздела и вернул ошибки ввода-вывода после.
  • hdparm использовался для выпуска ATA security-erase, как единственный метод восстановления для некоторых сценариев коррупции.

Это полностью зависит от используемой файловой системы и допустимости потери некоторых данных при отключении питания в соответствии с требованиями вашего проекта.

Можно представить себе использование файловой системы, защищенной от автоматического отключения и способной восстанавливаться после частичной записи. Таким образом, что касается аппликативной стороны, если у вас нет критических данных, которые абсолютно необходимо записать перед выключением, нет необходимости в особой процедуре обнаружения отключения питания.

Теперь, если вы хотите получить более конкретный ответ для своего проекта, вам нужно будет предоставить больше информации о файловой системе, которую вы используете, и ваших требованиях к проекту.

Изменить: Поскольку у вас есть важные аппликативные данные для сохранения перед отключением питания, я думаю, что вы ответили на вопрос самостоятельно. Единственный способ обеспечить автоматическое отключение питания - это обнаружение отключения питания, которое предупреждает ваше встроенное устройство в сочетании с некоторыми аппаратными схемами, которые позволяют непрерывно подавать требуемое питание на устройство для выполнения процедуры выключения.

Файловая система FAT особенно подвержена повреждению, если выполняется запись или файл открыт при завершении работы, особенно если это буферизованная операция, которая не сбрасывается. В одном проекте, над которым я работал, было решение проверять и восстанавливать целостность файловой системы (по существу, chkdsk/scandsk) при запуске. Эта стратегия не предотвратила потерю данных, но предотвратила невозможность использования файловой системы.

Ряд поставщиков предоставляют журнальные дополнительные компоненты для FAT, чтобы точно решить эту проблему. К ним относятся, например, Segger, Quadros и Micrium.

В любом случае, ваша система должна, как правило, использовать подход "открыть-записать-закрыть" для доступа к файлу или "открыть-записать-очистить", если вы чувствуете необходимость держать файл открытым.

Другие вопросы по тегам