VM虚拟机系统windows 2012 R2完整迁移到腾讯云服务器,且运行正常。

将VM虚拟机系统windows 2012 R2完整迁移到腾讯云服务器,各服务并且正常运行。

操作系统:windows 2012 R2

一、制作windows系统镜像

1、检查系统分区,仅支持MBR分区可以迁移,GPT 就不行了,直接放弃吧
2、坚持启动方式,EFI方式启动也不可以迁移
3、不支持IPV6迁移,不支持多网卡迁移,即使迁移成功,基于IPV6和多网卡工作的服务都无法正常运行。
4、安装 cloudbase-init
Windows 64位 操作系统:https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi
Windwos 32位 操作系统:https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x86.msi
修改 cloudbase-init 配置文件 cloudbase-init.conf
将下面的代码替换原来文件里的代码
____________________________________________________________________________________

[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
[DEFAULT]
username=Administrator
groups=Administrators
inject_user_password=true
config_drive_raw_hhd=true
config_drive_cdrom=true
config_drive_vfat=true
bsdtar_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\bsdtar.exe
mtools_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\bin\
metadata_services=cloudbaseinit.metadata.services.configdrive.ConfigDriveService
plugins=cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin,cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin,cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin
verbose=true
debug=true
logdir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\
logfile=cloudbase-init.log
default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN
logging_serial_port_settings=COM1,115200,N,8
mtu_use_dhcp_config=true
ntp_use_dhcp_config=true
first_logon_behaviour=no
netbios_host_name_compatibility=false
allow_reboot=false
activate_windows=true
kms_host="kms.tencentyun.com"
local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
C:\powershell
PS C:\Set-ExecutionPolicy Unrestricted

________________________________________________________________________________
5、下载  TencentCloudRun.ps1文件,复制粘贴到C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\ 路径下
http://cloudinit-1251783334.cosgz.myqcloud.com/TencentCloudRun.ps1
6、安装 virtio 驱动
http://windowsvirtio-10016717.file.myqcloud.com/InstallQCloud.exe?_ga=1.44298212.1367540472.1504757536
7、使用 disk2vhd 导出镜像,最后制作完镜像,会在你指定问文件夹内生成一个几十G和系统大小一样的.VHD文件
https://download.sysinternals.com/files/Disk2vhd.zip

二、上传COS对象存储
1、,将这个镜像文件将要上传到腾讯云cos对象存储里去。上传的过程取决于你的上行带宽 基本都几个小时。

三、镜像导入
1、上传成功之后,在腾讯云服务器 镜像菜单里 点导入镜像,然后根据要求 填写基本信息就可以自动导入了,
里面有一项是让你填写镜像地址,镜像地址就是你把镜像上传到腾讯云cos对象存储里会给你生成一个下载地址,把这个地址
填写进去就可以开始导入了。导入的过程也得半小时到1个小时,根据你的镜像文件大小来确定时间长短。

2、导入成功之后,就可以用这个导入的镜像安装系统,几秒钟 就能部署好系统。

11、进入系统后什么都不用做,直接运行你的服务端程序,和你在虚拟机里运行的情况是一样的。(我迁移的系统里有java环境,有oracle数据库好多服务端软件 迁移后都能正常使用)
12、虚拟机 windows2012 R2系统就这么愉快的迁移完成了。

几个必不可少的 Linux 运维脚本

一、根据PID过滤进程所有信息

! /bin/bash

Function: 根据用户输入的PID,过滤出该PID所有的信息

read -p “请输入要查询的PID: ” P
n=ps -aux| awk '$2~/^'$P'$/{print $11}'|wc -l
if [ $n -eq 0 ];then echo “该PID不存在!!” exit fi echo “——————————–” echo “进程PID:$P”
echo “进程命令:ps -aux| awk '$2~/^'$P'$/{print $11}'
echo “进程所属用户: ps -aux| awk '$2~/^'$P'$/{print $1}'
echo “CPU占用率:ps -aux| awk '$2~/^'$P'$/{print $3}'%”
echo “内存占用率:ps -aux| awk '$2~/^'$P'$/{print $4}'%”
echo “进程开始运行的时刻:ps -aux| awk '$2~/^'$P'$/{print $9}'
echo “进程运行的时间:ps -aux| awk '$2~/^'$P'$/{print $10}'
echo “进程状态:ps -aux| awk '$2~/^'$P'$/{print $8}'
echo “进程虚拟内存:ps -aux| awk '$2~/^'$P'$/{print $5}'
echo “进程共享内存:ps -aux| awk '$2~/^'$P'$/{print $6}'
echo “——————————–”
图片
二、根据进程名过滤进程信息
会显示出该进程名包含的所有线程

! /bin/bash

Function: 根据输入的程序的名字过滤出所对应的PID,并显示出详细信息,如果有几个PID,则全部显示

read -p “请输入要查询的进程名:” NAME
N=ps -aux | grep $NAME | grep -v grep | wc -l ##统计进程总数
if [ $N -le 0 ];then echo “该进程名没有运行!” fi i=1 while [$N -gt 0 ]
do
echo “进程PID: ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $2}'
echo “进程命令:ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $11}'
echo “进程所属用户: ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $1}'
echo “CPU占用率:ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $3}'%”
echo “内存占用率:ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $4}'%”
echo “进程开始运行的时刻:ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $9}'
echo “进程运行的时间:ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $11}'
echo “进程状态:ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $8}'
echo “进程虚拟内存:ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $5}'
echo “进程共享内存:ps -aux | grep $NAME | grep -v grep | awk 'NR=='$i'{print $0}'| awk '{print $6}'
echo “***
let N– i++
done
图片
三、根据用户名查询该用户的相关信息

