Замените корень во время выполнения

Я разрабатываю встроенную систему Linux. Обычно система устанавливается путем создания файла ISO, который записывается на USB-накопитель, с которого может загружаться плата.

Чтобы сделать установку возможной автоматически (скажем, за ночь), я хотел бы иметь возможность выполнить установку на плате во время работы старой системы.

  • Файловая система для совместного использования GIT-проектов между Windows и Linux
  • lsof пропускает файлы
  • Лучшие варианты установки жесткого диска Mac OS X на моем Linux-боксе?
  • Linux работает на SmartTV?
  • collectd создает / home папку на моем mac, и я не могу удалить его
  • Ошибка «Short read block» при попытке загрузки RHEL
  • Моя установка состоит из двух частей: файла initrd, содержащего загрузочный столбец и установочных скриптов, а также архива .tar.gz, который содержит остальную корневую файловую систему для установки.

    1. Загрузочный загрузчик загружает ядро ​​и указывает его на initrd и загружает ядро.
    2. Сценарии установки initrd монтируют целевой диск / dev / sda, форматируют его, устанавливают загрузчик и, наконец, копируют корневую файловую систему из .tar.gz и initrd.

    Теперь я вместо этого хочу

    1. Скопируйте install.iso с главного компьютера на целевое устройство. (Нет проблем)
    2. Выполняйте шаги установки, как указано выше.

    Моя проблема в том, что я не знаю, как мне следует заменить текущую систему на новую. Я предполагаю, что текущий установленный root (/) должен быть размонтирован и заменен initrd. Но я не могу понять, как это сделать!

  • find всегда возвращает «/ mnt / hgfs protocol error» (VMware, Debian 8.x)
  • Типы файловой системы для зашифрованных разделов
  • mkdir дает разные ошибки (разрешение отклонено против файла существует) в зависимости от того, был ли доступ к каталогу недавно
  • Поделитесь каталогом через FTP с включенным chroot_local
  • Папки мониторинга, установленные через SSHFS
  • Является ли индекс inode неотменяемым идентификатором inode?
  • 2 Solutions collect form web for “Замените корень во время выполнения”

    Я могу думать о разных способах делать то, что вы хотите. Все из них несут уровень риска и трудности. Основной риск состоит в том, что если установка идет не так, вы получите не загружаемую систему, которая должна быть установлена ​​вручную.

    Моя основная мысль (которая зависит от вашего загрузчика и тому подобное) заключается в том, чтобы использовать именно ту процедуру, которая у вас есть сейчас. В основном скопируйте новый установочный образ на USB-накопитель, который навсегда останется в машине. Затем просто перезагрузитесь и отпустите его и установите нормально.

    Он полагается на следующее

    1. Ручная переустановка. Я предполагаю, что у вас есть, что иначе переустановка в ночное время не будет проблемой.
    2. Ваш загрузчик может автоматически выбирать загрузку через USB или локальную файловую систему (или с помощью команды уровня приложения перед перезагрузкой)
    3. В конце вам нужно настроить загрузчик для загрузки с локальной платы, а не на USB-устройство, или просто удалить содержимое USB-устройства / сделать его загрузочным, чтобы загрузчик упал

    Альтернативой этому было бы иметь два загрузочных / корневых раздела на вашей доске и просто установить в тот, который вы не используете, а в конце перезагрузки заставляет загрузчик загружаться в другой. Вы можете использовать среду chroot, чтобы заставить установщика думать, что он загружается с нуля. Это, вероятно, большое изменение в вашей среде, хотя и не будет быстрой победой.

    Вы пытались установить initrd, а затем pivot_root? Кажется, что вы хотите сделать.

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