原始环境
服务器:
-
云厂商:Oracle Cloud
-
架构:ARM64(Ampere)
-
系统:Oracle Linux 7.9
确认命令:
cat /etc/os-release
uname -m
结果:
Oracle Linux Server 7.9
aarch64
使用 reinstall 脚本 DD
下载脚本:
curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh
执行 Rocky 10 安装:
bash reinstall.sh rocky10
脚本自动:
-
下载 Alpine 临时系统
-
修改 GRUB
-
重启进入 Alpine
-
再由 Alpine 写入目标系统镜像
遇到的问题
进入 Alpine 后报错:
Could not find xda: 00000000
日志显示:
extra_main_disk=00000000
查看:
cat /proc/cmdline
发现:
extra_main_disk=00000000
被写入启动参数。
排查过程
查看磁盘:
cat /proc/partitions
结果:
sda
sda1
sda2
sda3
说明:
-
磁盘实际上存在
-
主盘就是
/dev/sda -
reinstall 自动识别主盘失败
查看 trans.sh
定位逻辑:
grep -n "main_disk\|xda" /trans.sh
发现:
if [ -z "$main_disk" ]; then
error_and_exit
fi
以及:
find_xda()
函数会根据:
extra_main_disk
寻找真实磁盘。
因为:
extra_main_disk=00000000
所以找不到:
/dev/sda
导致:
Could not find xda: 00000000
解决办法
强制指定:
xda=sda
重新运行安装:
sudo sh -c 'xda=sda ash /trans.sh'
这里不能用:
sudo -E
因为 Alpine 里的 sudo 实际是:
doas-sudo-shim
不支持:
-E
安装成功标志
最后出现:
***** DEL INVALID EFI ENTRY *****
删除旧启动项:
Oracle Linux
reinstall (rocky 10)
然后创建新的 EFI:
Boot0003* bootaa64.efi
最终:
***** DONE *****
表示:
-
镜像写入成功
-
EFI 修复成功
-
启动项已注册
-
可以重启
重启
执行:
reboot
系统正常进入:
Rocky Linux 10
这次踩坑的根因
不是:
-
ARM 不支持
-
Rocky 10 镜像损坏
-
Oracle Cloud 不兼容
真正原因是:
extra_main_disk=00000000
这个参数被错误写入启动命令行。
脚本自动识别主盘失败。
而实际主盘是:
/dev/sda
手动指定:
xda=sda
后安装立即成功。
下次如果再遇到
看到:
Could not find xda: 00000000
直接:
cat /proc/partitions
确认磁盘。
如果是:
sda
直接:
sudo sh -c 'xda=sda ash /trans.sh'
如果是:
vda
则:
sudo sh -c 'xda=vda ash /trans.sh'
如果是:
nvme0n1
则:
sudo sh -c 'xda=nvme0n1 ash /trans.sh'
通常就能继续安装。
这次实际上是绕过了 reinstall 脚本的自动探测 Bug,手工指定系统盘完成了 DD。