u盘安装linux系统
u盘安装linux系统
我的目的是在u盘上用efi的方式启动linux,并留相应的空间用于数据交换
分区建立文件系统
1 使用fdisk分区
u盘挂载点为/dev/sdb
1 | Device Start End Sectors Size Type |
以上是我的分区结果,这里划分了三个分区,sdb1是用来存储数据的,sdb2是efi分区,sdb3是存放linux的分区
2 建立文件分区
sdb1根据需要来建立文件系统,sdb2为fat格式,sdb3为ext4格式
1 | mkfs -t ext4 /dev/sdb3 |
linux内核准备
1 挂载分区
1 | mount -o sync /dev/sdb3 /usb |
2 这里还是使用当前系统上已经编译的内核还有initramfs,一般位于/boot目录下
1 | mkdir /usb/boot |
引导程序
引导程序使用grub来创建
1 挂载分区
1 | mount -o sync /dev/sdb2 /efi |
2 编写grub.cfg
grub.cfg位于/efi/grub里
grub.cfg
1 | menuentry 'Linux(USB)' { |
注:
1 一般grub.cfg是使用grub-mkconfig来创建的,但该命令无法扫描到u盘,所以选择手动创建
2 b77cc5ce-4cf9-4190-ac65-e6d30e8956fa这个/dev/sdb3的uuid可以使用以下命令查看
1 | ls -l /dev/disk/by-uuid |
3 创建引导程序
1 | grub-install --efi-directory=/efi --boot-directory=/efi --removable |
创建成功后/efi里会多出一个EFI目录,之后如果修改了grub.cfg需要重新运行命令创建
模拟启动
此时使用qemu来模拟电脑的启动来测试引导程序是否正常运行
1 | qemu-system-x86_64 /dev/sdb |
如果qemu卡死在booting from hard disk或cannot allocate kernel buffer可以参考以下方案
1 | apt-get install ovmf qemu-efi |
–bios /usr/share/qemu/OVMF.fd可以解决booting from hard disk卡死问题
-m 512M 可以解决cannot allocate kernel buffer这个问题
-boot menu on这个选项不会影响解决方案,只是留作备忘
正常流程内核启动进入ramfs会由于没有init进程而无法完成启动,至于init的问题就可以通过安装busybox来解决,具体可以参考之前的文章
启动
在bios配置相应选项进行启动即可
附录
查看挂载点
1 | cat /proc/mounts |