冷迁移(cold migration)vmware虚拟机MAC地址发生变化后的重置脚本

简介:
之前遇到的情况。
我的解决方案:
一、手动修改网卡的配置文件,把MAC地址改成当前网卡实际的;
二、更改网卡的MAC地址,这在Linux或UNIX下还是很简便的。
 
我选择了第一种方案,可是如果网卡有多块的话,那修改起来不是很费事,可如果有多台虚拟机要迁移。工作量也不是很小。
 
所以抽空写了个脚本。当然只是针对Linux服务器的,如果是UNIX请做相应的调整。
 
测试系统:
Vmware Workstation6.5
RedHat 5u3
bash 3.2
服务器三块网卡,网卡模块已经正常加载:分别为eth0 eth1 eth2
 
实现功能及容错:
1.判断给定IP是否合法
2.支持多块网卡同时修改IP
3.支持临时跳过某块网卡的设置
4.其中判断IP的默认掩码的模块可以重用
5.自动重新启动网络服务,使配置生效
 
欢迎大家就有关问题与我讨论:
#!/bin/bash 
# Vmware workshop 时常出现网卡的mac地址和IP地址发生改变的情况,本脚本用于还原网卡配置文件中的真实MAC地址。 
# 但请在还原配置文件前备份您的网卡配置文件(固定IP地址) 
# By wang_xiaoyu@qq.com 
# Sun May 10 20:07:51 CST 2009 
# 2009-06-08 00:51:30 
# 2009-08-30 13:02:08 Added: test ifcfg-eth*.bak exist 
# 2009-09-07 21:41:15 tidy codes 
# 2009-09-09 23:18:39 add comments 
# 记录日志 
exec 2>> $0.error 
# 提供帮助信息 
Usage(){ 
case $1 in 
  how) 
  echo "Usage: `basename $0` <eth0 IP> [ <eth1 IP> [ ... <ethn IP> ]]" 
  exit 1 
  ;; 
  IPerror) 
  echo "Wrong host IP : $2" 
  exit 2 
  ;; 
  IFerror) 
  echo "The interface eth$1 is not found! " 
  exit 3 
  ;;    
esac 

