前言

一个类似u盘安装ubuntu系统时,try ubuntu的需求。不直接安装系统到硬盘上,仅通过启动引导器加载一个iso镜像文件。

正文

1 调研

基础知识参考:
https://wenku.baidu.com/view/62863b89680203d8ce2f2464.html#

操作参考:
https://www.jb51.net/LINUXjishu/236496.html

2 实验

经过实验,在已经有ubuntu desktop 18的系统里,自带了grub2.
1) 拷贝so到文件系统中
比如我的路径是 /home/xxx/Downloads/ubuntu18.iso

  1. 配置grub菜单
#编辑 /etc/grub.d/40_custom , 添加
menuentry "ubuntu-18.04.3-desktop-amd64.iso" {
 set isofile="/home/xxx/Downloads/ubuntu18.iso"
 loopback loop (hd0,1)$isofile
 linux (loop)/casper/vmlinuz iso-scan/filename=$isofile quiet noeject nopromt spalsh --
 initrd (loop)/casper/initrd
}

如上述文章中所说 hd(0,1) 代表了第一块硬盘的第一个分区。 但是奇怪的是我的文件系统里显示操作系统所在的盘是/dev/sdb ,我使用hd(1,1) 的话是找不到iso的,有知道的大兄弟麻烦留言告诉我下

3)令grub配置生效并重启

sudo update-grub
sudo reboot

3 配置默认启动iso

4 向裸机中写入grub

4-1 legacy引导方式

参考: https://www.cnblogs.com/findumars/p/8087852.html

  1. 从u盘启动->try ubuntu (legacy方式启动u盘)
  2. fdisk对空硬盘分一个区, 比如/dev/sdb(需要dos 或者gpt 分区表,指定gpt时需要将分区1设置为bios_boot)
$sudo fdisk /dev/sdb
  1. mkfs.ext4将分区格式化为ext4
sudo mkfs.ext4 /dev/sdb1
  1. 挂载并安装grub到mbr
sudo mkdir /mnt/sdb
sudo mount /dev/sdb1 /mnt/sdb
sudo grub-install --root-directory=/mnt/sdb /dev/sdb

安装完grub会在根目录下创建/boot文件夹,目录下有个grub文件夹,可以配置默认的grub.cfg以便grub读取默认配置

如果遇到错误 grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won’t be possible
解决方法 : sudo parted /dev/sda set 1 bios_grub on

  1. 拷贝iso到该分区
    放置于根目录
    /ubuntu18.iso

  2. 配置grub
    编辑/mnt/sdb/boot/grub/grub.cfg

menuentry "ubuntu-18.04.3-desktop-amd64.iso" {
 set isofile="/ubuntu18.iso"
 loopback loop (hd0,1)$isofile
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject nopromt splash --
 initrd (loop)/casper/initrd
}

7)reboot

4-2 UEFI引导方式

参考:https://www.cnblogs.com/sddai/p/7739567.html
与legacy不同的是,EFI 并不把启动程序放置在 MBR 中,而是先loader一个EFI可执行程序。再load指定的grub文件。
1)从u盘启动->try ubuntu (UEFI方式启动u盘)

2)对硬盘分区(需要gpt分区表)
比如/dev/sdb1和/dev/sdb2

3)第一个分区需要是EFI分区,fdisk进入后使用t修改分区类型
修改/dev/sdb1分区为EFI分区

4)格式化EFI分区为fat , 其他分区为ext4
格式化/dev/sdb1分区为fat格式
格式化/dev/sdb2分区为ext4格式

5)挂载EFI分区和boot分区
mount /dev/sdb1 /mnt/sdb1
mount /dev/sdb2 /mnt/sdb2

6)安装grub

grub-install --efi-directory=/mnt/sdb1 --boot-directory=/mnt/sdb2 

–efi-directory 指定了efi的安装位置
–boot-directory 指定了grub的安装位置

7)在/mnt/sdb2/grub中编写grub.cfg文件

5 grub2引导img

要求initramfs写入ext4支持,启动盘格式为ext4
root指定img存放分区,loop指定文件存放位置

编辑/mnt/sdb/boot/grub/grub.cfg
menuentry "ubuntu-18.04.3-desktop-amd64.img" {
 set isofile="/ubuntu18.img"
 loopback loop (hd0,1)$isofile
 linux (loop)/boot/vmlinuz  root=/dev/sda1 loop=$isofile
 initrd (loop)/boot/initrd
}

6 grub2引导squashfs

root指定img存放分区,loop指定文件存放位置

编辑/mnt/sdb/boot/grub/grub.cfg
menuentry "ubuntu-18.04.3-desktop-amd64.img" {
 set isofile="/ubuntu18.squashfs"
 loopback loop (hd0,1)$isofile
 linux (loop)/boot/vmlinuz  root=/dev/sda1 looptype=squashfs loop=$isofile
 initrd (loop)/boot/initrd
}

ps: 引导img和squashfs,默认是只读模式,可以编辑rw变更为读写模式。与iso的内存读写方式不太一样。

Logo

更多推荐