在云服务器上使用GRUB引导双系统(Debian和Rocky Linux)的步骤如下:
核心原理
云服务器通常使用虚拟磁盘,GRUB安装到虚拟磁盘的MBR/GPT,通过grub.cfg检测多个操作系统。
详细步骤
1. 准备工作
- 确保云平台支持自定义镜像或多系统启动
- 已有Debian系统,准备安装Rocky Linux(或反之)
- 备份重要数据
- 云控制台挂载Rocky Linux ISO或使用VNC/串口安装
2. 分区规划
使用fdisk/parted规划分区(示例):
# 查看磁盘(通常为vda或sda)
lsblk
# 分区示例:
# /dev/vda1: 原Debian的 /boot (可选)
# /dev/vda2: 原Debian的 /
# /dev/vda3: 新Rocky Linux的 /boot (可选,可与Debian共享)
# /dev/vda4: 新Rocky Linux的 /
# /dev/vda5: 公共swap分区(或各自独立)
3. 安装Rocky Linux
- 从ISO启动,安装时不要覆盖原GRUB
- 将Rocky Linux的GRUB安装到其所在分区的PBR(分区引导记录),而非MBR:
# 在Rocky安装过程中,选择安装位置时: grub2-install --no-floppy /dev/vda3 # 将GRUB装到Rocky的/boot分区 - 或安装完成后在Rocky中运行:
# 进入Rocky系统后 grub2-install --force /dev/vda # 谨慎使用,可能覆盖原GRUB
4. 更新主系统GRUB配置
在先安装的系统(如Debian)中更新GRUB:
# Debian/Ubuntu
sudo update-grub
# 或手动生成配置
sudo grub-mkconfig -o /boot/grub/grub.cfg
GRUB应自动检测到Rocky Linux。
5. 若未检测到,手动添加GRUB条目
编辑/etc/grub.d/40_custom(Debian):
sudo nano /etc/grub.d/40_custom
添加:
menuentry "Rocky Linux" {
insmod ext2
set root=(hd0,msdos3) # 根据实际分区调整
linux /boot/vmlinuz-*.x86_64 root=/dev/vda4 ro
initrd /boot/initramfs-*.img
}
重新生成配置:
sudo update-grub
6. 云服务器特殊配置
- 确保云初始化工具兼容:检查
cloud-init或waagent是否冲突 - 内核参数调整:可能需要添加
console=ttyS0(阿里云/AWS等) - 使用
grubby(Rocky):# 在Rocky中调整默认内核参数 grubby --update-kernel=ALL --args="console=ttyS0"
7. 故障处理
- GRUB Rescue:使用云平台VNC/串口修复:
set root=(hd0,msdos1) linux /boot/vmlinuz root=/dev/vda2 initrd /boot/initrd.img boot - 重新安装GRUB到MBR:
# 从Debian启动 sudo grub-install /dev/vda sudo update-grub
注意事项
- 云平台限制:部分云厂商限制自定义引导,需开启"自定义镜像"或"GRUB编辑"功能
- 共享/boot分区:可共享,但需注意内核命名冲突
- 使用独立/boot分区:更安全,避免覆盖
- UEFI/GPT:若云服务器使用UEFI,需确保ESP分区包含两个系统的引导文件
- 测试:先在本地虚拟机测试,再部署到云服务器
推荐方案
对于生产环境,建议:
- 使用独立磁盘安装第二个系统
- 通过云平台启动菜单选择启动磁盘(更稳定)
- 或使用KVM虚拟化在单台云服务器上运行双系统
通过以上步骤,您可以在云服务器上实现GRUB引导的双系统。
CLOUD技术笔记