mac m1通过qemu和grub制作操作系统引导盘

前言

我电脑是mac m1芯片的,做了如下尝试,最终在第4种方式下成功:

  1. 开始用了parallels desktop安装了ubuntu 22版本的,因为本机是arm64芯片,所以只能安装arm64的ubuntu,然后在运行grub-install /dev/loop0时报错:grub-install: error: cannot find EFI directory,并且它只能安装arm64的efi
  2. 如果是ubutnu16.04版本会报:
  3. 我用qemu安装了x86_64架构的centos7上使用了grub2-install /dev/loop0时报错:embedding is not possible, but this is required for cross-disk install
  4. 最终我用qemu安装了x86_64架构的ubutnu18.04,mac电脑可以使用brew install qemu安装qemu,然后跑了如下命令成功了

grub安装引导盘

sudo dd if=/dev/zero of=hd.img bs=1M count=20

sudo losetup /dev/loop0 hd.img


sudo mkfs.ext4 -q /dev/loop0  

mkdir hdisk

sudo mount -o loop ./hd.img ./hdisk/
sudo mkdir ./hdisk/boot/

sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/loop0

/hdisk/boot/grub/ 目录下建立一个 grub.cfg 文本文件

menuentry 'Cosmos' {
insmod part_msdos
insmod ext2
set root='hd0' 
multiboot2 /boot/Cosmos.eki 
boot 
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
  set timeout=10
fi

可使用如下2种方式运行

qemu-system-i386 -m 1024 -drive format=raw,file=hd.img

# 64位系统的命令
qemu-system-x86_64 -m 1024 -drive format=raw,file=hd.img
qemu-img convert -O qcow2 hd.img qemu-grub.img
qemu-system-x86_64 -hda ./qemu-grub.img

最终效果
在这里插入图片描述
在这里插入图片描述

FAQ

  1. 【挂载/dev/loop0时可能遇到device busy】可以使用losetup -f查看一个空闲的使用,如果一个回环设备都没有,可以使用sudo mknod /dev/loop0 b 7 200传建回环设备
  2. 【grub-install: warning: File system `ext2’ doesn’t support embedding.
    grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged…
    Installation finished. No error reported.】遇到警告可以忽略
  3. 【grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn’t exist】我开始用的arm64的ubuntu,它不支持x86系列的,所以需要安装一个x86的操作系统来进行grub
  4. 【cannot remove ‘hdisk/’: Device or resource busy】可以使用umount hdisk卸载卸载,再rm -rf hdisk/
  5. 【/dev/loop0: failed to set up loop device: No such file or directory】创建设备 mknod /dev/loop0 b 7 200
  6. 【losetup: hd. img: failed to set up loop device: No such file or directory】hd.img不存在
  7. 【embedding is not possible, but this is required for cross-disk install】1.第一种是把相关的img和loop设备都rm -rf 删除掉以及umount掉,然后重启机器;2.第二种是新建loop1,新建新的img;3. 将ubutnu16.04版本换成ubutnu18.04

参考

制作一个grub虚拟启动盘,在qemu下调试
重点ubuntu arm环境下grub启动镜像制作
fdisk 命令实现磁盘分区详细教程
Grub这篇文章可以看看
linux安装网络
各操作系统安装grub程序
qemu 安装CentOS

附录

qemu安装ubuntu

qemu-system-x86_64 -m 2048 -hda UbuntuOS.img -cdrom ./ubuntu-18.04.6-live-server-amd64.iso -boot d

然后

qemu-system-x86_64 -m 2048 -hda UbuntuOS.img  -boot c -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22

GRUB安装到回环设备

在Linux系统中,可以使用以下命令将GRUB安装到回环设备:

  1. 首先,使用以下命令创建一个空的磁盘映像文件:

    dd if=/dev/zero of=grub.img bs=1M count=100
    

    这将创建一个名为grub.img的100MB空映像文件。

  2. 使用losetup命令将映像文件关联到一个回环设备:

    losetup /dev/loop0 grub.img
    

    这将将grub.img文件关联到/dev/loop0回环设备。

  3. 使用fdiskparted等工具将回环设备分区,并格式化分区:

    fdisk /dev/loop0
    mkfs.ext4 /dev/loop0p1
    

    这将在/dev/loop0上创建一个分区,并使用ext4文件系统格式化该分区。

  4. 挂载分区:

    mount /dev/loop0p1 /mnt
    

    这将在/mnt目录下挂载/dev/loop0p1分区。

  5. 使用grub-install命令将GRUB安装到回环设备的MBR(Master Boot Record):

    grub-install --target=i386-pc --root-directory=/mnt /dev/loop0
    

    这将将GRUB安装到/dev/loop0回环设备的MBR。

  6. 卸载分区并取消回环设备的关联:

    umount /mnt
    losetup -d /dev/loop0
    

    这将卸载/mnt目录下的分区,并取消grub.img文件与/dev/loop0回环设备的关联。

现在,grub.img文件就可以作为一个可引导的设备使用了。

吧啦吧啦…

  1. rm -rf 以及grub-install -/dev/sda这2个命令不要随便乱搞,弄错了系统就崩了
  2. qemu-system-aarch64 -M virt -m 1024 -drive format=raw,file=grub.img 这是启动arm64架构的,但不好使~
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值