Замена исполняемого двоичного файла в файловой системе только для чтения

У меня есть простой сценарий обновления bash, который заменяет файлы, удаляя старые файлы инцидентов и копируя новые файлы из архива в запущенную целевую корневую файловую систему. Таким образом, сценарий может обновлять системные файлы, а также сам сценарий обновления.

Недавно я расширил скрипт для работы с файловой системой только для чтения, перемонтировав ее с помощью R / W-доступа ( mount -o remount,rw /dev/rootfs / ), выполнив свою деятельность по обновлению и вернувшись обратно с доступом к R / O ( mount -o remount,ro /dev/rootfs / ).

Однако этот подход терпит неудачу. Как правило, сценарий выходит из строя либо при первом запуске в момент повторной установки с доступом к R / O, либо во время его второго запуска в момент повторной установки с использованием R / W-доступа. Вот типичное сообщение об ошибке:

 root@device:~# mount -o remount,rw /dev/rootfs / EXT3-fs (mmcblk0p2): warning: couldn't remount RDWR because of unprocessed orphan inode list. Please umount/remount instead. mount: mounting /dev/rootfs on / failed: Invalid argument 

После некоторых исследований (например, https://stackoverflow.com/questions/7834667/self-deleting-bash-script ) я понял, что проблема заключается в том, как открытые файлы удаляются из файловой системы. То есть, только ссылка на файл inode отключена в момент вызова, тогда как файл, представленный inode, фактически удаляется, когда файл закрыт всеми программами, которые его используют. Поэтому, когда я снова возвращаюсь в режим R / O, ссылки на индексный дескриптор являются gonne, в то время как сам inode нет, что приводит к повреждению файловой системы, что приводит к указанной ошибке. Правильно ли это заключение?

Теперь меня интересует, как правильно решить проблему. Я полагаю, что избежать повторной установки обратно в режим R / O и перезагрузки системы в порядке, не так ли? Но есть ли лучшее решение, позволяющее вернуться к режиму R / O и избежать перезагрузки системы?

Обратите внимание, что решение должно быть независимо от типа файловой системы. В частности, я запускаю ext3 / ext4 и ubifs.

Изменить: я ищу общее решение, которое не требует перезапуска отдельных служб (то есть, понять систему). На самом деле не проблема перезагрузки системы, это просто звучит правильно, чтобы вернуть систему в то же состояние, что и до запуска сценария обновления, то есть, если перед его исполнением была файловая система R / O, возможно, это R / O после него. Но, возможно, такая предпосылка недействительна.

Linux и Unix - лучшая ОС в мире.