云服务器使用GRUB引导双系统(如Debian和Rocky Linux)的方法是什么?

在云服务器上使用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-initwaagent是否冲突
  • 内核参数调整:可能需要添加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

注意事项

  1. 云平台限制:部分云厂商限制自定义引导,需开启"自定义镜像"或"GRUB编辑"功能
  2. 共享/boot分区:可共享,但需注意内核命名冲突
  3. 使用独立/boot分区:更安全,避免覆盖
  4. UEFI/GPT:若云服务器使用UEFI,需确保ESP分区包含两个系统的引导文件
  5. 测试:先在本地虚拟机测试,再部署到云服务器

推荐方案

对于生产环境,建议:

  • 使用独立磁盘安装第二个系统
  • 通过云平台启动菜单选择启动磁盘(更稳定)
  • 或使用KVM虚拟化在单台云服务器上运行双系统

通过以上步骤,您可以在云服务器上实现GRUB引导的双系统。

云服务器