Я бы вручную раскрутил несколько файловых систем флеш-памяти, которые включали различные компромиссы между оперативной памятью, требованиями к свободному пространству, эффективностью хранения и размером блока стирания. Устройства флэш-памяти NAND стали настолько смехотворно большими и дешевыми, что один подход, о котором я думал, но на самом деле не использовал, состоял бы в том, чтобы хранить каждый байт в 16 битах, чтобы позволить случайное чтение байтов с кодом, исправляющим ошибки ( *) и размещать вещи в размерах стираемых блоков, игнорируя большие объемы памяти. Даже если в конечном итоге используется только небольшая доля от общего размера чипа, в последний раз, когда я смотрел на цены, NAND-вспышки были настолько дешевле, чем NOR-вспышки, что, вероятно, можно было бы, например, используйте 1/16 флэш-устройства емкостью 1 ГБ дешевле, чем флэш-память NOR 64 МБ.
(*) Например, после каждого байтового значения b, вычислить t = (b ^ (b * 2) ^ (b * 8) ^ (b * 32)) и затем выполнить вывод ((t & 255) ^ ( t >> 8) ^ 255). Это позволит обнаруживать и исправлять все одно- и двухбитные ошибки (битовая комбинация для записанного 0xFF будет такой же, как и для пустого устройства, поэтому двухбитовые ошибки пустых слов будут читаться как 0xFF).