live dd поверх встроенной корневой части только для чтения

Я пытаюсь представить механизм обновления прошивки для встроенной системы на базе Linux без дополнительных initrd / initramfs / whatever. Изнутри запущенной системы, имеющей установленный только для чтения корень, я использую dd для копирования нового корневого образа (находящегося на вторичном разделе данных).

Проблема в том, что в половине случаев я получаю поврежденную корневую файловую систему. Я не понимаю, почему это происходит, зная, что раздел доступен только для чтения и что я делаю синхронизацию прямо перед перезагрузкой (перезагружаюсь, записывая «b» в / proc / sysrq-trigger). Кто-нибудь, пожалуйста, просветите меня.

2 Solutions collect form web for “live dd поверх встроенной корневой части только для чтения”

Вы переписываете смонтированную файловую систему. Как только драйвер файловой системы попытается что-то прочитать, вы обязательно столкнетесь с проблемой.

Вам нужно убедиться, что как только вы начнете писать новую прошивку, ничто другое не должно читать или писать этот раздел.

Обычно люди, похоже, делают это, чтобы обойти эту проблему, – использовать загрузчик для запуска новой прошивки. Он обычно находится полностью в ОЗУ и поэтому не нуждается в доступе к вашим разделам.

EDIT : Другой способ – установить еще одну минимальную систему на ваш второй раздел, единственной целью которого является выпустить файл изображения в первый раздел. при обновлении вам просто нужно скопировать изображение в нужное место, обновить загрузчик (для загрузки из второго раздела) и перезагрузить компьютер. Как только изображение будет записано, сбросьте загрузчик и снова перезагрузитесь.

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

Что вы можете сделать, это смонтировать tmpfs, содержащий все файлы из корневой файловой системы, а затем вызвать pivot_root для переключения на tmpfs и размонтировать старый корень.

Вероятно, это невозможно для системы, которая уже загружена, поскольку удаление старой корневой файловой системы означает, что все запущенные программы должны либо выйти, либо выполнить программу.

Наиболее жизнеспособным способом использования этого подхода, вероятно, была бы программа / sbin / tmpfs-init, которая выполняла все эти действия, а затем новый init. Даже это довольно сложно сделать.

  • LVM + добавить новый раздел на диске ОС
  • Размер индексного дескриптора установлен?
  • Установка жесткого диска USB 2.0 с несколькими разделами (GPT / HFS +) на Debian
  • Как удалить файл файловой системы NTFS, чье имя содержит «:»?
  • Что происходит с разделителями меток после удаления раздела?
  • Загрузите систему Linux из подкаталога на разделе?
  • Проверьте формат файловой системы с помощью BusyBox (stat -f и df -T не работают)
  • как перенести систему squashfs в другую файловую систему, которая читает / записывает
  • Не удается прочитать прежнюю внутреннюю файловую систему hdd через usb (конфликт имен группы томов fedora)
  • Установка удаленной файловой системы через SSH как другого пользователя
  • Размер resd vdi не работает как предполагаемый
  • Linux и Unix - лучшая ОС в мире.