Замена работающей корневой файловой системы Linux

Замена работающей корневой файловой системы Linux

Я пытаюсь придумать bash-скриптовый метод замены корневой файловой системы на работающем ПК. Система использует диск с разделами MBR с ext4 rootfs и разделом подкачки, к сожалению, она не использует LVM / BTRFS или что-то полезное в этом роде. Она работает под управлением минимального дистрибутива Debian с использованием grub / kernel & initrd / systemd.

Физического доступа к рассматриваемому ПК нет - на нем запущено какое-то программное обеспечение киоска, с помощью которого можно использовать фирменный инструмент для передачи tarball, содержащего двоичные файлы и скрипт обновления оболочки, на ПК. Мой план - использовать эту систему обновления, чтобы попытаться заменить rootfs.

Мои идеи в основном сводятся к следующему:

  • Замените initrd на пользовательскую версию, которая не переключает switch_root на настоящую rootfs, а вместо этого заменяет ее (вероятно, используя dd для записи нового образа), затем перезагрузите новую систему.

  • (Каким-нибудь образом!) переключите root_root с работающей системы на какую-нибудь временную файловую систему, затем выполните команду dd выше и перезагрузитесь

  • То же самое, что и выше, но переместите процесс init в новую временную файловую систему и выполните описанные выше действия или что-то в этом роде...

Я не знаком с функционалом pivot_root и switch_root и сейчас пытаюсь разобраться. Я уверен, что это уже делалось раньше, но я искал и не нашел решения!

решение1

Видетьэтот ответ Stack Exchange. Принятый ответ указывает наэта ссылка, в котором объясняется, как использовать pivot_root для создания временной корневой файловой системы в памяти, которая позволяет изменять, изменять размер, заменять или иным образом вмешиваться в работу корневой файловой системы без перезагрузки.

Связанный контент