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. Даже это довольно сложно сделать.

  • Любой способ помочь «визуализировать» суперблок, файловую систему, дескрипторы групп и т. Д.
  • Как найти отсутствующие файлы с последовательными именами?
  • Нужно ли увеличить размер исходного раздела, если я просто восстанавливаю содержимое (с помощью dd)?
  • Разрешения повреждены?
  • как перенести систему squashfs в другую файловую систему, которая читает / записывает
  • Создание виртуальной файловой системы для загрузки Linux
  • Почему удаление больших файлов из tmpfs не мгновенно?
  • Каталоги отсутствуют в режиме восстановления
  • Где хранятся таблицы i-node?
  • LVM + добавить новый раздел на диске ОС
  • Существуют ли какие-либо утилиты, чтобы знать, где файл физически присутствует в hdd?
  • Interesting Posts

    Почему размер файла «/ proc / kcore» больше размера физической памяти?

    Ноутбук Debian периодически приостанавливается

    скрипт, который вызывает сторонний скрипт, который вызывает экран – как отключить экран?

    Сохранять право собственности с помощью rsync и несуществующего пользователя

    Как определить определенный системный вызов, вызванный или нет, во всем рабочем процессе?

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

    Linux Mint 18 с сохранением и восстановлением сеанса корицы

    Использование памяти httpd

    Использование yum для обновления с MySQL 5.1.73 до 5.7.13

    .bashrc псевдоним не работает

    Ошибка при попытке перемещения файла

    Проблема звука в запуске ubuntu

    Как перезапустить polkitd?

    проблема с U-boot при запуске Linux в sd-карте

    iptables: нет цепочки / цели / соответствия этим именем

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