将 CentOS 6.8 的虚拟机迁移到 Azure 环境
主要步骤
迁移的主要步骤分为:准备环境,调整服务器配置,导出磁盘,上传磁盘,建立新的虚拟机。在这几个步骤中,调整服务器配置将对阿里云中的配置进行调整以符合
Azure
的需求,因此将会涉及一些影响在阿里云运行的调整。有几个推荐的做法:
在调整前进行快照,操作错误时可进行回滚
如本地有 Hyper-V 机器,可先进行导出磁盘再进行调整服务器配置
因此,根据你的策略,流程可分为
准备环境=>调整服务器配置=>导出磁盘=>上传磁盘=>建立新的虚拟机
准备环境=>导出磁盘=>调整服务器配置=>上传磁盘=>建立新的虚拟机
由于修改服务配置可能造成云端服务中断,而在本地则需要额外的资源及较长的操作时间,你可根据需要决定选择何种流程,以下我们将针对各步骤进行详细说明。
准备环境
首先,推荐先对现有磁盘进行快照。
接着,为了导出虚拟机的磁盘,我们需要挂载数据盘以存放导出的虚拟磁盘文件(.vhd),大小建议为需要备份的磁盘大小的两倍,详细方法请参考挂载数据盘,值得提醒的是,除了在阿里云控制台进行挂载,也需要在操作系统内进行配置。
最后,为了准备上传磁盘的空间,需要在 Azure
上创建一个存储账户,值得注意的是这个存储账户必须与虚拟机是同一种类型,这边采用的是资源管理模式(Azure
Resource Manager),进行存储账户创建,同时请创建一个容器(container),名为
vhds。
调整服务器配置
在此步骤中,我们将进行服务器的调整以兼容于 Azure 的环境。
1.用具有管理员权限的账户登入阿里云的 Linux 虚拟机。
2.修改 /etc/sysconfig/network
vi /etc/sysconfig/network
修改为:
NETWORKING=yes
HOSTNAME=localhost.localdomain
3.修改 /etc/sysconfig/network-scripts/ifcfg-eth0
vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改为:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
USERCTL=no
PEERDNS=yes
IPV6INIT=no
4.如果阿里主机上有eth1网卡,则我们需要修改eth1配置,如果没有eth1,这步跳过。
修改 /etc/sysconfig/network-scripts/ifcfg-eth1,将其禁用。
vi /etc/sysconfig/network-scripts/ifcfg-eth1
修改为:
DEVICE=eth1
#ONBOOT=yes
#BOOTPROTO=static
#IPADDR=1.1.1.1
#NETMASK=255.255.255.0
5.修改 udev 规则,以避免产生以太网接口的静态规则。在 Azure 或 Hyper-V
中克隆虚拟机时,这些规则会引发问题:
sudo ln -s /dev/null
/etc/udev/rules.d/75-persistent-net-generator.rules
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
6.修改服务启动的配置,禁用阿里云的服务。
sudo chkconfig network on
sudo chkconfig aegis off
sudo chkconfig aliyun-util off
7.更新镜像库。
wget -q https://aliyunmigration.blob.core.chinacloudapi.cn/packages/CentOS-Base.repo -O
/etc/yum.repos.d/CentOS-Base.repo
8.修改 /etc/yum.conf
vi /etc/yum.conf
添加一行:
http_caching=packages
9.清除 yum 元数据并进行更新。
yum clean all
sudo yum -y update
10.安装 Azure Linux 代理和依赖项。
sudo yum install python-pyasn1 WALinuxAgent
11.在 grub 配置中修改内核引导行,以使其包含 Azure 的其他内核参数。
为此,请在文本编辑器(vi)中打开 /boot/grub/menu.lst,并确保默认内核包含以下参数。
console=ttyS0 earlyprintk=ttyS0 rootdelay=300
12.编辑磁盘文件,除系统盘之外,将其他不需用到的磁盘禁用。
vi /etc/fstab
至此,你已完成 CentOS 6.8 上传至 Azure 磁盘前的准备。
迁移大概步骤是:1、在阿里主机上增加一块存储vhd镜像的磁盘并格式化挂载到/mnt/下
2、将阿里云主机系统打包成RAW镜像
3、在阿里云主机上使用qemu工具将raw镜像转换成vhd格式
4、将vhd镜像上传到Azure的存储账号下
5、Azure上创建新磁盘,使用vhd镜像创建虚机
1、在阿里主机上增加一块存储vhd镜像的磁盘并格式化挂载到/mnt/下
导出磁盘
在 Linux 中,我们所使用的工具是 dd,进行整个磁盘的备份,再备份完成后再用
qemu 工具,转成vhd的文件格式。
查看更新的分区表:
Cat /proc/partitions
格式化 新加的分区表
Mkfs –t ext3 格式区
格式化后挂载到想要挂载的位置下(临时挂载)
比如:mount /dev/sdb1 /mnt
查看是否挂载成功
Df
2、将阿里云主机系统打包成RAW镜像
首先,执行 dd 指令,这里我导出的磁盘为
/dev/vda,额外挂载作为备份的磁盘为 /mnt,导出的文件为 aliyuncentos68.raw
dd if=/dev/vda of=/mnt/aliyuncentos68.raw bs=100M
等待 dd 完成后,安装 qemu 工具。
sudo yum install qemu-kvm
3、在阿里云主机上使用qemu工具将raw镜像转换成vhd格式
安装完成后,进行格式转换,其中 /mnt 为刚才的备份目录,aliyuncentos68.raw
为刚才的备份文件,aliyuncentos68.vhd 则为转换后的文件
#cd/mnt
#qemu-img convert -f raw -o subformat=fixed -O vpc aliyuncentos68.raw aliyuncentos68.vhd
等待直至转换磁盘完成。
4、将vhd镜像上传到Azure的存储账号下
上传磁盘
在此我们将运用 Azure CLI 将刚才导出的磁盘上传至先前创建的存储账户中。
首先需要安装 NodeJS
curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
sudo yum -y install nodejs
接着安装 Azure CLI
npm install -g azure-cli
然后需要刚才在 Azure 创建的存储账户信息及密钥组成连结字符串,如:
DefaultEndpointsProtocol=https;BlobEndpoint=storagename.blob.core.chinacloudapi.cn;AccountName=storagename;AccountKey=storagekey
接着执行指令进行上传
cd /mnt
azure storage blob upload -c ‘DefaultEndpointsProtocol=https;BlobEndpoint=storagename.blob.core.chinacloudapi.cn;AccountName=storagename;AccountKey=storagekey’ -t page --container vhds -f aliyuncentos68.vhd
5、Azure上创建新磁盘,使用vhd镜像创建虚机
当上述步骤都已经完成,在azure上新添加一块磁盘。
创建好磁盘后,点击创建VM虚机
在栏位中依序填入 VM 创建的地点,刚才上传的系统磁盘 url,OS
类型(这边应该选Linux),VM 的大小及 VM 的名称。
接着点选创建,虚拟机将开始进行部署。
过一段时间之后,便可以连结上你所迁移的机器了。