VMware克隆

通过虚拟机克隆,可以方便的生成多台状态一样的虚拟机来使用。
右键虚拟机:管理 -> 克隆

链接克隆与完整克隆

完整克隆就是生成一个完全独立的虚拟机。所以这里主要说明一下什么是链接克隆。
链接克隆的最大优点:速度快,节省磁盘空间。虚拟机的CPU、内存等资源都是独立的,但是磁盘空间是基于原来的虚拟机产生的。链接虚拟机会在原来的虚拟机中创建一个以新虚拟机命名的快照,链接虚拟机本质上基于虚拟机的快照机制。
注意:由于是基于原虚拟机快照的,所以链接克隆后,原虚拟机会自动生成一个新的快照。这个快照是基于原虚拟机的,所以即使把链接虚拟虚拟机从磁盘移除了,这个快照也还会一直留在原虚拟机上。不要的话记得删除掉。
链接虚拟机是可以和原虚拟机同时运行的。如果是用来临时用一用的情况,比如测试,推荐用连接克隆。

解决克隆后的问题

克隆会导致所有虚拟机都具有相同的信息,现在各个机器的状态都是一样的,包括系统和硬件信息也是一样的,这就会有冲突。我们需要的是多个不同的主机,所以还需要做相应的修改,来解决冲突的问题。
主要是修改2个信息:

  • 主机名
  • 网卡

主机名

查看主机名:

hostname

临时修改主机名:

hostname 临时主机名

这个是临时修改,所以是不行的

查看主机名:

hostnamectl

永久修改主机名:

hostnamectl set-hostname 新主机名

还可以通过配置文件修改:

vi /etc/hostname

修改后立即生效,但是当前会话显示的主机名是不会变的。不过也不需要重启,登出再进入以后就好了。

网卡

查看网卡的UUID:

nmcli conn show

查看网卡的MAC地址:

nmcli dev show

MAC地址应该没问题,会自动生成一个不一样的,也不许要修改。
如果要改,则是在VMware的管理界面里,右键虚拟机:设置... ,然后选择网络适配器,再进入高级... ,在这个界面里可以生成MAC地址。

网卡主要修改的是IP地址和UUID。最方面的做法就是去直接修改网卡的配置文件。不过在那之前要先生成一个网卡的UUID:

uuidgen ens33

每次生成的uuid都会不一样,不过随便一个都能用了。

此时设备网络可能还会有问题,无法使用SSH工具,可能也无法复制粘贴。可以用下面的做法:

cd /etc/sysconfig/network-scripts/
uuidgen ens33 >> ifcfg-ens33

这样新生成的uuid就已经追加到网卡的配置文件中去了。

此时再去修改网卡的配置信息:

vi ifcfg-ens33

把原来的UUID那行删除,在最后一行添加上UUID=的字样。另外把IP地址等信息也修改好:

BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.12
PREFIX=24
GETWAY=192.168.1.1
DNS1=192.168.1.1
UUID=365359a4-d05b-4744-8407-ff58d88ccd3e

上面不是完整的网卡的配置文件,不过需要关注的配置基本上就是这些。一般只有IP地址和UUID需要修改。

最后重启网卡即可:

systemctl status network
systemctl restart network

Hyper-V的操作

毕竟是微软自家的,对Windows系统的支持应该没问题。当然Linux也能跑的很好,只是遇到了一点坑。

Linux 不兼容 Secret Boot

这里首先有一个坑,创建虚拟机的时候有一个选项“指定代数”,可以选择第一代或第二代。Windows Server 2012 R2 引入了第二代 Hyper-V 虚拟机,支持从 SCSI 硬盘引导。
第二代的虚拟机,默认开启了 Secret Boot,会校验 bootloader 的数字签名。但大多数 Linux 发行版都不支持这个机制。

我试下来,下面第二个方法通过磁盘创建,只有第一代虚拟机的Linux系统可以。如果选了第二代,即使关掉也无法成功复制。参考网上一些文章,基本都是建议Linux系统选择第一代虚拟机而不要去选第二代。

导出导入

在Hyper-V平台上可以通过导出/导入来操作。类似于备份还原,使用备份的文件可以还原出多个虚拟机。

导出
选择要进行克隆的虚拟机,右键导出。此时就是对虚拟机做一个备份。并且导出的文件也是之后导入要使用的。

导入
菜单栏的操作 -> 导入虚拟机...
在选择之前导出的文件夹,然后选择好虚拟机后,在选择导入类型的时候一个有3个选项。此时要选第三个复制虚拟机创建新的唯一ID。这里也只能选这个,另2个选了之后会提示错误。

虚拟机名称
导入完成后,虚拟机平台上虚拟机的名称需要改一下,此时会有2个同名的虚拟机。可以进入虚拟机的设置,查看资源所在的文件夹进行区分。重命名一下即可。
然后就可以开机进入系统了。

主机名
主机名的修改没什么特别的,和上面的一样,使用命令如下:

hostnamectl set-hostname 新主机名

网卡
网络可能直接就能通了。新生成的系统原来网卡的配置文件还保留着,但是生效的是另外一个配置,并且这个配置文件在目录下是没有的。
移除原有的网卡的配置文件,建议先用 mv 换个目录保存。
然后可以用 nmtui 命令,这是一个图形界面。进入后选择 "Edit a connection" 然后选择网卡 edit,修改当前这块网卡的 Profile name 后OK出来就能找到配置文件了。
即使不修改,直接OK出来也行,不过这里自动生成的网卡的名字可能不太合适正好一起改掉。这里新创建的配置文件的文件名是参照 Profile name 来生成的。这里之前如果做错了,还可以尝试在图形界面里把网卡 Delete 掉,然后系统又会自动生成一块新的,然后可以再 Edit 修改名字。

通过磁盘创建

还可以通过现有硬盘来创建虚拟机。先以某台机器为基础创建一块一样的硬盘,然后再创建虚拟机并且指定虚拟硬盘。可以创建差异磁盘,这个就相当于是链接克隆。

新建硬盘
菜单栏的操作 -> 硬盘...
在选择磁盘类型的时候,可以选择差异。这个就是链接克隆。
选其他两个也一样能实现虚拟机的克隆。就相当于是完整克隆。

新建虚拟机
菜单栏的操作 -> 虚拟机...
依然要选择第一代虚拟机。指定的代数要和原来的虚拟机一样才行。
连接虚拟硬盘的时候,要选择使用现有虚拟硬盘,然后就指定之前创建的硬盘就好了。

主机名和网卡
这两个依然需要进行修改来避免冲突,这个操作就很简单了,没什么问题。

Windows系统

如果创建的是Windwos系统,可以使用工具 sysprep 来清除Windwos系统上的唯一性信息。
执行“进入系统全新体验(OOBE)”,即可。
这个操作可以在第一台机器上执行并关机,之后用这台机器生成的其他虚拟机就都没有唯一ID了。