Last updated
Was this helpful?
Last updated
Was this helpful?
服务器已经安装了CentOS操作系统,由于不能满足开发需求,准备将服务器转换成Ubuntu Server 16.04 LTS。但是,远程服务器依然想保留CentOS作为测试使用,所以部署双操作系统多重启动方案。
远程服务器安装和直接可以物理接触的桌面系统不同,不方便从光盘镜像开始从头安装。所以规划如下安装方案:
如果原操作系统占据了整个磁盘,则通过PXE启动到无盘,然后通过resize方法缩小现有文件系统分区(具体方法和文件系统相关)
空出足够安装新Ubuntu操作系统的分区
线下通过kvm或virtualbox这样的全虚拟化安装一个精简的Ubuntu操作系统,然后通过tar打包方式完整备份整个Ubuntu操作系统
将备份的Ubuntu操作系统tar包上传,并解压缩到对应服务器分区
修订CentOS的grub2配置,加入启动Ubuntu的配置
重启操作系统,选择进入Ubuntu
以上方法避免了在服务器上重新安装Ubnntu的步骤,并且可以作为今后快速部署Ubuntu的方案。
检查操作系统分区划分
可以看到当前运行的CentOS操作系统使用了/dev/sda3
分区,/dev/sda4
分区是swap,而/dev/sda5
分区虽然划分,但是实际上未被挂载使用。
所以准备删除掉/dev/sda4
(需要swapoff /dev/sda4
并注释掉/etc/fstab
中swap
配置行)和/dev/sda5
分区,然后再独立创建/dev/sda4
分区提供给Ubuntu操作系统使用。
整个安装在一个/dev/vda1
分区
<backuphost>
为备份服务器的IP地址,已设置ssh密钥登陆,这样可以免密钥登陆
首先确保能够从虚拟机内部登陆到远程服务器<backuphost>
使用
tar -cvpz --one-file-system
备份整个操作系统会跳过/proc
,/sys
等目录
登陆到目标需要恢复ubuntu的服务器,首先调整空出/dev/sda4
(如上所述)
恢复备份
挂载作为ubuntu恢复分区文件系统
使用以下命令恢复
-C
参数告诉tar
命令先变更目录到/media
再开始解压缩
修订恢复的ubuntu分区中的/etc/fstab
,这里实际上是修订/media/etc/fstab
,使其能够挂载/dev/sda4
分区
首先使用blkid
获取分区磁盘信息
输出类似
注意:在/etc/fstab
中使用的是UUID
(对比了原先的虚拟机中磁盘命名),所以修改/media/etc/fstab
如下:
Ubuntu 16.4采用了传统的GRUB,可以直接编辑配置文件
/boot/grub/menu.lst
,比CentOS 7使用的GRUB 2要简便许多。通过在Ubuntu 16.4中添加CentOS分区中的/boot
启动目录下内核,可以在同一个启动菜单中切换不同操作系统。
设置串口配置方法和Ubuntu版本有关,获取版本信息的方法是
lsb_release -a
,可以看到Ubuntu 16.4代码是xenial
增加ubuntu分区的/etc/init/ttyS0.conf
(实际修改/media/etc/init/ttyS0.conf
) - 针对Karmic和更新版本的方法如下
要使得系统能够启动,需要恢复grub,这里需要编辑/etc/default/grub
(实际配置/media/etc/default/grub
)
通过chroot方式运行ubuntu的grub配置
手工修改/boot/grub/menu.lst
设置如下
最后一项是原CentOS 7搬迁过来的GRUB配置
重启系统,通过Ubuntu BRUB菜单验证切换操作系统
启动提示error: file /boot/grub/i386-pc/normal.mod' not found.
检查分区
但是依然报错
尝试启动grub
如果错误,则重新设置root
和prefix
,再次尝试上述步骤
这次成功了!!! 这个(hd0,gpt3)
分区是原先CentOS
的系统分区
继续按照
检查分区UUID(可以看到UUID确实是CentOS
的系统分区)
设置启动内核及root分区UUID
但是这里遇到问题,系统始终报告error: file
/boot/vmlinuz-3.10.0-327.el7.x86_64' not found.`
尝试了多次,突然想起来,原先系统安装时候,独立了一个/boot
分区,位于/dev/sda2
而不是这里的UUID=96219e3e-c371-47a9-baaf-cc2b1b9f8b33
对应的/dev/sda3
。
所以重新尝试Ubuntu分区
检查分区UUID
继续加载
也是报错
检查所有可用的磁盘分区和文件系统
尝试启动
依然找不到
发现可以通过指定(hd0,2)
包含CentOS /boot
分区来启动
然后可以尝试启动CentOS系统了
CentOS启动
reboot
之后重新开始
检查当前配置:
加载grub模块
进入常规模式后,检查设备uuuid
不知道为何Ubuntu使用的是 ttyS1,而不是ttyS0。如果设置了
ttyS0
反而无法显示输出信息
使用备份方法参考
这里会提示在/etc/default/grub
中添加参数,为了能够在串口输出控制台,参考
针对Edgy/Feisty/Jaunty
需要设置/etc/event.d/ttyS0
,而针对Darpper
或更古老版本则修改/etc/inittab
。这里忽略旧版本设置方法,详细请参考
注意,这里 mount 需要包含 /sys ,否则在后面 upgrade-grub
会出现大量的 device node not found
报错。参考:
重新安装一次grub,覆盖原先CentOS的GRUB - 这里参考
尝试启动 - 参考
参考 尝试检查文件系统分区
参考