天天看點

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
           

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來建立

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這個選項不會影響解決方案,隻是留作備忘

啟動

附錄

cat /proc/mounts
           

繼續閱讀