u盘安装linux系统
u盘安装linux系统
我的⽬的是在u盘上⽤efi的⽅式启动linux,并留相应的空间⽤于数据交换
分区建⽴⽂件系统
1 使⽤fdisk分区
u盘挂载点为/dev/sdb
Device        Start      End  Sectors  Size Type
/dev/sdb1      2048 16779263 16777216    8G Linux filesystem
/dev/sdb2  16779264 17803263  1024000  500M EFI System
/dev/sdb3  17803264 28289023 10485760    5G Linux filesystem
以上是我的分区结果,这⾥划分了三个分区,sdb1是⽤来存储数据的,sdb2是efi分区,sdb3是存放linux的分区2 建⽴⽂件分区
sdb1根据需要来建⽴⽂件系统,sdb2为fat格式,sdb3为ext4格式
mkfs -t ext4 /dev/sdb3
mkfs -t vfat /dev/sdb2
linux内核准备
1 挂载分区
mount -o sync /dev/sdb3 /usb
什么电脑可以装linux系统2 这⾥还是使⽤当前系统上已经编译的内核还有initramfs,⼀般位于/boot⽬录下
mkdir /usb/boot
cp /boot/vmlinuz-5.4.0-81-generic /usb/boot
cp /boot/initrd.img-5.4.0-81-generic /usb/boot
引导程序
引导程序使⽤grub来创建
1 挂载分区
mount -o sync /dev/sdb2 /efi
2 编写grub.cfg
grub.cfg位于/efi/grub⾥
grub.cfg
menuentry 'Linux(USB)' {
insmod ext2
search --no-floppy --fs-uuid --set=root b77cc5ce-4cf9-4190-ac65-e6d30e8956fa
linux /boot/vmlinuz-5.4.0-81-generic root=UUID=b77cc5ce-4cf9-4190-ac65-e6d30e8956fa ro
initrd /boot/initrd.img-5.4.0-81-generic
}
注:
1 ⼀般grub.cfg是使⽤grub-mkconfig来创建的,但该命令⽆法扫描到u盘,所以选择⼿动创建
2 b77cc5ce-4cf9-4190-ac65-e6d30e8956fa这个/dev/sdb3的uuid可以使⽤以下命令查看
ls -l /dev/disk/by-uuid
3 创建引导程序
grub-install --efi-directory=/efi --boot-directory=/efi --removable
创建成功后/efi⾥会多出⼀个EFI⽬录,之后如果修改了grub.cfg需要重新运⾏命令创建
模拟启动
此时使⽤qemu来模拟电脑的启动来测试引导程序是否正常运⾏
qemu-system-x86_64 /dev/sdb
如果qemu卡死在booting from hard disk或cannot allocate kernel buffer可以参考以下⽅案
apt-get install ovmf qemu-efi
qemu-system-x86_64 -m 512M --bios /usr/share/qemu/OVMF.fd /dev/sdb -boot menu=on
--bios /usr/share/qemu/OVMF.fd可以解决booting from hard disk卡死问题
-m 512M 可以解决cannot allocate kernel buffer这个问题
-boot menu on这个选项不会影响解决⽅案,只是留作备忘
正常流程内核启动进⼊ramfs会由于没有init进程⽽⽆法完成启动,⾄于init的问题就可以通过安usybox来解决,具体可以参考之前的⽂章启动
在bios配置相应选项进⾏启动即可
附录
查看挂载点
cat /proc/mounts