Как на самом деле дефрагментировать файловую систему JFFS2
Я искал по всему Интернету, в том числе на нескольких форумах StackExchange, работающий метод дефрагментации файловой системы JFFS2 и не могу найти ответ.
В рассматриваемой системе имеется флэш-часть NAND объемом 256 МБ. Доступ к нему осуществляется как устройство MTD, которое разделено на три раздела. Третий раздел - это место, где корневая файловая система хранится как файловая система JFFS2. Проблема заключается в том, что записи в корневую файловую систему имеют недетерминированную производительность из-за обычных проблем с сборщиком мусора JFFS2, решающим запускаться в худшие возможные моменты времени. Когда это происходит, продукт зависает на некоторое неизвестное время, пока работает сборщик мусора (и pdflush).
Изменение файловой системы не вариант. Решение должно быть чем-то, что может работать в нерабочее время, что после запуска приводит к более предсказуемой производительности записи. Сейчас я работаю над программой, которая попытается принудительно запустить сборщик мусора, а затем удаляет файл в надежде, что все освобожденные узлы внезапно станут более доступными, и записи будут работать лучше.
Мысли?
1 ответ
Попробуйте реализовать собственный алгоритм сборки мусора и попытаться запустить его во время монтирования, а когда закончится свободное пространство для записи, снова запустите поток сборки мусора отдельно.
Будет намного проще, если вы напишите свои файлы как фрагменты, так что когда вы стираете блок или страницу с половиной файла в нем, вы все равно можете записать это куда-нибудь и получить страницу для будущего использования.
Сложность состоит в том, как открыть файл с несколькими фрагментами в файловой системе.