Мне кажется, что это очень общая проблема. У меня есть встроенная система, работающая под управлением Linux из root только для чтения. Есть демон обновления, который устанавливает новые образы программного обеспечения, когда они доступны, перезаписывая целые разделы. Мой вопрос: как лучше всего сделать это из работающей системы?
- dd обновленный раздел в
/dev/sdX
, который в данный момент является смонтированным корневым разделом (доступным только для чтения)? - переместить текущий корень, используя
pivot_root
tmpfs, как обсуждалосьздесь? - использовать 2 корневых раздела и переключать «активный» после каждого обновления?
Недостатки 2 и 3 в том, что мне нужно много оперативной памяти (для 2) или дискового пространства (для 3). Есть ли безопасный способ перезаписать корневой раздел только для чтения из работающей системы и перезагрузиться в обновленную систему?
решение1
Итак, что я сделал, я пошел по пути 1. и столкнулся с большими проблемами, когда система больше не была стабильной из-за проблем с файловой системой. Я думаю, перезапись смонтированного раздела — не очень хорошая идея (хотя это не большой сюрприз). Чтобы исправить это, я попробовал идею 2. (pivot_root), которая работает, но имеет некоторые недостатки. Один из них: вам нужно остановить большинство запущенных процессов и/или перезагрузиться как можно скорее после завершения обновления. Наконец, я попробовал идею 3., и единственным недостатком является «пустая трата» дискового пространства. Все остальное работает довольно хорошо.