перемонтировать диск с запущенным процессом

У меня есть встроенное приложение, над которым я работаю. Для защиты данных на этом образе его разделы смонтированы RO (это помогает предотвратить ошибки флэш-памяти при неожиданном отключении питания, поскольку я не могу гарантировать чистое завершение работы, вы можете выдернуть вилку)

Приложение, над которым я работаю и которое необходимо защитить, находится в этом разделе RO, однако эта программа также должна иметь возможность изменять файлы конфигурации в той же файловой системе RO. У меня есть код, который позволяет мне перемонтировать этот раздел RW по мере необходимости (например, для обновления прошивки), но это требует остановки всех процессов, запущенных из раздела только для чтения (например, killall my_application). Следовательно, мое приложение не может перемонтировать раздел, который необходимо изменить, без предварительного уничтожения самого себя (я не уверен, какой из них является курицей, а какой яйцом, но суть вы поняли).

Есть ли способ запустить мое приложение таким образом, чтобы весь двоичный файл оставался в ОЗУ и не было обратной ссылки на раздел, из которого оно было запущено, чтобы размонтирование сообщало о том, что раздел занят?

Или, в качестве альтернативы, есть ли способ безопасно перемонтировать этот раздел RO без предварительного уничтожения запущенного на нем процесса?


person othane    schedule 11.09.2013    source источник
comment
Как именно вы делаете переустановку? Не могли бы вы опубликовать код?   -  person Hasturkun    schedule 11.09.2013
comment
Простое выполнение процесса с тома не должно помешать вам выполнить перемонтирование между RO и RW, однако могут быть другие вещи. Использование ramdisk может быть другим решением.   -  person Chris Stratton    schedule 11.09.2013
comment
@ChrisStratton: Верно, поэтому я и спросил, как выполняется перемонтирование. Если это не эквивалент mount -oremount,ro, а скорее размонтирование и монтирование, оно должно работать.   -  person Hasturkun    schedule 11.09.2013
comment
Вам нужно будет сделать эквивалент перемонтирования, но вам нужно следить за расположением mtab, демонов, у которых могут быть открыты перезаписываемые файлы и т. д.   -  person Chris Stratton    schedule 11.09.2013
comment
Эээ, мой комментарий был перевернут. -oremount должно работать, а не размонтирование и монтирование.   -  person Hasturkun    schedule 11.09.2013
comment
Отлично, спасибо! mount -o remount, rw newdir, кажется, работает, изначально я размонтировал устройство и перемонтировал его. Мне любопытно, почему перемонтирование работает, а размонтирование, за которым следует монтирование, не работает (и завершается с ошибкой устройство занято), если весь двоичный файл уже загружен в оперативную память?   -  person othane    schedule 12.09.2013
comment
IIRC, remount просто просит драйвер FS изменить настройки. Базовая файловая система никогда не исчезнет.   -  person Hasturkun    schedule 14.09.2013


Ответы (1)


Вы можете скопировать его в файловую систему tmpfs и запустить оттуда. Файловая система tmpfs хранит все данные в оперативной памяти, а иногда и в разделе SWAP.

Передача флага -oremount для монтирования также должна работать.

person br1ckd    schedule 03.08.2014