将正在运行的物理服务器复制到 Virtual Box

Guy*_*Guy 7 server virtualbox rsync

我有一台运行 Ubuntu 10.04 的服务器。由于我想测试一些维护工作,例如升级到 12.04,我想我应该使用 Virtual Box 创建服务器的 VM 副本。我没有对服务器的物理访问权限,因此我考虑了以下选项:我愿意

  • dd将整个硬盘转换为我电脑上的原始图像,然后根据原始dd图像创建 VDI 。
  • 安装相同的 ubuntu 版本,在本地安装更新和挂载 VDI,并将文件系统从服务器同步到挂载的 VDI,创建服务器的逻辑副本。

rsync 解决方案有点复杂,但似乎可以节省带宽,并允许我使用稍微不同的配置(例如较小的磁盘)创建服务器的“副本”。

你认为最好的方法是什么?以上方法之一?不一样的?

Guy*_*Guy 3

直接使用rsync结果比我最初想象的问题更多:

  1. 该命令需要在远程计算机上以 root 身份运行。
  2. 我不想启用远程 root 登录。
  3. 文件系统基于 LVM,从 VDI 文件中的 LVM 内部挂载 VM 的实际根分区非常麻烦。

由于这些原因,我最终采用了两步流程:

  1. 将所有文件从远程计算机复制到本地主机。
  2. 将文件复制到来宾。

我最终选择了 basic tar,尽管我可以使用rdiffdirby 提供的duplicity来节省一些带宽。

我首先设置了一个 SSH 隧道,我可以用它来传输文件tar,这样我就不必将存档写入我正在复制的文件系统。

local$ ssh user@remote -R 3000:localhost:3000
loacl$ nc -l 3000 > filesystem.tar.gz
remote$ sudo tar -vcz / --exclude={/dev,/proc,/sys,/tmp} | nc localhost 3000
Run Code Online (Sandbox Code Playgroud)

这在我的本地主机上创建了整个文件系统的 tar 存档。下一步是在来宾上解压它:

guest$ cd /
guest$ nc -l 3000 | sudo tar -xvz
local$ nc guest_ip 3000 < filesystem.tar.gz 
Run Code Online (Sandbox Code Playgroud)

就我而言,/etc/fstab通过 UUID 引用文件系统,因此我必须使用guest$ sudo blkid. 我还必须更新/etc/udev/rules.d/70-persistent-net.rules(接口名称)和/etc/network/interfaces(IP 地址)中的网络设置。