疯狂の猿猴

【全网首发】极限低成本吃满阿里云 CDT 200G 高速流量:Alpine 作为救援系统,一键重装 Debian(修复 GRUB / 清理 isohybrid 残留全流程)
更新(2026.01.10): 重要提示:从自制镜像中读取到的 alpine virt iso 救援系统,在 VN...
扫描右侧二维码阅读全文
28
2026/01

【全网首发】极限低成本吃满阿里云 CDT 200G 高速流量:Alpine 作为救援系统,一键重装 Debian(修复 GRUB / 清理 isohybrid 残留全流程)

更新(2026.01.10):

  • 重要提示:从自制镜像中读取到的 alpine virt iso 救援系统,在 VNC 执行 setup-alpine,将正式系统写入到硬盘后,该临时系统还运行在内存中,必须要重启!必须要重启!必须要重启!重启后进入到的 alpine 系统,才是从系统硬盘中读取的正式系统,才可以进行设置 DNS、配置源、清除硬盘标签、执行脚本重装等后续工作。

更新(2026.01.06):

  • 援引源网站证书于 2026 年 1 月 4 日失效,且网站开启了 HSTS,无法为此网站添加例外以访问,web archive 里也没有存档,我保存了一份在本地,看来得补档了。

  • 已补档至本站。

援引 & 致谢:
使用阿里云CDT 享受每月200G/4元高速流量

如果以上链接无法打开,请访问本站补档:
【补档】使用阿里云CDT 享受每月200G/4元高速流量

补正:援引文章“五. 安装系统” → 过程 → 一:安装”中的“这样配置好用户名和密码及时区,代理跳过”文字下方的流程演示有一个坑,需要我们手动回避,在选择 APK Mirror 的时候,一定要摁“(s) Show mirror list”,然后按空格翻页,找到阿里云(aliyun)镜像源所属的序号,再做选择,如果只按原文图示直接按“49”,有可能会连接到一个速度极慢的源,因为这个镜像列表是实时更新的,截止我做测试时,阿里云的镜像源序号是“44”,这个序号未来还会根据该列表的更新而随时变化,切勿刻舟求剑。

本篇教程的目的,是我们用自制镜像,启动阿里云极低配置的抢占式实例后,需要在新安装的系统内,清除掉手动安装 Alpine Linux virt 版后,其为了兼容性而在硬盘上,打了 gpt 分区、iso 镜像的标签,进而导致我们手动修复 grub 受阻,使重装系统脚本失效,为什么不用阿里云自带的重装功能,非要自己挂载镜像安装? 援引文章里说了,官方镜像的使用条件,最低要求 20GB 硬盘才能灌入系统,即使是社区镜像,最低也要 16 GB 硬盘,硬盘容量越低,使用费用越低,16 GB 还是太大,缩减到 10 GB,甚至是 5 GB,并且能用脚本自由重装系统,才是我们的目标。

教程成果 check list:

  • wipefs -n /dev/vda 仅剩 dos
  • 执行 grub-install /dev/vda 无报错
  • 存在 /boot/grub/grub.cfg
  • 重启出现 grub 菜单,并能被引导进入系统

声明:本教程案例系统盘为“vda”及“/dev/vda”,强烈建议先确认系统盘设备名。

lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE

若系统盘不是 /dev/vda(如 /dev/sda 或 /dev/nvme0n1),则以下所有命令中的 vda 需替换,后续 dd 命令执行的是破坏性写入操作,操作前请务必确认好扇区起始位置、目标硬盘、扇区计数等参数,由于个人失误造成的操作系统无法重启、数据损坏等后果自负,切勿盲目照抄。由于修改的主要是磁盘头部扇区数据,所以理论上低于 10 GB 以下的硬盘也可以按本 SOP 指示完成操作。

安装好 alpine 并重启后的操作:

  1. 更新源
apk update
  1. 安装编辑器
apk add vim
  1. 启用更多源

开启社区源。

vim /etc/apk/repositories

#http://mirrors.aliyun.com/alpine/v3.23/community 注释去掉(把“http”前面的井字符号删除即可)。

  1. 安装其它必要组件
apk add bash curl util-linux parted e2fsprogs
  1. 使用 wipefs 查看磁盘标签,如若类似于以下结果:
wipefs -n /dev/vda
DEVICE OFFSET TYPE    UUID                   LABEL
vda    0x8001 iso9660 2025-12-17-07-03-17-00 alpine-virt 3.23.2 x86_64
vda    0x1fe  dos                            
vda    0x200  gpt

说明 gpt 分区表、iso 标签的存在,会影响到后续 grub 的配置与引导,需要清除:

  1. 确认 /boot 分区正在被挂载在本机硬盘 vda 上
