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

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

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

Моя установка состоит из двух частей: файла initrd, содержащего загрузочный столбец и установочных скриптов, а также архива .tar.gz, который содержит остальную корневую файловую систему для установки.

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

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

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

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

2 Solutions collect form web for “Замените корень во время выполнения”

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

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

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

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

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

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

  • Отдельные сообщения нескольких sshds в syslog-ng
  • Не удается получить dropbear jail для работы - похоже, что shell немедленно выходит
  • В chrooted env команда ls показывает «?» Вместо символов UTF8
  • как монтировать -t proc proc proc / с их абсолютным путем для chroot?
  • Почему необходим chroot при установке GRUB?
  • Как я могу использовать debian_chroot в bashrc для идентификации chroot env?
  • Не удалось достичь сети из chroot
  • Не удалось получить работу Wireless во время установки Arch Linux
  • Какие папки нужно установить перед chroot?
  • Можете ли вы Chroot программы из среды OpenVZ?
  • Как rsync chroot без нарушения символических ссылок?
  • Как обнаружить архитектуру chroot внутри chroot?
  • Linux и Unix - лучшая ОС в мире.