! /bin/bash

Function:根据用户名查询该用户的所有信息

read -p “请输入要查询的用户名:” A
echo “——————————”
n=cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}' | wc -l
if [ $n -eq 0 ];then echo “该用户不存在” echo “——————————” else echo “该用户的用户名:$A”
echo “该用户的UID:cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $3}'
echo “该用户的组为:id $A | awk {'print $3'}
echo “该用户的GID为:cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $4}'
echo “该用户的家目录为:cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $6}'
Login=cat /etc/passwd | awk -F: '$1~/^'$A'$/{print}'|awk -F: '{print $7}'
if [ $Login == “/bin/bash” ];then echo “该用户有登录系统的权限!!” echo “——————————” elif [$Login == “/sbin/nologin” ];then
echo “该用户没有登录系统的权限!!”
echo “——————————”
fi
fi
图片
四、加固系统的一些配置

! /bin/bash

Function:对账户的密码的一些加固

read -p “设置密码最多可多少天不修改:” A
read -p “设置密码修改之间最小的天数:” B
read -p “设置密码最短的长度:” C
read -p “设置密码失效前多少天通知用户:” D
sed -i ‘/^PASS_MAX_DAYS/c\PASS_MAX_DAYS ‘$A” /etc/login.defs sed -i ‘/^PASS_MIN_DAYS/c\PASS_MIN_DAYS ‘$B” /etc/login.defs
sed -i ‘/^PASS_MIN_LEN/c\PASS_MIN_LEN ‘$C” /etc/login.defs sed -i ‘/^PASS_WARN_AGE/c\PASS_WARN_AGE ‘$D” /etc/login.defs

echo “已对密码进行加固,新用户不得和旧密码相同,且新密码必须同时包含数字、小写字母,大写字母!!”
sed -i ‘/pam_pwquality.so/c\password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1’ /etc/pam.d/system-auth

echo “已对密码进行加固,如果输入错误密码超过3次,则锁定账户!!”
n=cat /etc/pam.d/sshd | grep "auth required pam_tally2.so "|wc -l
if [ $n -eq 0 ];then
sed -i ‘/%PAM-1.0/a\auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300’ /etc/pam.d/sshd
fi

echo  “已设置禁止root用户远程登录!!”
sed -i ‘/PermitRootLogin/c\PermitRootLogin no’  /etc/ssh/sshd_config

read -p “设置历史命令保存条数:” E
read -p “设置账户自动注销时间:” F
sed -i ‘/^HISTSIZE/c\HISTSIZE=’$E” /etc/profile sed -i ‘/^HISTSIZE/a\TMOUT=’$F” /etc/profile

echo “已设置只允许wheel组的用户可以使用su命令切换到root用户!”
sed -i ‘/pam_wheel.so use_uid/c\auth required pam_wheel.so use_uid ‘ /etc/pam.d/su
n=cat /etc/login.defs | grep SU_WHEEL_ONLY | wc -l
if [ $n -eq 0 ];then
echo SU_WHEEL_ONLY yes >> /etc/login.defs
fi