mount | grep -E '/boot|vda' || true
/dev/vda3 on / type ext4 (rw,relatime)
/dev/vda1 on /boot type ext4 (rw,relatime)
  1. 如果第 6 步确认为是(非空),卸载 /boot 分区,以免被干扰
umount /boot
  1. 确认 vda1 的起始位置(可选)
parted -s /dev/vda unit KiB print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 10485760kiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start       End          Size        Type     File system     Flags
 1      1024kiB     308224kiB    307200kiB   primary  ext4            boot
 2      308224kiB   1199104kiB   890880kiB   primary  linux-swap(v1)  swap
 3      1199104kiB  10485760kiB  9286656kiB  primary  ext4

因为第 10 步会清除 32 KiB - 1024 KiB 区间,若 vda1 起始扇区小于 1024 KiB,会直接使 vda1 分区数据遭到破坏。

  1. 用 wipefs 清除 iso、gpt 标签的做法更为规范,但经常会遇到设备忙的问题(wipefs: error: /dev/vda: probing initialization failed: Resource busy),如果执行本步清除命令不成功,直接跳转到第 10、11 步,继续用 dd 命令强制清除

确认 swap 挂载状态,如果为空,不需要卸载:

swapon --show || true
NAME      TYPE      SIZE USED PRIO
/dev/vda2 partition 870M   0B   -2

卸载 swap:

swapoff -a

再次确认 swap 挂载状态,如果卸载失败,请根据报错自行解决权限等问题:

swapon --show || true

清除硬盘 vda 上的 iso 9660 标签:

wipefs -a -t iso9660 -f /dev/vda

清除硬盘 vda 上的 gpt 标签:

wipefs -a -t gpt -f /dev/vda

wipefs 成功后,再次:

wipefs -n /dev/vda

结果应该不再出现 iso 9660 / gpt,若二者仍然存在,或 wipefs 报错/忙,再按照第 10、11 步 dd。

  1. 确认系统盘第一个分区起点大于 1024KiB(见第8步),否则不要执行本条 dd 命令

alpine linux virt ISO 的 iso 9660 签名 / 卷描述符,会落在磁盘早期区域(非 0 扇区),而本机 vda1 从 1 MiB 对齐开始,所以清除 32 KiB - 1 MiB 区块,可以抹掉 iso 签名且不损伤分区内其他数据,以 10GB ESSD 硬盘,以上 wipefs 查询结果为例,清除“ISO 9660 签名区域”,32 KB - 1 MB,安全区:

dd if=/dev/zero of=/dev/vda bs=1K seek=32 count=992 conv=notrunc
992+0 records in
992+0 records out
1015808 bytes (992.0KB) copied, 0.174056 seconds, 5.6MB/s

sync
  1. 清除“GPT 头/表”,LBA1 开始的 33 个扇区,不要动 MBR 的 LBA0
dd if=/dev/zero of=/dev/vda bs=512 seek=1 count=33 conv=notrunc
33+0 records in
33+0 records out
16896 bytes (16.5KB) copied, 0.000082 seconds, 196.5MB/s

sync
  1. 重新挂载 /boot 分区

“vda1”在其他环境可能有所不同,需要用“lsblk”事先确认:

lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT
NAME    SIZE FSTYPE MOUNTPOINT
vda      10G        
├─vda1  300M ext4   
├─vda2  870M swap   
└─vda3  8.9G ext4   /

再根据实际硬盘名挂载 /boot:

mount /dev/vda1 /boot
  1. 验证 gpt、iso 标签,是否已被清除
wipefs -n /dev/vda
DEVICE OFFSET TYPE UUID LABEL
vda    0x1fe  dos
  1. 如果在硬盘末尾 33 个扇区,还发现了残留的 gpt 分区标签,则需要继续清理
SECTORS=$(cat /sys/block/vda/size)
dd if=/dev/zero of=/dev/vda bs=512 seek=$((SECTORS-33)) count=33 conv=notrunc
sync
  1. 确认清除后,参考 alpine linux 官方指南,安装并配置 grub:

  2. 安装 grub,grub-bios 组件

apk add grub grub-bios
  1. 用 lsblk 确认自己的系统盘符名,阿里云 ECS 系统盘默认为“vda”(如果不是,请自行修改)
lsblk -f
NAME   FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
vda                                                                           
├─vda1 ext4               53a935b3-8725-4c1e-9d2d-2b685d3ab97f  225.3M    10% /boot
├─vda2 swap               05554c58-807d-420f-ad8a-cbf054f32faf                
└─vda3 ext4               3c9fca1f-4161-4a64-a94b-03da3fe216d5      8G     1% /

然后以 BIOS 模式,将 MBR 与 GRUB 二进制文件安装到系统盘:

grub-install --recheck /dev/vda

显示以下结果,说明安装成功:

