有没有办法复制服务器的快照

有没有办法复制服务器的快照

我有一台安装了 Apache、Oracle 和 PHP 的 Redhat Linux 服务器。我将此服务器用作生产服务器,并且想创建一个与生产服务器具有相同配置/产品版本的新测试服务器。有没有办法从生产服务器复制所有安装/配置,然后在另一台服务器上安装/复制?

答案1

假设您已经安装了来自官方存储库的所有内容,则该过程如下:

  1. 获取源服务器上的包列表
  2. /etc在源服务器上进行备份
  3. 如果你有其他配置需要复制,比如下面的网页/脚本/var/www等,也请/home备份/root这些
  4. 在新机器上执行全新安装
  5. 使用步骤 1 中找到的软件包列表将软件包排列在新机器上
  6. /etc用第一台机器的备份复制替换内容但如果机器位于同一个网络上,则需要注意文件的变化,/etc/hostname例如/etc/samba/smb.conf
  7. 如果在步骤 3 中备份了更多文件/设置,则恢复其他文件/设置
  8. 如果需要多台机器,请对每台机器重复步骤 4 至 7

要在 Debian 或类似系统中获取步骤 1 中的软件包列表,请使用sudo dpkg --get-selections '*' > selection.dpkg,并在步骤 5 中在新机器上安装软件包,请使用 ,sudo dpkg --set-selections < myselection.dpkg --set-selections < myselection.debconf然后使用sudo apt-get -u dselect-upgrade。如果遇到任何错误,请确保已安装 debconf-utils 软件包sudo aptitude install debconf-utils(事实上,在开始之前运行这个命令是值得的,因为如果软件包已经存在,它将什么也不做)。

我不太熟悉yum(RadHat 等使用它来代替 dpkg 和 apt*),但我认为它有类似的功能 - 查看文档或看看yum专家是否有人发布了对这个问题的回答(或对这个答案的评论)并附有详细信息。yum list installed可能是从哪里开始。

虽然不是必需的(无论如何配置都应该存在于备份中/etc),但记录软件包配置选择并将其应用于新机器也是一个好主意。这样,如果您执行强制重新配置软件包的操作,就不会冒意外将某些内容恢复为默认设置的风险。在 Debian-a-likes 上,添加sudo debconf-get-selections > selection.debconf到步骤 1 并sudo debconf-set-selections < myselection.debconf在步骤 5 之前运行。

编辑,关于:Oracle:

当您将 Oracle 列为已安装的软件之一时,您从软件包中安装所有内容(除非 Oracle 是通过自定义存储库安装的,在这种情况下,在步骤 5 之前将该存储库添加到新服务器的配置中,它可能会起作用)。您需要查阅 Oracle 文档(或咨询 Oracle 专家)以了解如何备份所有必需的文件和配置并将其还原到目标计算机。

或者,您可以直接获取机器硬盘的映像(使用简单的工具dd,或更专业的磁盘/文件系统克隆工具),然后将映像还原到目标机器,然后进行特定于机器的更新,例如更改主机名。这可能需要更长时间,需要更多存储空间(但可能更容易),因为您可能会复制大量驱动器的映像。

答案2

您可以像这样复制已安装的软件包集:

  • 在生产服务器上,获取输出rpm -qa

    rpm -qa > list-of-packages
    
  • 在您的开发服务器上,将该包列表传递给yum

    yum install $(cat list-of-packages)
    

只要您的开发服务器尚未安装该软件包的较新版本,这就可以正常工作(因为 yum 不喜欢降级软件包)。

正如 Spillet 先生所说,如果您有安装在正常存储库列表之外的软件包,您将必须手动处理这些软件包。

一般来说,复制配置文件是一个手动过程,除非您已采取措施在生产服务器上记录哪些文件已从其库存配置中修改。我们经常使用版本控制系统(如git) 来实现此目的。假设您安装的所有软件包都运行良好,您可能能够执行如下操作来获取配置文件列表:

rpm -qac

这就是-q对于--query-a对于--all,以及-c对于--configfiles

假设两个系统之间有 ssh 访问,那么您可以执行以下操作将它们全部复制到您的开发服务器:

cd /
ssh production 'rpm -qac | cpio -o' | cpio -iuvd

...但是,我不确定我是否建议在过程中这样做,因为它可能会覆盖目标系统上包含系统特定信息(即,某种程度上是硬件特定的)的某些内容。如果您采用某种版本控制,问题就会减少(因为您可以识别更改并根据需要恢复它们)。

相关内容