为了迎接 Linode 推出的免费升级计划,这几天趁着五一节时间相对充足,将 VPS 上运行的 CentOS 系统从 32 位换成了 64 位。折腾得够呛,也总结了一点经验。
之前安装 CentOS 系统的 LAMP 服务器还是在 512 MiB 内存的时候,为了节省内存才装的 32 位。在 Linode 升级后不能得到立即的支持(可能要到3个月之后了)。而 VPS 的内存在 Linode 的连番升级之下马上就要涨到 2GB 了,不再愁内存的事情,还是直接将系统改成 64 位的吧。
我的方法(思路)¶
麻烦的就是,在 VPS 里升级系统,实际上就相当于重装系统。那么我的服务器在这段时间里就无法正常工作了。为了尽量减少网站下线的时间,我琢磨着可以:
- 先在不关闭 VPS 的情况下利用 Linode 的 StackScripts 自动安装新系统并部署服务器软件到一个新建磁盘分区里,因为之前在 Linode VPS 里调整磁盘镜像大小的时候已经知道可以创建多个磁盘分区;
- 然后创建一个新的配置文档(Configuration Profiles),使用新磁盘作为根分区磁盘,并将现在正在使用的磁盘作为附加磁盘(比如 /dev/xdvc,/dev/xdvb 是 swap 分区),关机并使用新配置文件启动 VPS,将 /dev/xdvc 挂载到新系统里的一个文件夹下,就可以直接从旧磁盘里将网站文件和各种自定义的配置文件复制到新磁盘里面了(绝大多数网站服务器程序的配置文件在 32 位和 64 位系统中是通用的)。
使用预先写好的 Shell Script,批处理完成文件的拷贝并重启系统使网站上线,完全可以在几分钟之内完成。也就是说,整个过程中,网站下线的时间应该可以控制在 5 分钟之内的。
遇到的问题¶
但是我遇到了比较麻烦的问题,也就是上面第一步里的过程没有顺利完成,导致网站下线几个小时之久。
我自定义的 StackScripts 并没有在创建新的磁盘镜像时完成自动安装 Apache + MySQL + PHP + ZendOpcache + phpMyAdmin + 部署 SSL 等服务器程序的任务。
Linode Manager –> Linodes 页面中有 Manage StackScripts,可以使用别人分享的,也可以创建自定义的 StackScripts。而在创建新磁盘镜像的时候可以选择使用自定义的 StackScripts。理论上来说,如果 StackScripts 写得合适,是可以在创建磁盘的时候完成这些工作的。
可能是因为我写的 StackScripts 有问题。回头有时间再用 Linode StackScripts 库中现成的来测试一下。如果有朋友使用这样的方法并成功了,请留个言吧。
然后我进行第 2 步,启动到新系统里之后,才发现我的服务器程序并没有按照预想给安装上。于是就干脆这么重新安装吧,虽然很多情况下用了 Shell Script 批处理来进行,但还是手忙脚乱的出了很多错误,导致又花了好几个小时才完全搞定。
加上前期准备自定义 StackScripts 的时间,这次换个系统花的时间真是超出我的想象 —— 差不多整个五一三天假都搭上了。但是这个思路还是很有参考意义的,只是我实施地不够漂亮。
请大家分享一下看法吧 :D©
本文发表于水景一页。永久链接:<https://cnzhx.net/blog/linode-vps-change-os/>。转载请保留此信息及相应链接。
不能用chroot么…
这个是要将系统从32位升级为64位啊,chroot貌似不管用啊。VPS里面一次只能运行一个系统的啊。
chroot可以32位升级64位(32位chroot后安装64位内核,程序,修改引导到64位系统,然后删除32位的全部安装包+内核)
就是不知道是否可以同时运行…没注意过这个问题
原来可以这样的?!OMG,早知道就不用那么麻烦了啊。
刚才又仔细看了看 Linode 的切换内核说明,可以直接在控制台切换内核,但是 Linux 系统还是要重新部署为 64 位的才行。
唉,算了,反正我的已经搞完了,不折腾了,现在特忙,没那么多时间。
引用通告: 终于等到 Linode VPS 的升级了 | 水景一页