Installing for i386-pc platform.
Installation finished. No error reported.

如果 grub-install 在执行后,报以下错误,说明 gpt、iso 等标签未被清除干净,需要重新运行步骤 5 确认:

grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels. This is not supported yet..
grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.

以上各类错误发生的原因,是 alpine 的 virt 版 ISO,为了保证能以光盘模式发行,被制成可引导启动的镜像的同时,还可以被安装在硬盘上启动,以及在 BIOS 与 UEFI 两种固件的机型上兼容运行,采取了 isohybrid(混合引导)模式,它自带:

  • iso 9660(光盘文件系统签名)
  • dos(MBR 签名,0x55AA)
  • gpt(GPT 头/表签名)

然而用户在安装并配置 grub 时,grub 认为,硬盘“/dev/vda”上,同时存在不止一种分区表签名(比如 MBR(msdos) + 残留的 GPT 头/尾),所以提示:

disk with multiple partition labels

然后直接禁止 embedding(嵌入 core.img),只能退回到 blocklists,而 grub2 默认拒绝 blocklists → will not proceed with blocklists,这就会触发 grub 的写保护逻辑,导致配置失败。

  1. 读取硬盘 vda 的第一个扇区,并以 16 进制的形式,输出最后部分,确认 MBR 扇区结尾为 55 aa(MBR 签名),能否被成功引导,以第 21 步重启出现 grub 菜单为准
dd if=/dev/vda bs=512 count=1 | hexdump -C | tail
1+0 records in
1+0 records out
512 bytes (512B) copied, 0.000021 seconds, 23.3MB/s
00000170  be 95 7d e8 34 00 be 9a  7d e8 2e 00 cd 18 eb fe  |..}.4...}.......|
00000180  47 52 55 42 20 00 47 65  6f 6d 00 48 61 72 64 20  |GRUB .Geom.Hard |
00000190  44 69 73 6b 00 52 65 61  64 00 20 45 72 72 6f 72  |Disk.Read. Error|
000001a0  0d 0a 00 bb 01 00 b4 0e  cd 10 ac 3c 00 75 f4 c3  |...........<.u..|
000001b0  00 00 00 00 00 00 00 00  8e 55 75 6a 00 00 80 00  |.........Uuj....|
000001c0  21 02 83 08 b8 63 00 08  00 00 00 60 09 00 00 08  |!....c.....`....|
000001d0  b9 63 82 0f ff ff 00 68  09 00 00 30 1b 00 00 0f  |.c.....h...0....|
000001e0  ff ff 83 0f ff ff 00 98  24 00 00 68 1b 01 00 00  |........$..h....|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200
  1. 编辑“/etc/default/grub”文件,在最后一行加上一条用于启动当前系统的命令行:
vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet rootfstype=ext4"

如遇极少数环境下,initramfs 未包含 virtio 模块,才考虑追加参数“modules=virtio,virtio_pci,virtio_blk”。

  1. 自动生成配置文件并使grub生效
grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-virt
Found initrd image: /boot/initramfs-virt
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done

出现“Warning”提示是,grub 不会自动扫描并添加其它系统(如 Windows、其它 Linux 发行版)到其引导项,单系统环境下,该问题视同可被忽略。

  1. 重启系统,在 VNC 下可看出,alpine linux 已由 grub 引导启动。

grub1.png

  1. 已确认 VNC 显示 grub 菜单并进入 alpine,删除 alpine linux virt 默认的 syslinux 引导工具。
apk del syslinux
  1. grub 引导问题解决,再次进入 alpine,用一键脚本重装其他系统就没问题了,alpine linux 虽然也折腾不少了,但果然还是没有 Debian 顺手。

grub2.png

  1. 重装成 Debian 13。

下载:

wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh

安装 Debian 13,推荐使用来自阿里云内网“aliyuncs.com”域名的源,该源不对外提供服务,外界同样无法访问,但阿里云任何地域机器都可以访问当地的内网源,延迟、传输速度对阿里云机器来说,可谓是最爽的,指定为其分配 512 MB 虚拟内存(-swap '512'),强制关闭安装云内核(--cloudkernel "0")、开启 bbr(--bbr)、开启 ssh 登录时类 Ubuntu 的系统状态显示(--motd)、强制将 DNS 修改成 Cloudflare 与 Google,不走云服务商自己提供的 DNS 配置(--setdns),以免 DNS 解析被污染。

bash InstallNET.sh -debian 13 -port "端口自定,默认跟随原系统" -pwd '密码自定,默认 LeitboGi0ro' -mirror "http://mirrors.cloud.aliyuncs.com/debian/" -swap '512' --cloudkernel "0" --bbr --motd --setdns

最后修改:2026 年 01 月 28 日
赞赏必须赞赏,多多益善,老板一直发大财!
×