ИМХО любое обновление, которое не является атомарным, может сломать систему или сделать проверку на непротиворечивость довольно сложной. Я согласен с тем, что следует избегать обновления загрузчика, поскольку он не является безопасным для отключения питания.
Как правило, производитель хочет обновить прошивку x.x.x до версии y.y.y, не беспокоясь о том, было ли обновлено ядро и / или один файл. Обновление отдельных файлов может стать кошмаром для службы, потому что очень трудно понять, что работает на оборудовании клиента. Возможно, вы смешиваете подход двойного копирования (приложение избыточно) с подходом единственного копирования. Я думаю, что это не очень помогает, потому что целостность системы обеспечивается слабым компонентом в цепочке. Если происходит сбой обновления корневой файловой системы, не важно, что приложение дублируется.
Подход с двойным копированием может гарантировать обновление без отключения, если вам это нужно. Но это требует много ресурсов, потому что все компоненты должны быть продублированы. Лично я использую запасной подход, при котором запускаются небольшие rootfs в оперативной памяти в случае сбоя основного приложения или если последнее обновление не было успешным. Эта резервная система, автоматически запускаемая загрузчиком, если что-то пойдет не так, обновите систему с помощью USB-пера (если требуется локальное обновление).
Я никогда не находил проект OSS по этим вопросам, и недавно я начал новый, основываясь на моем предыдущем опыте. У меня запущено несколько продуктов, и мой клиент доволен этим.
Может быть, вы можете взглянуть на это. Вы можете найти источники для «swupdate» (название проекта) в github.com/sbabic/swupdate
.
Stefano