有的服务商为了防止用户搞坏系统或者为了强推他们的系统模板,会通过外部脚本在启动时绕过甚至覆盖用户的 GRUB 选择。
既然讲道理(改 GRUB)行不通,我们就不走正常引导流程了。作为具有 root 权限的 Linux 管理员,你有两种终极手段可以完全绕过服务商的引导限制。
方案 A:使用 kexec “热切换”内核(最优雅,强烈推荐)
既然你现在能正常登录这个 Debian 12,我们就可以使用 Linux 的一个黑科技:kexec。
它的原理是:在不经过主板 BIOS/EFI、不经过 GRUB、不发生真实硬件重启的情况下,直接在内存中把当前运行的系统内核“踢掉”,瞬间加载并启动安装程序的内核。
服务商的引导锁死只在“冷启动”时生效,kexec 直接在系统内部“热启动”,完美绕过所有限制。
操作步骤:
安装
kexec-toolsapt update apt install kexec-tools -y(如果在安装过程中弹出一个粉红色界面问你是否“默认用 kexec 处理所有的重启”,选择 No,我们只手动用这一次。)
将安装程序加载到内存准备“弹射”
请确保/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"(执行完后不会有任何提示,这表示内核已成功装载进内存待命。)
执行热切换(断网警告)
打开你的 VNC 或者 JS Terminal 窗口并保持在前面,然后在 SSH 里执行终极指令:kexec -e按下回车的一瞬间,你的 SSH 会立刻断开连接。 此时立刻切到 VNC 或 JS Terminal,你会看到屏幕没有黑,而是直接滚出了一堆全新的 Linux 内核加载日志——恭喜你,你已经绕过宿主机,直接冲进了 Debian 文本安装向导!
方案 B:狸猫换太子大法(最暴力,物理覆盖)
如果在极其罕见的情况下,服务商的内核阉割了 kexec 功能导致报错,你可以直接使用物理覆盖法。
既然宿主机“死活都要加载默认的 /boot/vmlinuz-6.1.0-xx-amd64”,那我们就把安装程序伪装成默认内核!
操作步骤:
找出当前的默认内核名字
ls -l /boot/vmlinuz-* /boot/initrd.img-*假设你看到的是
vmlinuz-6.1.0-21-amd64和initrd.img-6.1.0-21-amd64。备份原来的内核(防止万一)
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伪造内核
把下载好的安装程序文件,直接改名成默认内核的名字:cp /boot/linux /boot/vmlinuz-6.1.0-21-amd64 cp /boot/initrd.gz /boot/initrd.img-6.1.0-21-amd64骗过 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