echo “即将对系统中的账户进行检查….”
echo “系统中有登录权限的用户有:”
awk -F: ‘($7==”/bin/bash”){print$1}’ /etc/passwd
echo “****
echo “系统中UID=0的用户有:”
awk -F: ‘($3==”0″){print$1}’ /etc/passwd
echo “****
N=awk -F: '($2==""){print $1}' /etc/shadow|wc -l
echo “系统中空密码用户有:$N” if [$N -eq 0 ];then
echo “恭喜你,系统中无空密码用户!!”
echo “****
else
i=1
while [ $N -gt 0 ] do None=`awk -F: ‘($2==””){print $1}’ /etc/shadow|awk ‘NR==’$i'{print}’ echo "------------------------" echo $None echo "必须为空用户设置密码!!" passwd $None let N-- done M=awk -F: ‘($2==””){print$1}’ /etc/shadow|wc -l`
if [ $M -eq 0 ];then echo “恭喜,系统中已经没有空密码用户了!” else echo “系统中还存在空密码用户:$M”
fi
fi

echo “即将对系统中重要文件进行锁定,锁定后将无法添加删除用户和组”
read -p “警告:此脚本运行后将无法添加删除用户和组!!确定输入Y,取消输入N;Y/N:” i
case $i in
[Y,y])
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
echo “锁定成功!”
;;
[N,n])
chattr -i /etc/passwd
chattr -i /etc/shadow
chattr -i /etc/group
chattr -i /etc/gshadow
echo “取消锁定成功!!”
;;
*)
echo “请输入Y/y or N/n”
esac

图片

五、实现磁盘分区的
只支持分配主分区和标准的linux文件系统(ext4/xfs)的分区

! /bin/bash

Function:对硬盘进行分区,得到一个标准的linux文件系统(ext4/xfs)的主分区

cat /proc/partitions > old
read -p “请输入你要分区的硬盘(写绝对路径,如:/dev/sda):” A
if [ -e $A ];then echo “true” else echo “该设备不存在!!” exit fi read -p “请输入你要创建的磁盘分区类型(这里只能是主分区,默认按回车即可):” B read -p “请输入分区数字,范围1-4,默认从1开始,默认按回车即可:” C read -p “请输入扇区起始表号,默认按回车即可:” D read -p “请输入你要分区的分区大小(格式:如 +5G ):” E fdisk$A << EOF
n
p
$C $D
$E w EOF echo “一个标准的linux文件系统的分区已经建立好!!” partprobe$A
echo “——————————-”
cat /proc/partitions
cat /proc/partitions > new
F=diff new old | grep "<" | awk '{print $5}'
echo “——————————-”
echo $F echo “你想对新分区设定什么类型的文件系统?有以下选项:” echo “A:ext4文件系统” echo “B:xfs文件系统” read -p “请输入你的选择:” G case$G in
a|A)
mkfs.ext4 /dev/$F echo “该分区将被挂载在 “/mnt/$F” 下”
m=ls /mnt/|grep $F | wc -l
if [ $m -eq 0 ];then mkdir /mnt/$F
fi
n=cat /etc/fstab | grep /dev/$F| wc -l
if [ $n -eq 0 ];then echo “/dev/$F     /mnt/$F     ext4         defaults          0      0” &gt;&gt; /etc/fstab else sed -i ‘/^\/dev\/$F/c\/dev/$F     /mnt/$F     ext4         defaults          0      0’ /etc/fstab
fi
mount -a
df -Th
;;
b|B)
mkfs.xfs -f /dev/$F echo “该分区将被挂载在 “/mnt/$F” 下”
m=ls /mnt/|grep $F | wc -l
if [ $m -eq 0 ];then mkdir /mnt/$F
fi
n=cat /etc/fstab | grep /dev/$F | wc -l
if [ $n -eq 0 ];then echo “/dev/$F     /mnt/$F      xfs       defaults          0      0” &gt;&gt; /etc/fstab else sed -i ‘/^\/dev\/$F/c\/dev/$F     /mnt/$F     xfs         defaults          0      0’ /etc/fstab
fi
mount -a
df -Th
;;
*)
echo “你的输入有误!!”
esac
六、使用一整块硬盘创建逻辑卷

!/bin/bash

Function:使用一整块硬盘创建LVM逻辑卷

