用Debian的Netboot安装系统-并恢复vps服务商的默认配置

方案:官方 Debian Netboot (跳过 netboot.xyz)

不使用 netboot.xyz,因为它带有一个复杂的图形菜单。(家人云的LA地区居然不支持vga=788–“窄黑框”彻底卡死)
选择直接加载 Debian 官方的安装内核。官方内核支持直接在启动参数里强制开启“纯文本模式”和“串口输出”,这能 100% 解决黑屏/窄框问题。

iPXE (netboot.xyz) 的图形化菜单与你服务商的 VNC 渲染分辨率不匹配。这种情况在某些 KVM 虚拟化环境中非常顽固。官方内核不带复杂的菜单。


第一步:下载官方安装文件:

# 进入引导目录
cd /boot

# 下载 Debian 13 (Trixie) 官方网络安装内核和 initrd
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

第二步:修改 GRUB 强制进入“纯文本串口模式”

1. 修正以下内容 寻找正确的磁盘对grub很重要。用uuid或自己找到正确的set root位置。(如:set root=‘(hd0,1)’)

# 1. 获取 vda1 的 UUID
UUID=$(blkid -s UUID -o value /dev/sda3) //按下图要选sda3--不是efi/esp分区。
大多数时候显示这样,选vda3 (标准boot分区)

|-vda1 254:1 0 1M 0 part
|-vda2 254:2 0 191M 0 part /boot/efi
|-vda3 254:3 0 763M 0 part /boot

//用lsblk看下boot分区位置
比如:down_arrow:

2. 将配置写入 /etc/grub.d/40_custom(加入这个绝不黑屏的启动项;并注意修改网卡为eth0)

cat << EOF >> /etc/grub.d/40_custom

menuentry 'Debian Official Network Install (Text Mode)' {
    insmod part_gpt
    insmod ext2
    # 使用 UUID 自动查找并设置根分区,比 (hd0,1) 更可靠
    search --no-floppy --fs-uuid --set=root $UUID
    
    linux /boot/linux console=tty0 console=ttyS0,115200n8 DEBIAN_FRONTEND=text
    initrd /boot/initrd.gz
}
EOF

3. 更新 GRUB 配置文件

update-grub



*注:`console=ttyS0` 是为了让你在面板的 **Serial Console** 里也能看到输出。* `DEBIAN_FRONTEND=text` 使用字符界面,这在任何 VNC 或串口下都能完美显示。

---

### 第三步:装完后的“灵魂”恢复 (只适合家人云/bitsflow和sda存储了配置的情况)

系统安装完成后重启,你会发现它又变回了纯净版。**此时务必执行最后一步,否则你的 Cloud-init 就彻底丢了:**

1. 登录系统后:`apt update && apt install -y cloud-init`。
2. **写入补丁**:
```bash
# 强制认领商家的配置
echo -e "datasource_list: [ NoCloud ]\ndatasource:\n  NoCloud:\n    seed_device: /dev/sda" > /etc/cloud/cloud.cfg.d/99_virtfusion.cfg

附录:尝试复原商家cloud-init:
把你备份的 05_logging.cfg 丢进 /etc/cloud/cloud.cfg.d/。
执行 cloud-init clean && cloud-init init。

其他收尾:
修改这个文件末尾的ens3为eth0 /etc/udev/rules.d/70-persistent-net.rules
之后建议重启。
或者

sudo udevadm control --reload-rules && sudo udevadm trigger
sudo update-initramfs -u
#这会重新触发规则,但不一定能在线改名成功,最稳妥的还是重启

看下/etc/network/interfaces.d/50-cloud-init 里面有你全部的ip信息包括v6(面板设过的地址都在,说明从cloud-init获得ip正常。

那之前安装时手动设置过的IP都是多余的了。可以清理掉。

sudo mv /etc/network/interfaces /etc/network/interfaces.bak
sudo bash -c 'cat <<EOF > /etc/network/interfaces
# 本文件由手动创建,基础回环接口
auto lo
iface lo inet loopback

# 包含 cloud-init 生成的配置
source /etc/network/interfaces.d/*
EOF'

适合ultravps的特殊vnc(freebsd的虚拟化/SYSbhve)
编辑/etc/default/grub

GRUB_DEFAULT=0
GRUB_TIMEOUT=30
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="efi=runtime console=tty0 console=ttyS0,115200n8 verbose tsc=reliable"
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"

#lsblk :down_arrow:

|-vda1 254:1    0    1M  0 part 
|-vda2 254:2    0  191M  0 part /boot/efi
|-vda3 254:3    0  763M  0 part /boot

选择vda3

cat << EOF >> /etc/grub.d/40_custom
menuentry 'Debian Official Network Install (Text Mode)' {
    insmod part_gpt
    insmod ext2
    search --no-floppy --fs-uuid --set=root $BOOT_UUID
    linux /linux console=tty0 console=ttyS0,115200n8 DEBIAN_FRONTEND=text
    initrd /initrd.gz
}
EOF