我有两台服务器,A 和 B。我想将服务器 A 克隆到 B。A 运行 Linux,它们都是远程的,我无法对它们进行物理访问
解决这个问题的最佳方法是什么?
答案1
至少有三种不同的方法可以做到这一点。
1 个脚本设置。
此选项主要适用于具有适当文档的大型公司,并且可能扩展到具有 PXE 启动和 puppet 或类似设置的设置。
基本上,您在服务器 B 上重复配置服务器 A 的相同步骤。
如果您的设置足够大,那么这会非常有效(例如,您正在运行 100 台服务器,并且想要启动服务器 101。PXE 启动,告诉您的 puppet 配置它需要是 $type 的服务器,并在一小时后回来。完成!)。
设置工作量很大,但之后就完美了。而且,由于需要进行大量设置工作,复制一次设置可能不值得。
2 文件系统复制。
您可以将所有文件从服务器 A 复制到服务器 B,保留其权利和用户。rsync
可能是实现此目的的最佳工具。
为此,您需要准备具有类似设置的目标服务器(例如复制分区设置),然后 rsync 大部分文件。这里棘手的部分是您不想 rsync 某些文件(例如跳过 /proc 和 /dev),并且您需要在服务器 B 上有一些东西来接收 rsync 文件。
最后,您可能希望从不同的磁盘启动服务器 B,或者使用 ILO/DRAC/.. 从桌面上的 liveCD iso 映像启动,使其磁盘保持空白并准备好接收 rsync 文件。
3 复制磁盘。
这与复制文件系统不同。这要容易得多,而且可能要快得多,但原始磁盘访问(例如使用 dd)会忽略所有文件系统更改。这意味着您真的不想复制正在运行的文件系统。
为了帮助您更轻松地理解这一点,请想象一本书。这本书有一个索引和四个故事。书的其余部分是空白的,这也很好地显示在书籍索引中。
现在我们开始复制。我们复制索引。我们复制故事 1,我们复制...
** 稍等片刻,让我在这里添加一个新故事并更改索引**
我们复制第 2、3、4 和 5 号站点...
我们现在有一本 q 书,其索引显示了四个故事(不是五个,因为我们在写第 5 个故事和五个故事之前复制了它)......一本腐败的书。
如果您使用原始磁盘访问来复制正在运行的系统,则可能会发生类似的事情。因此,在使用原始磁盘复制之前,请确保操作系统处于脱机状态。要么启动其他系统(例如从第二个磁盘、从本地 CD 或通过网络(PXE、DRAC 等)),然后进行复制。
[su] 上的大量帖子中已经详细介绍了如何执行此操作。
答案2
克隆远程 Linux 机器
bash 脚本备份图像-1.0.sh自动执行远程 Linux 机器的磁盘克隆过程。它使用命令dd
以及ssh
和gzip
命令来复制和压缩远程磁盘,并通过 SSH 连接将它们动态发送到本地磁盘。
使用 backup-images-1.0.sh 将远程磁盘克隆到本地磁盘的示例,该示例由 Radovan Brezula 编写,他编写了 backup-images-1.0.sh。
使用以下示例将本地磁盘克隆到远程磁盘dd
dd if=/path/to/disk/image ibs=4096 conv=notrunc,noerror | (ssh 132.183.12.128 dd of=/remote-archive/test/remote-archive-test.img obs=4096)
ibs=4096
一次最多读取 4096 个字节conv=notrunc,noerror
不截断输出文件并在读取错误后继续obs=4096
一次写入 4096 个字节
答案3
我相信 rsync 是解决方案。不过,我不确定在 rsync 会话期间是否所有文件都可写...
您是否考虑过对服务器 A 上的分区进行 dd 克隆并将其传输到服务器 B?这听起来有点疯狂,但也许是最后的手段?
答案4
对于磁盘映像,我喜欢克隆,但您需要物理访问才能从磁盘启动才能使其工作。老实说,我认为您无法进行完全无人值守的远程全系统复制。rsync 只能帮您到这里。如果两者都已安装完整系统,并且它们在其他方面完全相同,那么您可以在主机 B 上安装与主机 A 上相同的应用程序。然后只需将必要的配置文件从 A 复制到 B。您不一定需要复制一切。