这个想法是有一个 docker 映像或类似的东西,我在其中配置一大堆与硬件无关的东西,然后将其部署到一个实际的设备,如树莓派或普通 x64 服务器。
我假设这不可能这么简单,因为 docker 有一些虚拟化硬件会与目标不匹配?而且我不想在全新的 linux 安装的容器中运行 docker-image,我需要所有东西来运行本机。
有人可以指出正确的方向如何实现这一点,在开始这个时我应该考虑什么样的开发运维软件。除了制作一些install-scripts
并复制configs
(这基本上是真的)。
我想要得到的是有一个restore-image
,我最好在虚拟机中配置,然后有一个起点,我将它安装image
在(虚拟)任何硬件上,它会启动......
还是我对 linux 如何处理不断变化的硬件有误解?(我在更换 GPU 方面有不好的经验)
(环顾四周,使用docker似乎是最好和最明智的解决方案docker export
,但我很好奇是否有更简单的解决方案,也许是一个可以导出我指定的特定应用程序/配置的程序,而不是手动编写一个脚本,不是因为懒惰,而是因为人为错误)
我假设您正在寻找的是一种将带有应用程序、配置等的已安装系统的映像“克隆”到另一台机器(实际的裸机硬件,而不是虚拟机)的方法。
所以你也应该从真正的硬件开始,而不是虚拟机或 Docker 容器。在该机器上安装所需的一切,但尽量避免安装特定于设备的第三方驱动程序。如果您可以坚持使用内核自动提供的驱动程序,那么您的映像很有可能在另一台机器上运行。当然它需要是相同的架构,所以如果要为 x86 构建映像,则需要 x86 机器,如果要为 Pi 构建映像,则需要 Pi。
然后您可以使用Clonezilla制作磁盘映像,然后在另一台机器上恢复该映像。但是,Clonezilla 仅适用于 x86 机器,不适用于 Pi。
另一种方法是
dd
将整个磁盘(作为原始设备)复制到外部驱动器/USB 记忆棒上的文件并在另一台机器上恢复该图像文件(再次写入原始磁盘设备),但有一个限制,您需要具有相同的两台机器中的磁盘大小 - 否则我不希望克隆的系统启动。当然,您需要在机器(源或目标)从活动介质引导之后执行此操作,以便磁盘上的操作系统不活动(如果目标机器根本不存在,所以唯一的引导方式来自现场媒体)。大多数“硬核”方法,需要大量工作(但您可以使用此方法将系统克隆到具有更大磁盘的机器)是磁盘上
tar
的整个文件系统(也在从实时媒体启动之后)并将它们解压缩到目标机器上的适当分区(当然是在手动创建分区之后)。之后,您需要调整/etc/fstab
文件(因为分区 UUID 通常会有所不同)并在目标机器上安装引导加载程序。当我们用更强大的硬件替换服务器时,我已经多次使用这种方法“克隆”了工作系统。警告:如果机器具有静态配置的 IP 地址,“克隆”的目标机器将具有相同的地址 - 您必须手动更改它们。对于某些系统,您还必须从中删除一些文件
/etc/udev/rules.d
(名称中包含“persistent”的文件),以使 udev 从旧机器“忘记”这些设备并在下次启动时再次检测它们 - 否则,您可以有问题,例如网络接口不存在(如本例所示)