本帖最后由 mmc199 于 2021-12-16 17:08 编辑
网上有些iso直接dd到甲骨文的附加存储卷上可以引导起来重装系统,
- 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文件夹下所有文件到根分区/ 。
- sudo mkdir /mnt/文件夹1 /mnt/文件夹2 /mnt/文件夹3
- sudo mount xxx.iso /mnt/文件夹1
- sudo mount -t squashfs /路径/squashfs文件名 /mnt/文件夹2 -o loop
- sudo mount /dev/sdb2 /mnt/文件夹3
- 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分区。
- sudo mkdir /mnt/文件夹4 /mnt/文件夹5
- sudo mount /dev/sda1 /mnt/文件夹4
- sudo mount /dev/sdb1 /mnt/文件夹5
- sudo cp -R /mnt/文件夹4/* /mnt/文件夹5/
复制代码
efi分区应有如下文件结构用于启动,BOOTAA64.EFI、grubaa64.efi可以是同一文件 grub.cfg 里自行替换 sdb2 的分区uuid,这样启动时efi分区就能挂载到根分区的/boot/efi/文件夹下 查询分区uuid命令blkid
- blkid
- /dev/sda2: UUID="72dbbfac-9d2f-48c9-967c-a60a23b2795e" TYPE="ext4" PARTUUID="92d13935-d981-44ae-bb79-c7e24c365431"
- /dev/sda1: SEC_TYPE="msdos" UUID="769E-A3EF" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="17eab769-4c27-48db-a272-41c4ba6c3ff0"
- ……
复制代码
-
- $ sudo ls /boot/efi/
- EFI
- $sudo ls /boot/efi/EFI
- BOOT ubuntu
- $ sudo ls /boot/efi/EFI/boot
- BOOTAA64.EFI
- $ sudo ls /boot/efi/EFI/ubuntu
- grubaa64.efi grub.cfg
- $ sudo ls /boot/efi/EFI/ubuntu/grub.cfg
- /boot/efi/EFI/ubuntu/grub.cfg
- $ sudo cat /boot/efi/EFI/ubuntu/grub.cfg
- search.fs_uuid 72dbbfac-9d2f-48c9-967c-a60a23b2795e root hd0,gpt2
- set prefix=($root)’/boot/grub’
- configfile $prefix/grub.cfg
复制代码
接下来用grub-install工具扫描sdb2中的linux系统重新生成grub.cfg , 以sdb2为例,直接粘贴以下命令,返回结果“正在为arm64-efi平台安装”“安装完成。没有报告错误”
- #接上面 sudo mount /dev/sdb2 /mnt/文件夹3
- sudo mount /dev/sdb1 /mnt/文件夹3/boot/efi
- sudo mount –bind /dev /mnt/文件夹3/dev
- sudo mount –bind /sys /mnt/文件夹3/sys
- sudo mount –bind /proc /mnt/文件夹3/proc
- sudo chroot /mnt/文件夹3
- sudo update-grub
- 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 |