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

我有Apache,Oracle和PHP的红帽Linux服务器。 我将此服务器用作生产服务器,我想创build一个与生产服务器具有相同configuration/产品版本的新testing服务器。 有没有办法从生产中复制所有的安装/configuration,在另一台服务器上安装/复制。

假设你已经安装了来自官方仓库的软件包,那么这个过程将是:

  1. 获取源服务器上的软件包列表
  2. 在源服务器上备份/etc
  3. 如果你有任何其他configuration要复制,像/var/www下的网页/脚本和/home/root东西也要备份
  4. 在新机器上执行全新安装
  5. 使用步骤1中find的软件包列表,在新机器上获取软件包
  6. 复制/etc的内容replace为第一台机器的备份, 但是要注意如果这些机器要与/etc/hostname/etc/samba/smb.conf在相同的networking上,则需要改变这些文件
  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 。 如果你遇到任何错误,确保你已经用sudo aptitude install debconf-utils安装了debconf-utils软件包(事实上,在开始之前,这是值得运行的,因为如果软件包已经存在)。

我不太熟悉yum (RadHat使用的,而不是dpkg和apt *),但我认为它有类似的function – 检查文档或挂在周围,看看如果一个yum专家发布这个问题的答案或对这个答案的评论)与细节。 yum list installed可能是从哪里开始的。

这也是一个好主意,虽然不是必须的(configuration应该存在于/etc的备份中),以保持包configurationselect的logging并将其应用到新机器上。 这样,如果你做了一些强制重新configuration包的事情,你不会冒任何意外的风险。 在Debian-a-likes上添加sudo debconf-get-selections > selection.debconf到步骤1,在步骤5之前运行sudo debconf-set-selections < myselection.debconf

编辑,重新:甲骨文:

当你把Oracle列为已安装的东西之一时,你并没有从软件包中安装所有东西(除非Oracle是通过定制的repo来安装的,在这种情况下,在第5步之前将该repo添加到新服务器的configuration中, 。 您需要咨询Oracle文档(或Oracle专家),以了解如何备份所有必需的文件和configuration,并将其恢复到目标机器。

或者,您也可以只使用计算机的硬盘驱动器(使用简单的dd或更专用的磁盘/文件系统克隆工具)来映像,然后将映像恢复到目标计算机,然后使用计算机专用的更新,如更改主机名。 这可能需要更长的时间,并需要更多的存储空间(虽然可能会更容易),因为您可能正在复制大规模驱动器的图像。

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

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

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

     yum install $(cat list-of-packages) 

只要你的开发服务器还没有安装更新版本的软件包(因为yum不喜欢降级软件包),这将会很好的工作。

正如Spillet先生所说,如果你的软件包已经安装在你的正常的软件仓库列表之外,那么你必须手工处理这些软件包。

通常,复制configuration文件是一个手动过程,除非您已经采取措施在生产服务器上logging哪些文件已从其库存configuration修改过。 我们经常使用版本控制系统(如git )来达到这个目的。 假设所有已安装的软件包运行良好,您可能可以这样做来获取configuration文件列表:

 rpm -qac 

对于--query-q用于--all-c用于--configfiles

假设两个系统之间有ssh访问,那么你可以这样做,把它们全部复制到你的开发服务器上:

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

…但是,我不确定我会推荐这个过程,因为它可能会覆盖具有特定系统信息的目标系统上的东西(也就是,硬件特定的)。 如果你采用某种版本控制,这个问题就不会那么严重了(因为你可以根据需要识别更改并恢复它们)。