Я проблему инициализации данных значениями по умолчанию при первом
запуске решил раз и навсегда: 1. Блоки данных должны иметь CRC
2. Если CRC блока неправильное, то блок инициализируется либо резервной копией (с правильной CRC), иначе - значением по умолчанию.
3. Самое главное. При вычислении CRC кроме данных добавляется еще уникальный идентификатор (текущая ревизия прошивки, тип таргета, номер/хеш репозитория - да что угодно).
При таком подходе при изменении компоновки и содержания блоков данных должен меняться этот идентификатор. При этом текущие блоки данных становятся неактуальными и при первом пуске переинициализируются значениями по умолчанию.