有的服务商为了防止用户搞坏系统或者为了强推他们的系统模板,会通过外部脚本在启动时绕过甚至覆盖用户的 GRUB 选择。

既然讲道理(改 GRUB)行不通,我们就不走正常引导流程了。作为具有 root 权限的 Linux 管理员,你有两种终极手段可以完全绕过服务商的引导限制。


方案 A:使用 kexec “热切换”内核(最优雅,强烈推荐)

既然你现在能正常登录这个 Debian 12,我们就可以使用 Linux 的一个黑科技:kexec。
它的原理是:在不经过主板 BIOS/EFI、不经过 GRUB、不发生真实硬件重启的情况下,直接在内存中把当前运行的系统内核“踢掉”,瞬间加载并启动安装程序的内核。

服务商的引导锁死只在“冷启动”时生效,kexec 直接在系统内部“热启动”,完美绕过所有限制。

操作步骤:

  1. 安装 kexec-tools

    apt update
    apt install kexec-tools -y

    (如果在安装过程中弹出一个粉红色界面问你是否“默认用 kexec 处理所有的重启”,选择 No,我们只手动用这一次。)

  2. 将安装程序加载到内存准备“弹射”
    请确保 /boot/linux 和 /boot/initrd.gz 还在。执行以下命令(注意把参数一字不差地带上):

    kexec -l /boot/linux \
    --initrd=/boot/initrd.gz \
    --append="console=tty0 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 consoleblank=0 DEBIAN_FRONTEND=text"

    (执行完后不会有任何提示,这表示内核已成功装载进内存待命。)

  3. 执行热切换(断网警告)
    打开你的 VNC 或者 JS Terminal 窗口并保持在前面,然后在 SSH 里执行终极指令:

    kexec -e

    按下回车的一瞬间,你的 SSH 会立刻断开连接。 此时立刻切到 VNC 或 JS Terminal,你会看到屏幕没有黑,而是直接滚出了一堆全新的 Linux 内核加载日志——恭喜你,你已经绕过宿主机,直接冲进了 Debian 文本安装向导!


方案 B:狸猫换太子大法(最暴力,物理覆盖)

如果在极其罕见的情况下,服务商的内核阉割了 kexec 功能导致报错,你可以直接使用物理覆盖法。

既然宿主机“死活都要加载默认的 /boot/vmlinuz-6.1.0-xx-amd64”,那我们就把安装程序伪装成默认内核!

操作步骤:

  1. 找出当前的默认内核名字

    ls -l /boot/vmlinuz-* /boot/initrd.img-*

    假设你看到的是 vmlinuz-6.1.0-21-amd64 和 initrd.img-6.1.0-21-amd64。

  2. 备份原来的内核(防止万一)

    mv /boot/vmlinuz-6.1.0-21-amd64 /boot/vmlinuz-6.1.0-21-amd64.bak
    mv /boot/initrd.img-6.1.0-21-amd64 /boot/initrd.img-6.1.0-21-amd64.bak
  3. 伪造内核
    把下载好的安装程序文件,直接改名成默认内核的名字:

    cp /boot/linux /boot/vmlinuz-6.1.0-21-amd64
    cp /boot/initrd.gz /boot/initrd.img-6.1.0-21-amd64
  4. 骗过 GRUB 并重启
    因为文件名一模一样,你不需要去改任何自定义菜单了。直接打开 /etc/default/grub,确保 GRUB_DEFAULT=0,并且保留我们加的那串串口参数。然后:

    update-grub
    reboot

    重启后,宿主机以为它加载的是正常的 Debian 12,但实际上它加载的是套着同样名字的安装向导。你连上 VNC 就能看到安装界面了。

建议你先尝试 方案 A (kexec),它是 Linux 老鸟在折腾远端服务器时最常用的越狱手段,安全且高效。


附注(Ray): 常规方案已经搞不定bero-host了😳
他家的分区并不合理,没法忍默认配置
https://ytai.de/t/topic/35