手把手教你:给VPS预留GRUB抢救窗口及无痛升级Debian 13
手把手教你:给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 经典的蓝色文字安装界面,显示了网络配置步骤。
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_TERMINAL和GRUB_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。如果你不确定自己的网络配置,可以先去面板控制台截图记下来,以防万一。
⚠️ 避坑指南
- 不要把系统搞挂了: 虽然Netboot很方便,但在下载内核、修改
40_custom文件时一定要细心。命令最好复制粘贴,不要手敲错字符。 - 关于/boot空间: 下载文件前检查一下空间。如果你的机器
/boot只有几百兆,记得先apt autoremove删掉几个不用的旧内核。 - UUID的正确性: 这一步最容易出错。如果
update-grub没报错,但重启进不了菜单进不去安装,大概率是UUID对不上,或者linux和initrd.gz的路径没写对(比如有些机器的 boot 目录就是根目录下的/boot,有些则是单独挂载,单独挂载时路径可能只需要写/linux而不是/boot/linux,具体情况需根据lsblk挂载点判断)。
掌握了这两个技巧,无论你是想尝鲜Debian 13,还是在系统崩溃时最后救一命的VPS急救术,都更加游刃有余了。玩机愉快!

评论已关闭