我想使用 SSH 连接到 Debian 或 CentOS 设备,并通过在其上写入新的原始磁盘映像文件和新的分区表来修改其整个磁盘(只有一个 30 GB 磁盘,有 5 个分区,第 5 个是 Linux 根目录)。我的主要目标是远程自动完成此操作。
所以我想也许我可以以某种方式卸载根分区并运行Python,而Linux在ram上运行,这可能吗?
有其他替代方案或更好的解决方案吗?
添加注释:“它们不是服务器,它们就像 Raspberry Pi 一样,我们可以轻松进行物理访问,拥有 SD 卡之类的磁盘,我们可以手动删除、安装到我们的计算机上并写入新映像,然后启动到 Debian USB 并将其安装在休息状态我正在努力让这件事变得更容易。”
答案1
你不能完全按照描述做。
然而,许多发行版使用 Intramfs 映像来进行早期启动。如果您要修改此映像中的初始化脚本,您可以在安装文件系统之前运行您的任务。您需要格外聪明,才能编写出一种只发生一次的方法。所有这些都可以在有足够访问权限的情况下远程完成。由于 CentOS 和 Debian 使用不同的系统作为其 initramfs,因此您需要执行两次。在部署到您无法本地访问的系统上之前,最好先解决您可以本地访问的系统上的错误。这种事情需要完美地运作。
答案2
您可以为此目的创建自定义 initramfs 映像,为此查看 Dracut 模块(或 initramfs-tools 挂钩,具体取决于您喜欢的 initramfs 构建器)。提供完整的 Python 环境将具有挑战性,我建议尽可能坚持使用 shell 工具sfdisk
,尽管即使您的常用 initramfs 已经具备了写出完整磁盘映像所需的一切。最简单的执行方法是kexec
,但即使您的磁盘映像压缩得很好(因此请确保所有未使用的区域均已清零!),包含它的 initramfs 映像可能仍然太大而无法在正在运行的系统上加载。在这种情况下,您将不得不摆弄引导加载程序配置,以便在下次重新启动时生效更改。一些引导加载程序提供“引导一次”功能;否则您必须在覆盖磁盘后恢复更改。至少 Syslinux 引导加载程序允许您加载多个 initramfs 映像,这些映像在启动时合并,因此您可以让正常映像检查是否存在替换映像文件,并在继续启动之前将其写出。