|
|
发表于 2025-7-27 00:01
来自手机
|
显示全部楼层
本帖最后由 Yulin0310 于 2025-7-27 00:06 编辑
我的案例是,我创建了一个Win10系统的虚拟机,硬盘用的NAS的ISCSI磁盘,这个NAS也是虚拟机。
我NAS还是正常开机启动,WinOS不要自启,利用脚本来启动,代码处方法如下。
#!/bin/sh
#
# ------------------------------------------------------------------------
# ESXi 启动后延时挂载 iSCSI 并启动指定虚拟机的自动脚本
# ------------------------------------------------------------------------
#
# 【脚本功能】
# - 系统开机后延迟一段时间(等待网络/iSCSI 服务就绪)
# - 扫描 iSCSI 存储适配器和 VMFS 卷
# - 启动指定名称的虚拟机
#
# 【使用说明】
#
# 1. 创建脚本目录(如果还没有):
# mkdir -p /vmfs/volumes/datastore1/scripts
#
# 2. 进入该目录并新建脚本文件:
# cd /vmfs/volumes/datastore1/scripts
# vi iscsi-delay-start.sh
# (粘贴此脚本内容后按 Esc,输入 :wq 保存并退出)
#
# 3. 赋予脚本执行权限:
# chmod +x /vmfs/volumes/datastore1/scripts/iscsi-delay-start.sh
#
# 4. 编辑 ESXi 启动脚本:
# vi /etc/rc.local.d/local.sh
#
# 5. 在文件末尾的 `exit 0` 之前插入以下一行(注头插入):
# /vmfs/volumes/datastore1/scripts/iscsi-delay-start.sh &
#
# 👈 注意最后的 `&` 非常重要:
# - `&` 表示“后台运行”该脚本
# - 如果不加 `&`,ESXi 会等待整个脚本执行完成(比如 sleep 360 秒)才继续启动,
# 可能导致系统启动缓慢甚至失败
# - 加了 `&`,脚本会在后台执行,系统启动流程能正常继续
#
# 6. 保存退出并重启主机测试是否生效:
# reboot
#
# 【可选】脚本会将结果写入日志,可查看以下文件:
# cat /var/log/iscsi-vm-start.log
#
# ------------------------------------------------------------------------
# 自定义延迟时间(单位:秒)
DELAY_SECONDS=360
# 指定要启动的虚拟机名称(区分大小写)
VM_NAME="WinOS"
# 延迟指定时间(等待网络/iSCSI 初始化完成)
sleep $DELAY_SECONDS
# 扫描所有存储适配器(包括 iSCSI)
esxcli storage core adapter rescan --all
vmkfstools -V
# 获取虚拟机 ID(VMID)
VM_ID=$(vim-cmd vmsvc/getallvms | grep "$VM_NAME" | awk '{print $1}')
# 启动虚拟机
if [ -n "$VM_ID" ]; then
echo "$(date): 已启动虚拟机 $VM_NAME (ID: $VM_ID)" >> /var/log/iscsi-vm-start.log
vim-cmd vmsvc/power.on "$VM_ID"
else
echo "$(date): 未找到虚拟机 $VM_NAME" >> /var/log/iscsi-vm-start.log
fi
# 结束脚本
exit 0
|
|