![克隆正在运行的虚拟机的磁盘并在 VirtualBox 上运行它](https://linux22.com/image/90727/%E5%85%8B%E9%9A%86%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%9A%84%E7%A3%81%E7%9B%98%E5%B9%B6%E5%9C%A8%20VirtualBox%20%E4%B8%8A%E8%BF%90%E8%A1%8C%E5%AE%83.png)
我处于以下情况:
我需要通过 SSH“克隆”正在运行的 CentOS 虚拟机的磁盘(sda、sdb)(我按照以下步骤完成了此步骤本指南)并将它们部署在 VirtualBox 之类的东西上。
我尝试过,但不幸的是,在获取 sda 和 sdb 的原始映像并使用 VBoxManage 将它们转换为 VHD 后,我将它们添加到新的 VM 中,启动时出现“无可启动媒体”。
您有什么建议吗?
我尝试使用 CentOS live CD 进行自动恢复,但没有找到任何可恢复磁盘;我还尝试使用 fdisk 获取任何信息,但不幸的是它似乎无法读取任何分区......
非常感谢您的帮助!
答案1
如果您可以从 Live CD 启动进行网络访问,您应该能够执行如下操作:
在 VirtualBox VM 上运行的 Live CD 中获取 root shell
根据需要对虚拟磁盘进行分区和格式化。如果 LVM 工具位于 Live CD 上,您甚至可以使用 LVM。
跑步
mkdir -p /target
将您想要的 rootfs 安装在 /target 上,为任何安装点创建目录(例如 /target/home、/target/var 等)并安装适当的分区。
cd /target
rsync -a --exclude proc/** --exclude sys/** --exclude dev/** root@remoteVM:/ ./
(该 rsync 命令可能需要微调。使用--dry-run
选项运行,直到它正确为止)
for i in dev dev/pts proc sys ; do mount -o bind /$i /target/$i ; done
chroot /target
。/etc/fstab
并根据需要进行编辑/etc/default/grub
以适应新系统。update-grub
exit
卸载 /target 及其下的所有内容(包括上面的绑定挂载)
重启。
或者,rsync
您可以使用tar
来备份远程虚拟机的文件系统,并将 tar.gz 文件放在可以从 Live CD 中获取的位置。从备份中排除 /proc、/dev 和 /sys 目录。
注意:如果您正在运行 mysql 或 postgres 或任何写入 db 文件或其他非纯文本文件的东西,您需要在rsync
.运行数据库备份将所有数据库转储到文本也是一个好主意。
在 rsync 期间写入纯文本文件(例如日志文件)并没有那么危险,如果您不介意丢失运行 rsync 后发生的任何日志条目......至少不会有任何文件损坏可能的。
systemd 的日志是二进制的。因此,如果您正在运行 systemd,则需要关闭日志以避免损坏。我不知道在不关闭系统的情况下这是否可能。