全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 899|回复: 6

甲骨文arm提取livecd的iso里面文件重装系统

[复制链接]
发表于 2021-12-16 16:46:53 | 显示全部楼层 |阅读模式
本帖最后由 mmc199 于 2021-12-21 15:12 编辑

网上有些iso直接dd到甲骨文的附加存储卷上可以引导起来重装系统,
  1. sudo dd if=xxx.iso of=/dev/sdb bs=10M
复制代码

但是有些iso里面的引导文件甲骨文的bios无法识别


我们就保留能成功引导iso里面的 xxx.iso\boot\ 文件夹和 xxx.iso\efi\ 文件夹,再替换选择菜单文件 xxx.iso\boot\grub\grub.cfg

并用刻录软件UltraISO把你想安装的iso(如果不能直接引导)的里面的其他文件夹合并到一个能成功引导的iso里面,(用同名文件覆盖的方式替换,不要直接删掉原iso的文件夹再放新文件夹,否则可能还会缺少某些文件而无法启动),再dd到附加引导卷上就能启动了。
但在光盘安装时还是卡在了96%,就换了另一种方法,在论坛做个笔记。


livecd的\casper\文件夹里面都有一个或几个.squashfs文件,打开后发现就是一个完整linux的根分区文件系统,
直接在另一台linux上下载iso挂载,打开iso后再挂载.squashfs文件,给要装系统的引导卷分区,第一分区为efi分区,第二分区为根分区/,复制.squashfs文件夹下所有文件到根分区/ 。
  1. sudo mkdir /mnt/文件夹1 /mnt/文件夹2 /mnt/文件夹3
  2. sudo mount xxx.iso /mnt/文件夹1
  3. sudo mount -t squashfs /路径/squashfs文件名 /mnt/文件夹2 -o loop  
  4. sudo mount /dev/sdb2  /mnt/文件夹3
  5. sudo cp -R /mnt/文件夹2/* /mnt/文件夹3/
复制代码

再自己修复引导,复制arm机的efi分区的所有文件到挂载/dev/sdb1的文件夹;或者复制xxx.iso\[boot]目录下的Boot-NoEmul.img文件里的EFI目录,
Boot-NoEmul.img如果7zip不能解压就用WinImage软件读取。xxx.iso下有[boot]和boot两个文件夹,取含有BOOTAA64.EFI、grubaa64.efi文件的[boot]文件夹放到硬盘efi分区就行了,这也就是iso引导时的efi分区。

  1. sudo mkdir /mnt/文件夹4 /mnt/文件夹5
  2. sudo mount /dev/sda1 /mnt/文件夹4
  3. sudo mount /dev/sdb1 /mnt/文件夹5
  4. sudo cp -R /mnt/文件夹4/* /mnt/文件夹5/
复制代码

efi分区应有如下文件结构用于启动,BOOTAA64.EFI、grubaa64.efi可以是同一文件
grub.cfg 里自行替换 sdb2 的分区uuid,这样启动时efi分区就能挂载到根分区的/boot/efi/文件夹下
查询分区uuid命令blkid
  1. blkid
  2. /dev/sda2: UUID="72dbbfac-9d2f-48c9-967c-a60a23b2795e" TYPE="ext4" PARTUUID="92d13935-d981-44ae-bb79-c7e24c365431"
  3. /dev/sda1: SEC_TYPE="msdos" UUID="769E-A3EF" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="17eab769-4c27-48db-a272-41c4ba6c3ff0"
  4. ......
复制代码

  1. $ sudo ls /boot/efi/
  2. EFI
  3. $sudo ls /boot/efi/EFI
  4. BOOT  ubuntu
  5. $ sudo ls /boot/efi/EFI/boot
  6. BOOTAA64.EFI
  7. $ sudo ls /boot/efi/EFI/ubuntu
  8. grubaa64.efi  grub.cfg
  9. $ sudo ls /boot/efi/EFI/ubuntu/grub.cfg
  10. /boot/efi/EFI/ubuntu/grub.cfg
  11. $ sudo cat /boot/efi/EFI/ubuntu/grub.cfg
  12. search.fs_uuid 72dbbfac-9d2f-48c9-967c-a60a23b2795e root hd0,gpt2
  13. set prefix=($root)'/boot/grub'
  14. configfile $prefix/grub.cfg
复制代码

接下来用grub-install工具扫描sdb2中的linux系统重新生成grub.cfg ,
以sdb2为例,直接粘贴以下命令,返回结果“正在为arm64-efi平台安装”“安装完成。没有报告错误”
  1. #接上面 sudo mount /dev/sdb2 /mnt/文件夹3
  2. sudo mkdir /mnt/文件夹3/boot/efi
  3. sudo mount /dev/sdb1 /mnt/文件夹3/boot/efi
  4. sudo mount --bind /dev /mnt/文件夹3/dev
  5. sudo mount --bind /sys /mnt/文件夹3/sys
  6. sudo mount --bind /proc /mnt/文件夹3/proc
  7. sudo chroot /mnt/文件夹3
  8. sudo update-grub
  9. sudo grub-install /dev/sdb  
复制代码


#(1)如果没有mount第一句,会提示找不到efi分区。  (2)如果没有mount第2、3、4句会提示找不到dev、sys、proc设备。  (3)如果没有把grub.cfg里面硬盘uuid修改,grub-install就会搞成启动原uuid的硬盘里面的系统。
#mount --bind是把当前linux系统加载的程序强制绑定替换掉sdb2里的,这样chroot切换根目录后grub-install命令才能正常运行。
以上步骤做完后,引导卷sdb就能启动了,可以放回原来的实例使用
#因为我选择的livecd是试用时就是root登录lightdm图形桌面了,并且ssh、防火墙都是能连的状态,我就直接连vnc操作了,vnc下执行一条sudo命令就能刷新root的密码锁定状态。甲骨文root用户可能被扫鸡脚本多次输错root密码而拒绝连接,所以应该chroot后建立一个sudoer帐号连ssh用。
#这样生成引导后选择菜单第一项是ubuntu,第二项是自动识别的系统名,两者是一样的,如果不想重复生成第一项ubuntu,可以把efi分区含grubaa64.efi、grub.cfg的/ubuntu文件夹删掉,应该也是可以成功的。
附一个甲骨文arm能直接启动的iso:https://cdimage.ubuntu.com/releases/21.10/release/ubuntu-21.10-live-server-arm64.iso
发表于 2021-12-16 16:47:18 | 显示全部楼层
挺好  技术提顶一下
发表于 2021-12-16 16:48:36 | 显示全部楼层
帮顶下,技术贴很少了,大家都在水水更健康
发表于 2021-12-16 16:48:59 | 显示全部楼层
我昨晚还在想 有没有可能复原镜像.. 今天就有大佬研究了..
发表于 2021-12-16 16:52:01 来自手机 | 显示全部楼层
技术贴,火钳刘明!!
发表于 2021-12-16 16:52:57 | 显示全部楼层
技术贴 河南拔智齿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2026-4-29 05:43 , Processed in 0.062332 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表