![XenServer:启动前编辑克隆配置](https://linux22.com/image/579312/XenServer%EF%BC%9A%E5%90%AF%E5%8A%A8%E5%89%8D%E7%BC%96%E8%BE%91%E5%85%8B%E9%9A%86%E9%85%8D%E7%BD%AE.png)
克隆基础映像后,我需要重新配置基本设置。重新生成 ssh 主机密钥、更改静态 IP 分配、设置主机名等。
由于网络设置,DHCP 不是一种选择。这或多或少排除了使用预定义密钥进行 SSH 连接或运行启动脚本的可能性,因为我无法从外部提供 IP。
我非常想在 Dom0 上安装新机器的文件系统,但是 lvm 卷已被导出,而将它们导入以便 Dom0 机器能够看到它们似乎是一种错误的形式。
对于在启动前更改克隆 VM 中的文件,您最好的建议是什么?必须是非交互式的,我猜通过脚本访问xe console
不会很好地工作。
答案1
您应该做一些部署系统(例如 Open Nebula)所做的事情 - 创建一个由个性化数据组成的微型第二个驱动器。
配置您的图像以期望第二个驱动器存在(可能具有已知的 UUID 或文件系统名称),如果存在,则读出个性化数据并在启动期间将其应用于操作系统。
Open Nebula 的另一个很酷的选项是将 IP 地址嵌入到 MAC 地址中。在您的 domU 中解码它,您就设置好了!
或者,只需使用 IPv6 自动配置。:)
答案2
由于网络设置,DHCP 不是一种选择。这或多或少排除了使用预定义密钥进行 SSH 连接或运行启动脚本的可能性,因为我无法从外部提供 IP。
那么如何使用静态 IP 作为“构建 IP”,使用已知密钥在此已知 IP 上启动映像并启动登录、重新配置和重新启动的脚本呢?
答案3
配置基础镜像为
- 自动 IP
- 下载配置 tarball
- 通过 ftp 或者其他简单的方式
- 根据机器独有的信息(例如 MAC 地址)来命名 tarball 名称
- 来自已知地址(例如 169.254.0.1 或 fe80::1)
- 解压 tar 以应用配置
- 重启
如果您愿意,还可以发挥真正的创造力;根据下载请求自动生成 tarball,可能基于数据库信息,通常基于配置框架。
答案4
显然,vgexport/vgimport 不是将驱动器从一个系统移动到另一个系统所必需的。它是一种管理策略工具,用于在移动卷时阻止对卷的访问。
vgchange -a y
将所有卷标记为可用,但这对我没有帮助,因为它们不是直接分区。它们是虚拟磁盘映像,其中包含分区表。
然后我偶然发现了下面的脚本http://www.mceith.com/blog/?p=112. 直接将磁盘附加到虚拟机...根据需要进行调整,重新调用卸载。
#!/bin/bash
# [email protected] 2011
if [ ! -n "$1" -o ! -n "$2" -o ! -n "$3" ]; then
echo "Usage: $0 <target vm uuid> <control domain uuid> <mount|umount>"
exit 1
fi
case "$3" in
mount)
if [ -f /tmp/tmpvbd ]; then
echo "VBD allready exists!"
exit 1
fi
# Get uuid of vm you want to configure
VMUUID=`xe vbd-list vm-uuid=$1 params=vdi-uuid empty=false --minimal`
# Create VBD link to VM VDI on dom0
NEWVM=`xe vbd-create vm-uuid=$2 vdi-uuid=$VMUUID device=1`
# Plug it to dom0
xe vbd-plug uuid=$NEWVM
VM_VDEV=`xe vbd-list uuid=$NEWVM params=device --minimal`1
# Lag
sleep 1
# Mount it
mount /dev/$VM_VDEV /mnt/newvm
echo $NEWVM > /tmp/tmpvbd
# Do what ever you like
# ....
;;
umount)
if [ ! -f /tmp/tmpvbd ]; then
echo "No VBDs mounted?"
exit 1
fi
umount /mnt/newvm
NEWVM=`cat /tmp/tmpvbd`
# Unplug
xe vbd-unplug uuid=$NEWVM
xe vbd-destroy uuid=$NEWVM
rm -f /tmp/tmpvbd
;;
esac
exit $?