前言
我电脑是mac m1芯片的,做了如下尝试,最终在第4种方式下成功:
- 开始用了parallels desktop安装了ubuntu 22版本的,因为本机是arm64芯片,所以只能安装arm64的ubuntu,然后在运行grub-install /dev/loop0时报错:grub-install: error: cannot find EFI directory,并且它只能安装arm64的efi
- 如果是ubutnu16.04版本会报:
- 我用qemu安装了x86_64架构的centos7上使用了grub2-install /dev/loop0时报错:embedding is not possible, but this is required for cross-disk install
- 最终我用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
- 【挂载/dev/loop0时可能遇到device busy】可以使用
losetup -f
查看一个空闲的使用,如果一个回环设备都没有,可以使用sudo mknod /dev/loop0 b 7 200
传建回环设备 - 【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.】遇到警告可以忽略 - 【grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn’t exist】我开始用的arm64的ubuntu,它不支持x86系列的,所以需要安装一个x86的操作系统来进行grub
- 【cannot remove ‘hdisk/’: Device or resource busy】可以使用umount hdisk卸载卸载,再rm -rf hdisk/
- 【/dev/loop0: failed to set up loop device: No such file or directory】创建设备
mknod /dev/loop0 b 7 200
- 【losetup: hd. img: failed to set up loop device: No such file or directory】hd.img不存在
- 【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安装到回环设备:
-
首先,使用以下命令创建一个空的磁盘映像文件:
dd if=/dev/zero of=grub.img bs=1M count=100
这将创建一个名为
grub.img
的100MB空映像文件。 -
使用
losetup
命令将映像文件关联到一个回环设备:losetup /dev/loop0 grub.img
这将将
grub.img
文件关联到/dev/loop0
回环设备。 -
使用
fdisk
或parted
等工具将回环设备分区,并格式化分区:fdisk /dev/loop0 mkfs.ext4 /dev/loop0p1
这将在
/dev/loop0
上创建一个分区,并使用ext4
文件系统格式化该分区。 -
挂载分区:
mount /dev/loop0p1 /mnt
这将在
/mnt
目录下挂载/dev/loop0p1
分区。 -
使用
grub-install
命令将GRUB安装到回环设备的MBR(Master Boot Record):grub-install --target=i386-pc --root-directory=/mnt /dev/loop0
这将将GRUB安装到
/dev/loop0
回环设备的MBR。 -
卸载分区并取消回环设备的关联:
umount /mnt losetup -d /dev/loop0
这将卸载
/mnt
目录下的分区,并取消grub.img
文件与/dev/loop0
回环设备的关联。文章来源:https://www.toymoban.com/news/detail-527839.html
现在,grub.img
文件就可以作为一个可引导的设备使用了。文章来源地址https://www.toymoban.com/news/detail-527839.html
吧啦吧啦…
- rm -rf 以及grub-install -/dev/sda这2个命令不要随便乱搞,弄错了系统就崩了
- qemu-system-aarch64 -M virt -m 1024 -drive format=raw,file=grub.img 这是启动arm64架构的,但不好使~
到了这里,关于mac m1通过qemu和grub制作操作系统引导盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!