esp分区创建 linux_善用EFI系统分区ESP
EFI系統分區,即 EFI system partition,簡寫為 ESP。ESP 是一個 FAT16 或 FAT32 格式的物理分區,但是其分區標識是 EF (十六進制) 而非常規的 0E 或 0C,因此,該分區在 Windows 操作系統下一般是不可見的。支持 EFI 模式的電腦需要從 ESP 啟動系統,EFI 固件可從 ESP 加載 EFI 啟動程序或者應用。
一般情況下,大家僅僅是為了應和 EFI 規范而不得不劃分這樣一個分區,而且也只把它當作一個 EFI 啟動程序和 EFI 應用程序的存儲空間。因此,許多資料都推薦只劃分一百多M空間給 ESP,這也使得該分區除了遵循 EFI 規范以及存儲 EFI 啟動文件之外沒有太大用處。然而,我認為 ESP 可以有更多更好的用法。既然 ESP 是必要的,何不物盡其用?
首先,看下 ESP 本身的特點,以及由此帶來的好處。
ESP的特點和好處
FAT分區與通用性
EFI 規范規定 ESP 使用 FAT 格式。盡管這種老舊的格式有很多局限性,但也不算一無是處。尤其對我來說,系統中有個 FAT32 分區是很好的,因為我經常使用多個系統,包括 Windows、Linux、FreeBSD,而這些系統都能安全地訪問 FAT 分區,因此,我可以把各個系統的啟動相關的文件包括啟動管理程序等放到 ESP 里,而且,這也方便我可以在一個系統中去修改另一個系統的啟動文件,至少我可以把 ESP 當作各個系統的公共交換空間吧。
獨立于操作系統
ESP是一個獨立于操作系統之外的分區,操作系統被引導之后,就不再依賴它。這使得 ESP 非常適合用來存儲那些系統級的維護性的工具和數據,比如:引導管理程序、驅動程序、系統維護工具、系統備份等,甚至可以在 ESP 里安裝一個特殊的操作系統(SlaTaz Linux? PuppyLinux? Win PE?)。
ESP分區標識與安全、隱藏
盡管 ESP 分區是一個 FAT 格式的分區,但它的分區標識卻是一個特別的標識(EF),EFI 規范的這一規定使得 ESP 在 Windows 下一般是不可見的,起碼,對一般的 Windows 用戶來說,這是一塊“無法訪問”的隱藏起來的區域。這意味什么?我們可以利用這個特點做什么?
我們不妨先回顧下其它煞費苦心地劃分特殊分區以達到特殊目的的一些技術或方案。許多品牌機會在硬盤里劃分一個特殊的隱藏的分區,用以存放系統恢復鏡像等文件,可利用該分區“一鍵”恢復系統。無憂論壇上提到了UD隱藏分區,在磁盤上劃分一塊未使用的空白區域,用于存儲引導文件甚至PE系統。除了這些,應該還有一些類似的東西,它們的目標其實都是為了維護或恢復系統,一般來說,木馬和病毒不會破壞這些分區里的文件,普通用戶也不會觸及它們,使得它們相對來說是安全的。但是,它們的用戶其實只是普通的 Windows 使用者,其它操作系統的用戶,以及稍懂點技術的 Windows 用戶,非常不愿意見到那些“多余”的分區,相信許多人都會把那些分區刪除了吧?不過,ESP 呢?與提及的那些技術相比,ESP 也可以看作是一個特殊的分區,它有何特別?
首先,EFI 規范要求有 ESP,既然是強制的,那我們不妨拿它多做點事,而不是去刪除它。其次,與上面提及的那些技術相比,ESP 也可以看做是一個安全的隱藏的分區,這使得我們完全可以使用 ESP 來替代那些技術,我們可以把引導管理程序、系統維護工具、系統恢復工具及鏡像等放到 ESP,可以自己打造“一鍵恢復系統”,等等。而且,不僅可以自己進行 DIY,還要更方便、更通用。再者,ESP 是個標準的 FAT 分區,因此與上面提及的那些技術不同,ESP 在“隱藏”的同時并沒有失去可訪問性,不管你用什么操作系統,都是可以安全地訪問它的(后面講),所以,ESP 絕不會是“多余”的,相反,它很有用。
精心打造后的 ESP 可以成為你系統中的“救命稻草”,因它的特性使得它可能會是所有分區中最為“安全”的,當你的系統受損時,你還能依靠這個 ESP 進入維護系統對系統進行修復,或是“一鍵恢復”,或是進入 ESP 里的 某個 Linux 系統,或者,進入預先安裝好的某個 Win PE,甚或一個 RamXP?你想怎么打造你的 ESP 呢?
善用ESP
大容量的 ESP
與常識相反,我使用大容量的 ESP。我一般會劃分一個 20G 或 32G 的 ESP,并且,不管系統是否支持 EFI(事實上我現在用的這臺機器根本不支持 EFI),我都會在主硬盤上劃分這么一個 ESP。
訪問 ESP
在 Linux 等系統下,ESP 和普通的 FAT 分區沒什么兩樣,可以使用相同的方式進行掛載(使用 vfat 分區類型)。可以把 ESP 的掛載寫到 /etc/fstab 里。我一般把 ESP 掛載為 /boot。
在 Windows 下,ESP 一般是不可見的,使用 Windows 自己的磁盤管理器無法為 ESP 分配盤符,因此需要借助一些工具或方法。如果是 PE 系統,或是 Win 7 以下版本的 Windows,可以使用 BOOTICE 的分區管理功能,給 ESP 分配一個盤符。另外,無憂論壇上有人寫了一個 MountESP 程序,可以用來掛載 ESP 并為之分配盤符。然而,在 Win 7 以上版本的 Windows 中,那些工具雖然可以成功給 ESP 分配盤符,但在資源管理器中看不到。
其實,不借助其它工具,使用 MKLINK 命令就可以掛載 ESP。假設 ESP 位于第一塊硬盤的第一個分區,以管理員身份打開 CMD,運行以下命令:
MKLINK /J C:\ESP \\?\GLOBALROOT\Device\Harddisk0\Partition1\
運行成功之后,C:\ESP 就是指向 ESP 的一個符號鏈接,欲訪問 ESP,訪問 C:\ESP 即可。這個方法在 Windows 上其實是通用的,Win 7 以下版本也可以用,只是在 Win 7 以下版本并沒有 MKLINK 命令,需要自行下載 junction 這個程序來代替 mklink。
引導管理程序
對于 EFI 系統來說,系統的引導文件會安裝到 ESP。Windows 會在 ESP 建立 EFI 目錄并把引導文件復制到這里。Linux 則有多種選擇方案,我一般選擇 Grub2,也使用過 rEFIt。
而對于非 EFI 系統,主引導記錄(MBR)我一般會使用 GRUB4DOS 或 NT6.X MBR,并把 GRUB4DOS (包括 grub.mbr, grub.exe, grldr, menu.lst)安裝到 ESP,并且,附加上 SISO 模塊(可以在無憂論壇里找到它)。還可以從 Win 8.1 復制 bootmgr 及 boot 目錄到 ESP,并使用 BOOTICE 來管理 MBR 和 BCD。
不管系統是否是 EFI 的,我一般都會在 ESP 里安裝 GRUB4DOS。GRUB4DOS 并不支持 EFI,但沒關系,我們可以借用 GRUB 2 EFI 來引導 GRUB4DOS,給 GRUB 2 加個菜單就可以了,類似這樣:
menuentry "GRUB4DOS" {
insmod part_msdos
insmod fat
set root=(hd0,1)
linux /grub.exe
}
以后我打算嘗試下Clover,這樣,不管是否是 EFI 系統,我都可以用同樣一個引導管理程序。
在 ESP 里安裝非日常用操作系統
當然,你不會想在 ESP 里安裝日常所用的操作系統,我們可以挑選那些小巧便攜的一些操作系統放到 ESP 里以備不時之需。許多系統可以借助某些引導管理程序以 ISO 鏡像的方式直接啟動,比如,SliTaz Linux, Ubuntu 等,很多 Win PE 系統也可借由 GRUB4DOS 從 ISO 直接啟動。
GRUB 2 可以使用 loopback 模塊啟動一些 ISO 鏡像,假設 ESP 是第一塊硬盤的第一個分區,下面是一些 Grub 2 的菜單例子:
### GRUB 2 菜單文件: /boot/grub/grub.cfg
menuentry "Ubuntu Live" {
set ISO=/OS/Ubuntu/ubuntu.iso
loopback loop (hd0,1)$ISO
### 如果是32位的Ubuntu,應將下面的 vmlinuz.efi 改為 vmlinuz
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$ISO noprompt noeject
initrd (loop)/casper/initrd.lz
}
menuentry "SliTaz" {
set ISO=/OS/SliTaz/slitaz-cooking.iso
loopback loop (hd0,1)$ISO
linux (loop)/boot/bzImage root=/dev/null
initrd (loop)/boot/rootfs.gz
}
menuentry "Fedora Live" {
set ISO=/OS/Fedora/fedora.iso
loopback loop (hd0,1)$ISO
linux (loop)/EFI/boot/vmlinuz0 root=live:$ISO rootfstype=auto ro liveimg quiet rhgb rd.luks=0 rd.md=0
initrd (loop)/EFI/boot/initrd0.img
}
menuentry "Knoppix Live ISO" {
set ISO=/OS/Knoppix/knoppix.iso
loopback loop (hd0,1)$ISO
linux (loop)/boot/isolinux/linux bootfrom=/dev/sda1$ISO acpi=off keyboard=us language-us
initrd (loop)/boot/isolinux/minirt.gz
}
相對來說,我對 GRUB4DOS 更熟悉一些,而且 GRUB4DOS 可以啟動更多種類的鏡像文件。如果你的系統是 EFI 啟動的,你可以安裝 GRUB 2 EFI 并借由它來引導 GRUB4DOS,前面已經說過。GRUB4DOS 的菜單文件是 menu.lst,以下是一些例子:
iftitle [find --set-root --devices=h /bootmgr && call set R=%@root^%] BOOTMGR of Windows VISTA/WIN7/WIN2008 on %R%
chainloader %bootmgr%/bootmgr
iftitle [find --set-root --devices=h /OS/Ubuntu/ubuntu.iso && call set R=%@root^%] Ubuntu LiveCD
set F=/OS/Ubuntu/ubuntu.iso
map %F% (0xff) || map --mem-top %F% (0xff)
map --hook
kernel (0xff)/casper/vmlinuz boot=casper iso-scan/filename=%F% ro quiet splash
initrd (0xff)/casper/initrd.lz
title SliTaz ISO
set F=/OS/SliTaz/slitaz.iso
find --set-root --ignore-floppies --ignore-cd %F%
map %F% (0xff) || map --mem-top %F% (0xff)
map --hook
chainloader (0xff)
title Win8.1 RamOS
set F=/OS/Win8/usm8.1ramos.iso
find --set-root --ignore-floppies --ignore-cd %F%
map %F% (0xff) || map --mem-top %F% (0xff)
map --hook
chainloader (0xff)
title 0PE LiveISO
set F=/OS/0PE/0PE.iso
find --set-root --ignore-floppies --ignore-cd %F%
map %F% (0xff) || map --mem-top %F% (0xff)
map --hook
chainloader (0xff)
更高級點,還可以利用 Win7 以上版本的差分 VHD 及 GRUB4DOS 的 dd 命令做一鍵恢復。
系統維護工具、PETOOLS、腳本文件
上面所述的操作系統本身只能提供有限的工具,為便于系統維護,我把各種系統維護工具、PETOOLS等都放在了 ESP 里,這樣,從 ESP 啟動 PE 系統后就可以調用它們。這些工具包括:磁盤工具、分區工具、鏡像/備份工具、輔助安裝工具、硬件檢測工具、系統清理、恢復工具,等等。
還有,我把自己寫的一些維護用的腳本也放在了這里。
操作系統鏡像、備份及驅動
我很過分,我把這些東西也都塞到 ESP 里。如果日常使用的系統壞了,沒關系,從 ESP 啟動一個系統,或安裝新系統,或進行恢復,都可以,對其它分區進行調整也可以,只要 ESP 沒壞,其它系統都壞了也沒關系。
后記
現在,你應該可以理解我為什么弄那么大容量的 ESP 了吧?
請不要把 ESP 與微軟的 MSR 分區混淆,那個 MSR 分區并沒有存在的必要。
你準備怎樣使用 ESP 呢?
--
總結
以上是生活随笔為你收集整理的esp分区创建 linux_善用EFI系统分区ESP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2、基于wsgiref模块DIY一个we
- 下一篇: 【引用】Json 定义与操作