Почему файл в JFFS2 поврежден после потери питания при удалении других файлов

Я работаю с Linux (3.4.31+) загрузка встроенной системы из раздела JFFS2. Я часто сталкиваюсь с проблемой повреждения файлов, когда происходит сбой питания во время удаления других файлов. Это происходит во время процедуры обновления платформы. Это упрощенные этапы обновления:

  1. Загрузите tar.gz, содержащий (среди прочих файлов) образ rootfs.squashfs файловой системы, до которой я обновляюсь, проверьте контрольную сумму md5 образа.
  2. Загрузите Linux с небольшого раздела JFFS2, в котором есть минимальный набор инструментов, необходимых для обновления.
  3. Смонтируйте большой раздел, который необходимо обновить.
  4. Смонтируйте rootfs.squashfs, который хранится в большом разделе.
  5. Удалите все файлы из большого раздела, за исключением некоторых перенесенных файлов данных, образа rootfs.squashfs и т. Д.
  6. Скопируйте все файлы из смонтированного rootfs.squashfs в большой раздел
  7. Загрузиться с большого раздела

Упомянутая потеря мощности происходит в 5. шаг. Обратите внимание, что rootfs.squashfs монтируется только для чтения и никогда не изменяется во время обновления. Даже если этот файл поврежден и после включения устройства вы можете увидеть, что контрольная сумма md5 файла отличается, размер остается неизменным, изображение можно смонтировать, но некоторые файлы из этого образа невозможно прочитать.

Почему этот файл поврежден? Разве JFFS2 не должен иметь дело с такого рода сценарием? Есть ли способ выйти из этой ситуации?

1 ответ

Некоторое время назад я видел повреждения в файле, который открыт и записывается. Ожидание, превышающее время фиксации fs (по умолчанию 5 секунд), решило проблему. Это означает, что на вашем шаге 1 после извлечения всех файлов из tar.gz 7 секунд ожидания позволят fs успокоиться и получить флэш-память. Если это работает для вас, дайте нам знать.

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

Учитывая эти представления, после прикосновения к файлам (запись, удаление) потребуется 7 секунд.

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

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

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