read -p “请输入你要做成逻辑卷的硬盘(写绝对路径,如:/dev/sda):” path
if [ -e $path ];then echo “true” else echo “该设备不存在!!” exit fi pvcreate$path
echo “该硬盘已做成物理卷!”
vgcreate myvg $path echo “该物理卷已加入卷组 myvg 中” vgs free=`vgs| awk ‘$1~/myvg/{print}’|awk ‘{print $6}’` echo “该物理卷剩余的空间大小为:$free ”
read -p “请输入你要创建逻辑卷的大小(如:1G):” repy2
lvcreate -L $repy2 -n mylv myvg echo “已成功创建逻辑卷mylv” echo “————————” lvs echo “————————” echo “你想对新分区设定什么类型的文件系统?有以下选项:” echo “A:ext4文件系统” echo “B:xfs文件系统” read -p “请输入你的选择:” repy3 case$repy3 in
a|A)
mkfs.ext4 /dev/myvg/mylv
echo “该分区将被挂载在 “/mnt/mylv” 下”
m=ls /mnt/|grep mylv | wc -l
if [ $m -eq 0 ];then mkdir /mnt/mylv fi echo “/dev/myvg/mylv     /mnt/mylv     ext4         defaults          0      0” &gt;&gt; /etc/fstab mount -a df -Th ;; b|B) mkfs.xfs -f /dev/myvg/mylv echo “该分区将被挂载在 “/mnt/mylv” 下” m=`ls /mnt/|grep mylv | wc -l` if [$m -eq 0 ];then
mkdir /mnt/mylv
fi
echo “/dev/myvg/mylv     /mnt/mylv      xfs       defaults          0      0” >> /etc/fstab
mount -a
df -Th
;;
*)
echo “你的输入有误!!”
esac
七、将一块硬盘分区,然后分区设置为虚拟卷

! /bin/bash

Function:新建一个分区,并做成逻辑卷

cat /proc/partitions > old
read -p “请输入你要分区的硬盘(写绝对路径,如:/dev/sda):” A
if [ -e $A ];then echo “true” else echo “该设备不存在!!” exit fi read -p “请输入你要创建的磁盘分区类型(这里只能是主分区,默认按回车即可):” B read -p “请输入分区数字,范围1-4,默认从1开始,默认按回车即可:” C read -p “请输入扇区起始表号,默认按回车即可:” D read -p “请输入你要分区的分区大小(格式:如 +5G ):” E read -p “请输入你要划分为逻辑卷的分区盘符(默认回车即可):” Z fdisk$A << EOF
n
p
$C $D
$E t $Z
8e
p
w
EOF
echo “一个标准LVM的分区已经建立好!!”
partprobe $A echo “——————————-” cat /proc/partitions cat /proc/partitions &gt; new F=`diff new old | grep “&lt;” | awk ‘{print$5}’ echo "-------------------------------" echo $F pvcreate /dev/$F echo "该硬盘已做成物理卷!" n=vgs | grep myvg |wc -l if [ $n -eq 0 ];then vgcreate myvg /dev/$F echo "该物理卷已加入卷组myvg中" else vgextend myvg /dev/$F echo  "该物理卷已加入卷组myvg中" vgs free=vgs| awk ‘$1~/myvg/{print}’|awk ‘{print$7}’ echo "该卷组剩余的空间大小为:$free " lvs exit fi vgs free=vgs| awk ‘$1~/myvg/{print}’|awk ‘{print$6}’ echo "该卷组剩余的空间大小为:$free " read -p "请输入你要创建逻辑卷的大小(如:1G):" repy2 lvcreate -L $repy2 -n mylv myvg echo "已成功创建逻辑卷mylv" echo "------------------------" lvs echo "------------------------" echo "你想对新分区设定什么类型的文件系统?有以下选项:" echo "A:ext4文件系统" echo "B:xfs文件系统" read -p "请输入你的选择:" G case $G in a|A) mkfs.ext4 /dev/myvg/mylv echo "该分区将被挂载在 "/mnt/$F" 下" m=ls /mnt/|grep $F | wc -l` if [$m -eq 0 ];then
mkdir /mnt/$F fi echo “/dev/myvg/mylv     /mnt/$F     ext4         defaults          0      0” >> /etc/fstab
mount -a
df -Th
;;
b|B)
mkfs.xfs -f /dev/myvg/mylv
echo “该分区将被挂载在 “/mnt/$F” 下” m=`ls /mnt/|grep$F | wc -l`
if [ $m -eq 0 ];then mkdir /mnt/$F
fi
echo “/dev/myvg/mylv     /mnt/$F      xfs       defaults          0      0” >> /etc/fstab
mount -a
df -Th
;;
*)
echo “你的输入有误!!”
esac

VMware Workstation 17.x Pro版永久激活密钥

VMware Workstation 17.x Pro版永久激活密钥 [批量许可证]
【Win/Linux】
MC60H-DWHD5-H80U9-6V85M-8280D
【Mac Fusion 13.0 Pro 】
HF200-0W05K-089X8-4R1EK-032J0
以下是激活流程:
若你尚未下载 VMware Workstation 17.0 Pro 正式版可以先获取密钥,在安装或升级阶段会提示输入密钥。
若已经升级新版本尚未激活,点击主页的输入许可证或点击导航栏帮助、输入许可证密钥再填写也可以激活。
本次提供的密钥为永不过期的批量许可证,一经激活就不会到期可以一直使用,如果重装软件重复激活即可。