嘟嘟社区

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


本帖最后由 mmc199 于 2021-12-16 17:08 编辑

网上有些iso直接dd到甲骨文的附加存储卷上可以引导起来重装系统,

  1. sudo dd if=xxx.iso of=/dev/sdb bs=10M

复制代码

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


我们就保留能成功引导iso里面的 xxx.isoboot 文件夹和 xxx.isoefi 文件夹,再替换选择菜单文件 xxx.isobootgrubgrub.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 mount /dev/sdb1 /mnt/文件夹3/boot/efi
  3. sudo mount –bind /dev /mnt/文件夹3/dev
  4. sudo mount –bind /sys /mnt/文件夹3/sys
  5. sudo mount –bind /proc /mnt/文件夹3/proc
  6. sudo chroot /mnt/文件夹3
  7. sudo update-grub
  8. sudo grub-install /dev/sdb  

复制代码

#mount –bind是把当前linux系统加载的程序强制绑定替换掉sdb2里的,这样chroot切换根目录后grub-install命令才能正常运行。
以上步骤做完后,引导卷sdb就能启动了,可以放回原来的实例使用
附一个甲骨文arm能直接启动的iso:https://cdimage.ubuntu.com/releases/21.10/release/ubuntu-21.10-live-server-arm64.iso

挺好  技术提顶一下
帮顶下,技术贴很少了,大家都在水水更健康
我昨晚还在想 有没有可能复原镜像.. 今天就有大佬研究了..
技术贴,火钳刘明!!
技术贴 河南拔智齿