# 测试IP地址是否合法,合法则返回IP的掩码,不合法返回错误信息 
IPmask(){ 
  # 把IP分段处理,存储到数组IP中 
  IP=(`echo $1 | awk 'BEGIN{RS=".";ORS=" "}{print $0}'`) 
  # 测试每段的值,来判断IP的掩码 
  # 非法的IP地址(包含D类地址),不做判断,返回错误信息 
  [ ${IP[1]} -gt 255    -o ${IP[2]} -gt 255 ] && Usage IPerror $1 
  [ ${IP[0]} -ge 224 -o ${IP[0]} -lt 0 -o ${IP[3]} -ge 255 -o ${IP[3]} -le 1 ] && Usage IPerror $1 
  # 分别判断是ABC哪一类地址 
  if [ ${IP[0]} -gt 191 ]; then 
                  echo -n "255.255.255.0" 
  elif [ ${IP[0]} -gt 127 ]; then 
                 echo -n "255.255.0.0" 
  else echo -n "255.0.0.0" 
  fi 


# 没有参数时显示帮助信息。 
if [ $# -lt 1 ]; then 
  Usage how 
fi 

cd /etc/sysconfig/network-scripts 

# 测试所设置的网卡参数是否合法 
for i in `seq 0 $(($#-1))` 
do 
  if [ ! -f ifcfg-eth$i ]; then 
    Usage IFerror eth$i 
  fi 
  if eval IPmask \$$((i+1)) >/dev/null; then 
    continue 
  fi 
done 

# 自动生成配置模板 
cat > ifconfig.mod <<-'End-of-ifconfig-mod' 
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] 
DEVICE=eth2 
BOOTPROTO=none 
ONBOOT=yes 
HWADDR=00:0C:29:0B:B5:DC 
NETMASK=255.255.255.0 
IPADDR=192.168.2.2 
TYPE=Ethernet 
End-of-ifconfig-mod 

# 替换默认的网卡配置文件的备份 
for i in `seq 0 $(($#-1))` 
do 
    cp --verbose --interactive ifconfig.mod    ifcfg-eth$i.bak 
    echo "Copying the template interface configure files : ifcfg-eth$i.bak ([No]|Yes)" 
done 
j=0 
while [ $# -gt 0 -a -f ifcfg-eth$j.bak ] 
do 
    # 修改备份好的模板文件 
    sed -ri 's/^(NETMASK=).*$/\1'$(IPmask $1)'/' ifcfg-eth$j.bak     
    sed -ri 's/^(IPADDR=).*$/\1'$1'/' ifcfg-eth$j.bak 
    sed -ri 's/^(DEVICE=eth).$/\1'$j'/' ifcfg-eth$j.bak 
    sed -ri "s/^(HWADDR=).*$/\1`ifconfig eth$j | head -1 | awk '{ print $NF }'`/" ifcfg-eth$j.bak 
    # 或者使用:sed -ri "s/^(HWADDR=).*$/\1`echo $(ifconfig eth0 | head -1 | awk '{ print $NF }')`/" ifcfg-eth0.bak 
    # 还原网卡eth0的配置文件,请确认 
    cp --verbose --interactive ifcfg-eth$j.bak ifcfg-eth$j 
    echo "Please confirm ([No]|Yes)" 
  ((j++)) 
  shift 

done 
rm -rf ifconfig.mod 
# 重新启动网卡 
/etc/rc.d/init.d/network restart 
# 把dhclient进程杀死,因为虚拟机总是受默认dhcp网关的影响 
if pkill dhclient; then 
  echo "The process of 'DHCP Client' has been killed just now!!!! " 
else 
  echo "The process of 'DHCP Client is not exsit always!    " 
fi
 
 
 
 
     本文转自xiaoyuwang 51CTO博客,原文链接:http://blog.51cto.com/wangxiaoyu/200087,如需转载请自行联系原作者

相关文章
|
1月前
|
Ubuntu 网络安全 虚拟化
VMware虚拟机ping不通原因排查及分析
下面以 VMware 虚拟机为例进行介绍。
843 3
|
1月前
|
存储 SQL 数据库
虚拟化数据恢复—Vmware虚拟机误还原快照的数据恢复案例
虚拟化数据恢复环境: 一台虚拟机从物理机迁移到ESXI虚拟化平台,迁移完成后做了一个快照。虚拟机上运行了一个SQL Server数据库,记录了数年的数据。 ESXI虚拟化平台上有数十台虚拟机,EXSI虚拟化平台连接了一台EVA存储,所有的虚拟机都存放在EVA存储上。 虚拟化故障: 工组人员误操作将数年前迁移完成后做的快照还原了,也就意味着虚拟机状态还原到数年前,近几年数据都被删除了。 还原快照相当于删除数据,意味着部分存储空间会被释放。为了不让这部分释放的空间被重用,需要将连接到这台存储的所有虚拟机都关掉,需要将不能长时间宕机的虚拟机迁移到别的EXSI虚拟化平台上。
111 50
|
2月前
|
安全 虚拟化 数据中心
Xshell 连接 VMware虚拟机操作 截图和使用
Xshell 连接 VMware虚拟机操作 截图和使用
81 4
|
2月前
|
Linux 虚拟化
vmware虚拟机安装2024(超详细)
vmware虚拟机安装2024(超详细)
406 6
|
2月前
|
虚拟化 网络虚拟化 网络架构
虚拟机 VMware Workstation 16 PRO 的网络配置
虚拟机 VMware Workstation 16 PRO 的网络配置
95 2
|
6月前
|
Unix Linux 虚拟化
虚拟机VMware知识积累
虚拟机VMware知识积累
|
3月前
|
存储 SQL 数据挖掘
虚拟化数据恢复—VMware虚拟机vmdk文件被误删除的数据恢复案例
虚拟化数据恢复环境: 某品牌服务器(部署VMware EXSI虚拟机)+同品牌存储(存放虚拟机文件)。 虚拟化故障: 意外断电导致服务器上某台虚拟机无法正常启动。查看虚拟机配置文件发现这台故障虚拟机除了磁盘文件以外其他配置文件全部丢失,xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件还在。管理员联系VMware工程师寻求帮助。VMware工程师尝试新建一个虚拟机来解决故障,但发现ESXi存储空间不足。于是将故障虚拟机下的xxx-flat.vmdk磁盘文件删除,然后重建一个虚拟机并且分配固定大小的虚拟磁盘。
|
4月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
198 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
4月前
|
编解码 Linux 虚拟化
超详细VMware虚拟机安装Win10操作系统过程图解
这篇文章提供了一个详细的VMware虚拟机安装Windows 10操作系统的图解教程,包括了从创建虚拟机到安装操作系统的全过程,以及安装后的一些基本设置,如屏幕分辨率调整等。作者还提到了后续会分享关于磁盘分区的创建过程。
超详细VMware虚拟机安装Win10操作系统过程图解

相关实验场景

更多