mmc199 大佬有话说 :
甲骨文arm提取livecd的iso里面文件重装系统
本帖最后由 mmc199 于 2021-12-16 18:40 编辑
网上有些iso直接dd到甲骨文的附加存储卷上可以引导起来重装系统,
sudo dd if=xxx.iso of=/dev/sdb bs=10M
但是有些iso里面的引导文件甲骨文的bios无法识别
https://shp.qpic.cn/collector/446286604/a2d5a1b5-bfb5-4607-8106-3e450e6b497e/0/68453684536783.jpg
https://shp.qpic.cn/collector/446286604/479bfcf4-9704-44df-aa0a-17da8bd85570/0/4986465498561.jpg
我们就保留能成功引导iso里面的 xxx.isoboot 文件夹和 xxx.isoefi 文件夹,再替换选择菜单文件 xxx.isobootgrubgrub.cfg
https://shp.qpic.cn/collector/446286604/539d5677-42a2-4506-acdd-22d6f93e4239/0/jpg
并用刻录软件UltraISO把你想安装的iso(如果不能直接引导)的里面的其他文件夹合并到一个能成功引导的iso里面,(用同名文件覆盖的方式替换,不要直接删掉原iso的文件夹再放新文件夹,否则可能还会缺少某些文件而无法启动),再dd到附加引导卷上就能启动了。
但在光盘安装时还是卡在了96%,就换了另一种方法,在论坛做个笔记。
https://shp.qpic.cn/collector/446286604/d043c434-ae42-4ca4-90eb-d49012a72013/0/489561648.jpg
https://shp.qpic.cn/collector/446286604/f45da4aa-047c-44f1-8127-316f5a3aa992/0/678453845378.jpg
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-NoEmul.img文件里的EFI目录,
Boot-NoEmul.img如果7zip不能解压就用WinImage软件读取。xxx.iso下有和boot两个文件夹,取含有BOOTAA64.EFI、grubaa64.efi文件的文件夹放到硬盘efi分区就行了,这也就是iso引导时的efi分区。
https://shp.qpic.cn/collector/446286604/37bbfd85-5666-4a72-8fc5-8bfdaba5886d/0/78645367853.jpg
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
BOOTubuntu
$ sudo ls /boot/efi/EFI/boot
BOOTAA64.EFI
$ sudo ls /boot/efi/EFI/ubuntu
grubaa64.efigrub.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
#(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
optimism 大佬有话说 :
挺好技术提顶一下
aeo 大佬有话说 :
帮顶下,技术贴很少了,大家都在水水更健康
huanx 大佬有话说 :
:lol 我昨晚还在想 有没有可能复原镜像.. 今天就有大佬研究了..
aipage 大佬有话说 :
技术贴,火钳刘明!!
燕十三丶 大佬有话说 :
技术贴 河南拔智齿 :lol
漫威 大佬有话说 :
技术贴啊