Azure免费Windows实例dd安装Linux系统

Azure算是公有云里面计费及免费逻辑相对比较复杂的一个了,虽然是有学生账号和一年免费试用,能不被套路完全利用好的也没几个;再加上微软自家丧心病狂的风控,感觉真正玩起来的人是少之又少。

注意:微软对于系统的识别要求VM内Agent上报系统参数一致,因此本文具有误导性,仅作记录,请勿按此文章操作进行。

在这方面博主恰恰就是那种运气爆棚的人了,在2019年五一我用GitHub学生包里的码激活了一个Azure学生订阅,然后连着两年收到了续期的邮件……

然后在Sponsorship页面也能看到到期时间往后延了一年,订阅周期变成了2019.5.1-2022.3.2,这个订阅开的第一台VPS已经在线600+天了,实在是很惊喜。

本着资源最大化利用的理念以及探针不愁多的想法,我决定把另一台Windows的B1s开出来。

一、正确开机

想要完全被Azure的免费额度正常抵扣的话,主要有以下三个坑点:第一个是可用性选项必须选择无基础结构冗余,否则你将因为无法使用基础SKU的动态IP,这样微软给你动态IP的额度你也就没法使用了;第二Windows系统镜像一定要选择带有smalldisk标注的,否则会因为系统盘大于P6 SSD而无法压缩回去;第三就是实例和磁盘类型,实例一定要选择B1s,磁盘是高级SSD。

其次就是你正确开启实例之后,此时系统盘为30G即P4级别,无法被64G的P6级别免费额度所抵扣;所以你需要把虚拟机停止掉,然后在磁盘中把磁盘大小修改为64G。这个时候又一个坑出现了,停止虚拟机的时候会询问你是否保留公共IP,这里一定不要勾选,否则转为静态IP后动态IP的免费额度便无法抵扣其开销。

二、想法源泉

首先B系列是微软入门级的突发型实例,是比阿里云的T5性能还要感人的实例;其次微软就算是P6高级SSD,配合B1s这样本身IO限制很低的实例持续写入也就14m/s的水平,这性能跑Windows别提有多酸爽了。

其次就是由于Windows7/2008已经EoL,微软直接把它们的镜像从市场下架了,剩下的2012以及更高的版本,用在1G的B1s简直就是在给自己找气受。

于是,把这台免费的Windows实例装成Linux一定是把它用好比较合理的选择了……

三、尝试操作

替换系统的想法很简单,与拯救Oracle的机器如出一辙:将这台Windows实例的系统盘挂载到另一台Linux的实例下,然后通过dd指令将Linux的系统盘悉数复制到这台Windows机器的系统盘中,再把它挂载回去,大功告成。想法比较简单,不过因为逻辑不同还是出了很多意外……

准备工具

先开一台Windows的免费实例A,然后再随便开一个Windows实例只保留系统盘B其他的都删掉,最后再开一台你需要的系统对应的Linux实例C(比如我选择的Debian 10)。为什么搞的这么复杂,原因有两个:第一是微软实例的系统盘必须含有osDisk标记,无法使用普通磁盘替换也没法卸载;第二是不同的系统具有不同的osType标记,Win与Linux的系统盘无法互相替换,我尝试用Powershell进行替换操作也因为标记不符而被驳回了。

dd系统

把之前保留下的B的系统盘作为普通磁盘挂载到C上面(注意挂载前修改为64G),开机并连接SSH。随后通过fdisk -l指令查看磁盘路径,比如我C的实例本身的磁盘是/dev/sda,挂在上去的盘是/dev/sdc,确定好路径之后就可以dd了。

#从sda磁盘复制到sdc磁盘
dd if=/dev/sda of=/dev/sdc bs=10M count=100000

查看dd的进度,可以再开一个SSH窗口,执行watch指令,回到之前的窗口就可以看到5秒刷新一次的进度了。

#5秒刷新一次进度
watch -n 5 pkill -USR1 ^dd$

替换系统盘

dd完成之后,就可以直接在实例的磁盘页面点击“交换OS硬盘”替换掉系统盘了,替换之后直接开机就可以了(记得把替换下来的删掉)。

四、结语

网上将Windows的实例dd成Linux的实际操作少之又少,加上Azure没有VNC功能,直接重装的话困难还是挺多的,有官方的系统模板供复制还是很不错的。比较有意思的是dd之后,你的系统会识别成Windows(debian),笑死了……