目录
vmware与主机克隆
工作中会遇到一些情况,比如部署多套集群,需要测试环境,此时需要通过一台模板机器,克隆,再登录到节点,手动修改ip,重置主机名称等,这对于批量操作很慢,而且不利于主机管理,而且只能一台操作完,再操作另一个台机器,这样很麻烦
所以想实现,克隆模板机后,启动新机器,从而直接获取新的ip,这样会很方便顺利
这里涉及到一些知识点
- 虚拟机与hosts主机配置文件挂载
- linux机器配置开机自动启动脚本
- 编写修改ip的脚本,与ip的配置文件关联,且只在第一次初始化时生效
一 实现虚拟机与hosts主机配置文件挂载通信
1.配置虚拟机挂载信息
核心 open-vm-tools 软件包中包含核心 open-vm-tools 用户空间实用程序、应用程序和库(包括 vmtoolsd),以帮助有效管理您的主机与客户机操作系统之间的通信 open-vm-tools
yum install open-vm-tools
创建挂载目录,作为挂载点
mkdir -p /mnt/linux-share
写入挂载配置文件/etc/fstab
cat /etc/fstab
....
# share host file for linux vm system
.host:/linux-share /mnt/linux-share fuse.vmhgfs-fuse allow_other 0 0
.host:/linux-share
表示hosts主机上的目录,这个目录是与vmware指定共享的名称相关,并不与hosts上的实际目录有直接关系
/mnt/linux-share
表示挂载点
fuse.vmhgfs-fuse
表示使用FUSE(用户空间文件系统)与VMware的vmhgfs
(VMware主机-客户机文件系统)来挂载
allow_other
: 表示允许所有访问
0 0
: 表示不备份,不检查
2.配置vmware创建共享目录
在虚拟机关机状态下,点开设置,选项,共享文件夹,下面有个文件夹共享
,选择,总是启用,在文件夹下,选择添加,配置共享文件夹属性的名称与主机路径
注意,每次克隆虚拟机时,需要注意,共享文件夹是否启用,否则会导致共享失败,从而出现磁盘挂载的问题
3.实现虚拟机挂载hosts主机目录
[root@rocky-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda5 90G 2.8G 88G 4% /
/dev/sda2 2.0G 173M 1.9G 9% /boot
tmpfs 389M 0 389M 0% /run/user/0
[root@rocky-linux ~]# mount -a
[root@rocky-linux ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.0M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda5 90G 2.8G 88G 4% /
/dev/sda2 2.0G 173M 1.9G 9% /boot
tmpfs 389M 0 389M 0% /run/user/0
vmhgfs-fuse 932G 289G 643G 32% /mnt/linux-share
[root@rocky-linux ~]# cat /mnt/linux-share/
ip_address.txt 新建文本文档.txt
好了,到现在,能经实现了第一步,将hosts主机上的内容挂载到虚拟机内,并且实现了文件内容显示在虚拟机内
二 linux机器配置开机自动启动脚本
实现开机自动启动有多种方法
- 添加命令到文件
/etc/rc.local
- 配置
serivce
开机自动启动 - 配置
/etc/rc.d/init.d
目录下,配置权限
这里只使用第一种方式,用于开机自动启动
[root@rocky-linux ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Mar 7 23:42 /etc/rc.local -> rc.d/rc.local
默认/etc/rc.local
是有执行权限的,但是没用
有用的是/etc/rc.d/rc.local
,要设置此文件执行权限
[root@rocky-linux ~]# chmod +x /etc/rc.d/rc.local
[root@rocky-linux ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 494 Sep 2 21:07 /etc/rc.d/rc.local
执行脚本的文件,添加配置脚本如下,最后一行为配置内容
cat /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
sh /etc/test_init.sh
查看/etc/test_init.sh
脚本文件
#!/bin/bash
echo `date` > /tmp/tmp_init.log
此文件内容,只简单将时间写入到临时文件中
重新虚拟机,检查开机自动启动脚本的日志文件内容,这说明脚本启动成功
[root@rocky-linux ~]# cat /tmp/tmp_init.log
Mon Sep 2 22:30:20 CST 2024
三 配置修改ip脚本文件
此处描述下脚本基本逻辑
/etc/.ip_configured
文件表示是否执行过/etc/test_init.sh
脚本,文件存在即虚拟机的ip是修改过,否则不做任何操作
/mnt/linux-share/ip_address.txt
与宿主机的共享目录,里面只写了一个ip的后缀,默认的ip范围区间为50-100,文件不存在,则将50写入到文件中
则50这个ip再加上ip的网络位,达成了完整的主机ip地址,即新的ip地址
后面就是通过sed命令替换ip,创建文件/etc/.ip_configured
,实现虚拟机不再修改ip的操作
之后再重启虚拟机,实现ip的更新
脚本内容如下,vim /etc/test_init.sh
#!/bin/bash
echo `date` > /tmp/tmp_init.log
# 标记文件的路径
FLAG_FILE="/etc/.ip_configured"
# 检查标记文件是否存在
if [ -f "$FLAG_FILE" ]; then
echo "IP address already configured. Skipping IP assignment."
exit 0
fi
# 定义IP地址范围
START_IP=50
END_IP=100
IP_PREFIX="192.168.232"
IP_FILE="/mnt/linux-share/ip_address.txt" # 假设已挂载共享目录
# 如果文件不存在,初始化IP地址
if [ ! -f "$IP_FILE" ]; then
echo $START_IP > $IP_FILE
fi
# 获取当前IP地址
CURRENT_IP=$(cat $IP_FILE)
# 检查IP地址是否在范围内
if [ $CURRENT_IP -le $END_IP ]; then
# 设置新的IP地址
NEW_IP="$IP_PREFIX.$CURRENT_IP"
echo "Configuring IP: $NEW_IP"
# 递增IP
NEXT_IP=$((CURRENT_IP + 1))
echo $NEXT_IP > $IP_FILE
sed -i "s#IPADDR=.*#IPADDR=$NEW_IP#g" /etc/sysconfig/network-scripts/ifcfg-ens33
# 创建标记文件,表明IP已经配置
touch "$FLAG_FILE"
echo "IP address configured. Future startups will not change the IP."
reboot
else
echo "IP range exceeded. No more IP addresses available."
exit 1
fi
最后再登录验证即可,这将实现启动克隆虚拟机,实现指定目标ip,方便ansible对其的批量操作,也算是解放一些生产力
标签:IP,克隆,ip,linux,rc,1.9,etc,主机,vmware From: https://www.cnblogs.com/anyux/p/18393735