Я пытаюсь придумать 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 для создания временной корневой файловой системы в памяти, которая позволяет изменять, изменять размер, заменять или иным образом вмешиваться в работу корневой файловой системы без перезагрузки.