Create Live Usb Disk for Bios

主題

完整腳本範例

承起

承起「Create Live Usb Disk for Uefi」該篇提到的概念,

這篇要會回過頭來紀錄「BIOS版」的操作步驟。

硬碟分割規格

Type Device ID File System Flags 用途
Disk /dev/sdc      
Part /dev/sdc1   bios_grub 要採用傳統「BIOS」模式開機,Grub 有一部分的「開機Image」,會被安裝在這個「分割區」。
Part /dev/sdc2 ext4   Grub 一些相關的檔檔案,則是放在這個「分割區」, ISO檔案也會放在這個「分割區」

為了講解時的單純化,所以我們只有簡單地將整個「Disk」分割出「兩個分割區」。

硬碟分割操作

執行下面指令,先將「/dev/sdc*」的一些「signature」清除。

sudo wipefs -a /dev/sdc*

執行下面指令,來「分割硬碟」。


sudo parted --script -- "/dev/sdc" \
	mktable gpt \
	mkpart primary '0%' '2M' \
	mkpart primary '2M' '100%' \
	set 1 bios_grub on \
	print

顯示

Model: Kingston DataTraveler 3.0 (scsi)
Disk /dev/sdc: 124GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  2097kB  1049kB               primary  bios_grub
 2      2097kB  124GB   124GB                primary

執行下面指令,來將「/dev/sdc2」格式化成「ext4」。

sudo mkfs.ext4 -L LIVEBIOS "/dev/sdc2"

執行下面指令,觀看「/dev/sdc」的分割資訊。

sudo parted /dev/sdc print

顯示

Model: Kingston DataTraveler 3.0 (scsi)
Disk /dev/sdc: 124GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  2097kB  1049kB               primary  bios_grub
 2      2097kB  124GB   124GB   ext4         primary

或是執行下面指令,觀看「/dev/sdc」的分割資訊。包含「Free Space」也會顯示出來。

sudo parted /dev/sdc print free

顯示

Model: Kingston DataTraveler 3.0 (scsi)
Disk /dev/sdc: 124GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  2097kB  1049kB               primary  bios_grub
 2      2097kB  124GB   124GB   ext4         primary
        124GB   124GB   1032kB  Free Space

若要「重新讀取裝置的 Partition Table」,可以執行下面指令

sudo partprobe /dev/sdc

若是要觀看「/dev/sdc2」的一些「Lable」或「UUID」,可以執行下面指令

sudo blkid /dev/sdc2

若是要觀看「/dev/sdc*」的一些「Lable」或「UUID」,可以執行下面指令

sudo blkid /dev/sdc*

掛載分割區

執行下面指令,產生「mnt」這個「資料夾」。

mkdir -p ./mnt

執行下面指令,將「/dev/sdc2」掛載到「mnt」。

sudo mount /dev/sdc2 ./mnt

卸載的參考指令

假設「mnt」這個資料夾有掛載分割區,執行下面指令,卸載「mnt」這個資料夾所掛載分割區。

sudo umount ./mnt

假設「/dev/sdc2」有被掛載,執行下面指令,卸載「/dev/sdc2」。

sudo umount /dev/sdc2

或是執行下面指令,確保「/dev/sdc*」都被卸載。

sudo umount /dev/sdc*

grub-install

執行


sudo grub-install \
	--boot-directory="mnt/boot" \
	--target="i386-pc" \
	--fonts="unicode" \
	/dev/sdc

產生「/boot/grub/grub.cfg」

產生「/boot/grub/grub.cfg」這個關鍵的設定檔,內容類似如下





set pager=1




##
## ## Load Module
##

insmod all_video
insmod video_bochs
insmod video_cirrus
insmod font
insmod gfxterm
insmod gfxmenu
insmod gettext
insmod jpeg
insmod png




insmod part_gpt
insmod ext2


##
## ## Set root
##

search --no-floppy --fs-uuid --set=root df327def-4e94-4b5e-b7d9-d17b8323571d




##
## ## Locale
##

loadfont ($root)/boot/grub/fonts/unicode.pf2
set locale_dir=($root)/boot/grub/locale
set lang=zh_TW




##
## Resolution
##

set gfxmode=auto
terminal_output gfxterm




##
## ## Theme
##

background_image ($root)/boot/grub/themes/grub-theme-obs-remix/background.jpg
set theme=($root)/boot/grub/themes/grub-theme-obs-remix/theme.txt
export theme




##
## ## Countdown
##

set timeout=5




##
## ## Color
##

set color_normal=white/black
set color_highlight=white/cyan




##
## ## Grub Menu Entry
##

menuentry "Debian 12 ISO / Xfce" --class Debian {
	set iso_file="/iso/debian-live-12.5.0-amd64-xfce.iso"
	search --set=iso_partition --no-floppy --file $iso_file
	probe --set=iso_partition_uuid --fs-uuid $iso_partition
	set img_dev="/dev/disk/by-uuid/$iso_partition_uuid"
	loopback loop ($iso_partition)$iso_file
	set boot_option=""
	#set boot_option="components splash quiet"
	#set boot_option="components locales=zh_TW.UTF-8 quiet splash"
	linux (loop)/live/vmlinuz boot=live buuid=$iso_partition_uuid findiso=$iso_file $boot_option
	initrd (loop)/live/initrd.img
}


menuentry "Fedora 40 ISO / Kde Plasma" {
	set iso_file=/iso/Fedora-KDE-Live-x86_64-40_Beta-1.10.iso
	loopback loop $iso_file
	linux (loop)/images/pxeboot/vmlinuz iso-scan/filename=$iso_file root=live:CDLABEL=Fedora-KDE-Live-40-1-14 rd.live.image rhgb $boot_option
	initrd (loop)/images/pxeboot/initrd.img
}

上面其中有一行設定如下

search --no-floppy --fs-uuid --set=root df327def-4e94-4b5e-b7d9-d17b8323571d

記得要將「df327def-4e94-4b5e-b7d9-d17b8323571d」改成您當下「/dev/sdc2」的「UUID」

可以執行下面指令,獲得「/dev/sdc2」的「UUID」。

sudo blkid /dev/sdc2 | sed 's|\ |\n|g' | grep '^UUID=' | awk -F '"' '{print$2}'

grub-theme

set theme=($root)/EFI/grub/themes/grub-theme-obs-remix/theme.txt

上面的設定,我是採用「grub-theme-obs-remix」。

所以執行下面的指令,下載下來,並且解壓縮,放置到「mnt/EFI/grub/themes/grub-theme-obs-remix」這個路徑。


mkdir -p "./tmp"


wget -c "https://github.com/samwhelp/grub-theme-obs-remix/archive/refs/heads/main.tar.gz" -O "./tmp/grub-theme-obs-remix-main.tar.gz"

tar xf "./tmp/grub-theme-obs-remix-main.tar.gz" -C "./tmp"


sudo mkdir -p "mnt/boot/grub/themes"

sudo cp -rf "tmp/grub-theme-obs-remix-main/." "mnt/boot/grub/themes/grub-theme-obs-remix"

下載ISO檔

相關議題

參考文章