手把手教你:给VPS预留GRUB抢救窗口及无痛升级Debian 13

玩VPS的朋友可能都遇到过这种情况:系统内核崩了或者更新报错,重启后只有几秒钟的窗口期进入救援模式,手速慢了只能看着服务器无限重启或者直接失联。今天分享两个非常实用的运维技巧,一个是给GRUB增加“救命”的等待时间,另一个是如何利用现有的系统引导直接Netboot安装最新的Debian 13。

虽然这里以常见的面板环境为例,但这套逻辑对于大多数Linux VPS都是通用的,哪怕是Debian原生环境也没问题。


Part 1:给GRUB预留“黄金救援时间”

默认情况下,很多VPS的GRUB引导菜单是隐藏的或者等待时间极短(比如0秒或1秒),这对自动启动很友好,但对故障排查简直是噩梦。一旦系统起不来,你连选个“Advanced options”进单用户模式的机会都没有。

修改方法非常简单,三步搞定:

1. 编辑配置文件

首先,我们需要修改GRUB的默认配置文件。使用你喜欢的编辑器(这里nano举例):

Debian 文本模式安装界面

Debian 经典的蓝色文字安装界面,显示了网络配置步骤。

sudo nano /etc/default/grub

2. 调整关键参数

找到或修改以下行。为了兼顾救援效率和启动速度,建议设置3到5秒的等待时间。同时,针对部分VPS需要通过VNC或串口查看输出的情况,建议开启控制台输出。

修改后的关键配置如下(注释掉的地方可以忽略,重点看下面几行):

GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5
GRUB_DEFAULT=0
GRUB_RECORDFAIL_TIMEOUT=5
#以下两行对于需要通过VNC查看启动日志的机器很重要
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
  • GRUB_TIMEOUT_STYLE=menu:这会强制显示菜单,而不是隐藏,方便你直观看到选项。
  • GRUB_TIMEOUT=5:菜单停留5秒,足够你思考和按下方向键了。
  • GRUB_TERMINALGRUB_SERIAL_COMMAND:这两行主要为了确保在使用VNC查看器时,能看到GRUB的输出,不至于黑屏。

3. 更新并生效

修改完成后,记得保存(Ctrl+O)退出(Ctrl+X),然后执行更新命令让配置生效:

sudo update-grub

做完这一步,下次重启时你就会发现系统启动时有了明显的停顿,这为你进入恢复模式提供了宝贵的时间窗口。


Part 2:硬核实战——Netboot安装Debian 13 (Trixie)

Debian 13(代号Trixie)虽然还没正式定为当前稳定版,但很多追新的朋友已经想尝鲜了。或者你的系统崩了,不想重装面板,想直接Netboot一个纯净版。

常规做法是挂载ISO,但很多廉价VPS并不提供挂载ISO的功能。利用现有的引导加载器GRUB,我们完全可以把新系统的内核引导起来,直接通过网络安装。

第一步:下载安装内核和文件系统

我们要把官方的Netboot文件下载到本地 /boot 分区。如果你的 /boot 空间紧张,记得清理一下旧内核。

直接执行以下命令,下载Debian 13官方的 linux 内核和 initrd.gz 虚拟文件系统:

cd /boot && \
wget https://deb.debian.org/debian/dists/trixie/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux && \
wget https://deb.debian.org/debian/dists/trixie/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz

第二步:确认分区UUID

为了防止因为盘符变动导致找不到引导文件,我们用UUID来定位分区。

先看看你的 /boot 在哪个分区:

lsblk

通常 /boot 可能是独立的分区(如 /dev/sda1),也可能直接在根分区下。确认后,获取其UUID(假设是 /dev/sda1):

UUID=$(blkid -s UUID -o value /dev/sda1)

(注意:请务必将 /dev/sda1 替换为你实际 lsblk 查看到的 boot 或根分区设备名)

第三步:写入自定义GRUB菜单

我们将安装条目写入GRUB的自定义配置文件中,这样它不会在系统更新后丢失。

执行以下命令(注意 $UUID 会自动替换成上面获取的值):

cat << EOF >> /etc/grub.d/40_custom
menuentry 'Debian Official Network Install (Text Mode)' {
    insmod part_gpt
    insmod ext2
    # 使用 UUID 自动查找并设置根分区
    search --no-floppy --fs-uuid --set=root $UUID
    linux /boot/linux console=tty0 console=ttyS0,115200n8 DEBIAN_FRONTEND=text
    initrd /boot/initrd.gz
}
EOF

这里的配置解析:

  • console=ttyS0,115200n8:这一串参数是为了让你在VNC或串口控制台里能看到安装器的文字界面。
  • DEBIAN_FRONTEND=text:强制使用字符界面安装,省资源且稳定。

第四步:再次更新GRUB并重启

sudo update-grub

更新成功后,去面板重启你的VPS,马上打开VNC查看器。

重启时,你会看到刚才设置的GRUB菜单出现。如果不操作,默认进旧系统;这时候迅速按方向键,选择 “Debian Official Network Install (Text Mode)” 并回车。

进入安装环节

稍等片刻,屏幕上会出现Debian经典的蓝色文字安装界面。接下来的步骤就和普通装系统一样了。

关于网络配置的一点小贴士: 很多服务商的VPS在安装Debian时需要手动填写IP、网关和掩码。但在部分优质面板环境下,系统支持自动通过DHCP获取内网IP。如果你不确定自己的网络配置,可以先去面板控制台截图记下来,以防万一。


⚠️ 避坑指南

  1. 不要把系统搞挂了: 虽然Netboot很方便,但在下载内核、修改 40_custom 文件时一定要细心。命令最好复制粘贴,不要手敲错字符。
  2. 关于/boot空间: 下载文件前检查一下空间。如果你的机器 /boot 只有几百兆,记得先 apt autoremove 删掉几个不用的旧内核。
  3. UUID的正确性: 这一步最容易出错。如果 update-grub 没报错,但重启进不了菜单进不去安装,大概率是UUID对不上,或者 linuxinitrd.gz 的路径没写对(比如有些机器的 boot 目录就是根目录下的 /boot,有些则是单独挂载,单独挂载时路径可能只需要写 /linux 而不是 /boot/linux,具体情况需根据 lsblk 挂载点判断)。

掌握了这两个技巧,无论你是想尝鲜Debian 13,还是在系统崩溃时最后救一命的VPS急救术,都更加游刃有余了。玩机愉快!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