![“复制”正在运行的服务器](https://linux22.com/image/711832/%E2%80%9C%E5%A4%8D%E5%88%B6%E2%80%9D%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
在担任这台 ubuntu 16.04 服务器的管理员数月之后,我没有使用 Ansible 或其他配置管理工具,而是对系统做了很多更改:更改了 /etc 中的配置文件、安装了软件包、启用和禁用了 apache2 模块等等。
是否有一种自动化的方法来创建脚本或其他东西,当在全新安装的 ubuntu 16.04 上执行时(但如果它在任何 Linux 上运行得更好),可以重新创建一个与我现在拥有的并且正在运行的服务器大致相同?
编辑:不幸的是,这不是我可以克隆的虚拟机。
答案1
目前,就行业标准而言,你能做的并不多。如果你真的需要脚本来为你准备一切,那么我会:
- 转储所有已安装的软件包
dpkg -l
及其版本。 - 使用 ubuntu 16.04 创建一个新服务器,安装相同版本的所有软件包。
etckeeper
在新服务器上安装rsync
将所有/etc
目录从原始服务器复制到“干净的”一是确保“干净的”一个不是存在于原始目录中的将被删除(a2dismod
只需删除 /etc/apache2/modules-enabled 目录中的符号链接,因此这将是执行相同操作的另一种方法) - 有一个选项rsync
可以做到这一点。
完成后,您应该看到(感谢 etckeeper)目录的 git 差异/etc/
- 这可以简单地(?)转换为脚本 - 但只有当所有软件包版本与原始服务器完全相同时,它才会可靠地工作。patch
然而,这将是一些真实模板的良好基础ansible
//puppet
chef
按照这条路线,您应该能够创建某种自动化系统来准备具有类似配置的新服务器。
如果您不关心“行业标准”,那么还有另一种选择 - 仅rsync
/tar
整个服务器(您需要停止数据库,或省略它们以rsync
避免文件结构不一致),以便您可以在全新安装的 ubuntu 16.04 上解压它以在另一个位置获得完全相同的机器。
答案2
我能想到的唯一方法是:
找到所有已安装软件包的列表,并在目标机器上重新安装它们;然后找到所有更改/添加的配置文件,并使用 tar/rsync/whatever 将它们复制到目标机器上;
如果您不能/不愿通过直接 RAW 复制进行克隆,则可以使用 tar/rsync(带有适当的参数)将源数据完全克隆到新机器。
您可以使用文件系统转储工具(例如:dump2fs、xfsdump、fsarchiver 等)转储整个文件系统,并在新机器上恢复它;
使用 clonezilla/dd/ddrescue 克隆物理磁盘(克隆根本不需要虚拟环境)并在目标机器上恢复映像。这需要 livecd 启动的源机器或源卷的 LVM/BTRFS/ZFS 快照。