U盤怎麼將winpe linux windows放在一起?

U盤怎麼製作多系統引導,能添加pe linux的,就不用老是從新刻錄了


首先,建議題主閱讀維基百科的BIOS、UEFI、MBR、GPT等詞條,先搞清楚UEFI、BIOS、分區表這些概念是啥,以及最重要的——電腦啟動的過程是怎樣的。(說這些只是因為答主我很懶,沒搞出特別傻瓜通用的教程,所以希望題主能在建立自己的理解後自行排除各種問題,見諒)

無憂啟動等論壇也可以爬一爬……

現在題主就是想給U盤搞上多重引導

什麼是多重引導呢?很簡單:啟動時,出來一個菜單,可以方便地選擇。

樓上給的好像需要事前修改,這大概算不上多重引導,使用起來還是有點不便的。

無論是微軟的Windows Boot Manager,還是grub4dos等功能強大的第三方引導器,都支持很靈活的配置,修改配置後,啟動時就可顯示出多個菜單項來啟動不同的操作系統。

對於grub4dos、syslinux、grub2、rEFInd等第三方引導器,還可以通過修改配置、載入gfxmenu插件等方法來顯示更美觀的圖形菜單……

如果只是想讓WinPE(WIM文件形式)和Ubuntu(ISO文件形式)共存,推薦使用MBR分區表,只分一個主分區且設為活動分區,文件系統用FAT32。

MBR代碼可以選擇UltraISO的USB-HDD+。

這個分區同時兼顧日常使用、存放WIM/ISO格式的鏡像文件、存放引導文件的功能。

如果你需要搞WinToGo(直接把Windows安裝到U盤上),或者RAMOS(把Windows裝到一個內存檔鏡像里,然後把它整個載入到內存里運行),那可能必須得折騰至少2個分區了,還是建議使用MBR分區表。

第一個分區格式化成NTFS:用來日常使用,也就是備份/轉移文件;同時用來安裝Windows,或者用來存放RAMOS的鏡像文件,這個文件也許會超過4GB,FAT32下就需要分割,可能會帶來不便;

第二個分區格式化成FAT32:用來放UEFI的引導文件,平時是隱藏的,也無法正常操作。

這麼做的理由:

1.MBR兼顧那些還在使用傳統BIOS引導的電腦比較容易。

而且,現在的絕大多數U盤離2TB還挺遠吧,還不至於碰到MBR的2TB限制。MBR能創建最多4個主分區,也完全夠用了。

2.要兼顧UEFI的話,UEFI的引導文件需要放在FAT32分區才能保證正常啟動,有些主板的UEFI固件(BIOS)自帶NTFS支持,尚且有人反映不穩定,有些主板也許壓根不認識NTFS呢。FAT32是UEFI標準支持的做法。

3.Windows很奇葩,碰到U盤只能掛載第一個分區。

詳情可以搜索flip removable media bit,有人做了一個過濾驅動microdrive.sys,可以讓系統忽略這個標誌位。不過載入這個驅動可能需要關閉DSE(關閉SecureBoot,然後調整BCD里的啟動參數)或繞過DSE(使用DSEFix)。

Windows 10 1703已經解除這個限制。

PS:很多時候(比如市面上的各種傻瓜啟動U盤製作工具),啟動U盤的第二、三……個分區都被標記為特殊類型,或者有隱藏等標誌位——比如,類型ID被設為0xEF,就會出現「磁碟管理」中無法打開、操作分區的狀況。這時用命令行的Diskpart就可以正常操作了。

你也可以嘗試第三方軟體,比如BOOTICE的分區管理功能,不過我記得BOOTICE仍然不夠完善,分配盤符偶爾會出問題,老版本的BOOTICE在修改分區類型ID時也出過Bug。

PS:市面上的WinPE好像都在用fbinst作為傳統BIOS下的啟動代碼,它有個功能,就是深度隱藏分區——不把分區登記在MBR的分區表裡,在磁碟管理中看,就是一段未分區空間。把這個隱藏分區「挖出來」也不難:可以用fbinsttool,也可以直接用DiskGenius掃描已丟失分區……

然後說說大概思路吧。

引導模式有UEFI和傳統BIOS兩種,想兼顧是可以做到的。

先說傳統BIOS……

你需要玩轉bootmgr、grub4dos、grub2這些引導器(BOOTICE這個小軟體特別好用,可以比較容易地編輯BCD,也可以很輕鬆地重寫MBR和PBR里的引導代碼)。

我能想到的典型配置是:

1.grub4dos被安裝到MBR和PBR,在U盤啟動時繼續找到並執行grldr,然後負責顯示第一級菜單。可以從這裡啟動Linux,也可以繼續啟動微軟的bootmgr。

2.Linux,比如Ubuntu,可以用iso-scan參數來啟動。把Ubuntu的ISO文件拷到U盤上,然後從ISO中提取vmlinuz.efi(內核)和initrd.lz(初始化內存檔),接著編輯一下grub4dos的配置文件menu.lst就可以從ISO文件啟動Ubuntu了。menu.lst內容可以參考:

title Ubuntu 14.04 amd64 Live USB
kernel /ubuntu_stuff/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu_stuff/ubuntu-14.04-desktop-amd64.iso locale=zh_CN.UTF-8
initrd /ubuntu_stuff/initrd.lz
title Windows Boot Manager (可以繼續選擇WinToGo或WIM鏡像中的WinPE)
chainloader /bootmgr
title WinPE in ISO (比如老毛桃撒手不管版。注意,map --mem會載入整個ISO到內存,ISO如果太大可能比較慢或撐爆內存!)
root (hd0,0)
map --mem /ISO/winpeboot.iso (hd32)
map --hook
chainloader (hd32)
boot

PS:初始化內存檔包含驅動和啟動腳本,iso-scan就是它的功勞。有折騰精神的話,還可以對intrd.lz進行魔改來實現支持exFAT文件系統等目標。

3.沒錯,你看到了,grub4dos可以直接把ISO文件模擬模擬為硬碟!然後可以啟動ISO里的WinPE——不過,這種模擬在Windows啟動後就失效了,直接用老毛桃撒手不管版,啟動後就會發現WinPE變光桿了,外置工具鏡像(老毛桃WinPE里是OP.WIM)不在WinPE.IS_這個虛擬光碟機鏡像里。

其實,搞出這個外置工具鏡像的本意,就是縮小內存檔(WinPE.IS_就是內存檔鏡像,啟動後看到的是一個虛擬光碟機)的大小,以縮短載入時間、減少內存佔用。

解決這些問題也不難,無非是壓縮/解壓(WinPE.IS_是CAB格式的,可以用makecab重新打包,老毛桃也做過一個方便的工具),再改改PECMD腳本,外置改內置,畢竟現在的機器內存都是GB級別的。

4.顯而易見,直接從ISO啟動WinPE有點蛋疼啊(PE作者吐槽:本來就不是讓你這麼用的!哼)……如果整個WinPE都在一個WIM文件里,沒有搞成外置的,那靠微軟的bootmgr就可以搞定了。

(WinPE運行在一個虛擬光碟機形式的內存檔中,虛擬光碟機里的文件會被WIM鏡像填充)

啟動微軟的bootmgr後,可以再選擇啟動WinPE,還可以啟動WinToGo。

(很遺憾,Windows Boot Manager是黑底白字菜單,可能有點丑)

WinPE一般封裝成一個WIM鏡像。如何添加一個菜單項來啟動WinPE呢?三兩下就搞定了:

1.先從Windows安裝盤拷出Boot文件夾;

2.用BOOTICE找到並打開BCD;

3.新建一個WIM引導項,然後修改一下path,改為WIM鏡像的路徑,再指定一下ramdisk,基本上就可以了。

WIM引導項的device、osdevice值,還有ramdisk引導項的device值可以保持默認的BOOT/LOCATE。

你也可以指定到具體的分區。不過,如果這麼做了,需要注意:

如果你的一些操作改動了分區的特徵,也就是分區起始位置和MBR里的磁碟ID(對GPT來說,就是磁碟GUID和分區GUID),device、osdevice等值就會變成無效的unknown,然後U盤啟動時,選擇這個菜單項就會報錯——哈哈,現在碰到報錯也淡定了!重新指定一下就好。

(ramdisk是空的NTFS文件系統,實體是boot.sdi文件)

5.在BCD里新建WinToGo引導項,除了用BOOTICE,還可以用bcdboot命令,例如:

bcdboot U:Windows /s V: /f BIOS /d /addlast /l zh-CN

注意:BIOS下的Windows Boot Manager(bootmgr)用的是BootBCD,UEFI下的Windows Boot Manager(bootmgfw.efi)用的是EFIMicrosoftBootBCD,兩者井水不犯河水。

6.Linux以Ubuntu為例,它是支持iso-scan的。把vmlinuz.efi和initrd.lz這倆文件從Ubuntu的ISO里拷出來,然後編輯menu.lst配置文件,把它加到grub4dos的菜單里,寫好iso-scan參數,就可以從ISO文件啟動Ubuntu了。

(簡而言之,U盤上需要有vmlinuz.efi、initrd.lz,還有ubuntu的ISO這三個文件,還需要填寫好grub4dos的配置文件menu.lst)

但這樣啟動的Ubuntu,重啟時不會保存數據。如何重啟保存數據?抱歉,答主沒有這方面的經驗,以前Ubuntu的wubi支持製作一個文件充當虛擬盤,來存放被修改過的文件,也許可以參考一下。如果要折騰,大概要從aufs或overlayfs,還有initrd下手。

下面說說兼顧UEFI:

1.你可以用grub2 EFI版來顯示第一級菜單,背景可以找一張個性或低調的圖,也許還可以折騰折騰字體;

2.然後,可以選擇繼續啟動Linux:其實和上面BIOS的情況其實差不多,只是要編輯的配置文件換成ootgrubgrub.cfg了。

3.或者,轉到Windows Boot Manager(bootmgfw.efi,從Windows安裝盤把efi文件夾整個拷出來,bootmgfw.efi、BCD什麼的都在裡面了),然後還是修改BCD(EFIMicrosoftBootBCD),對於WinToGo,可以用bcdboot命令:

bcdboot U:Windows /s V: /f UEFI /d /addlast /l zh-CN

不知道bcdboot會不會修改UEFI NVRAM里的啟動順序設置,如果你發現多出一個項目,可以用BOOTICE的UEFI啟動序列編輯功能刪掉——不要用bcdedit直接刪,那樣只是隱藏而已。

PS:SecureBoot問題,微軟的bootmgfw.efi、winload.efi(Win8以上)是有數字簽名的;Ubuntu安裝盤裡的GRUB2 EFI版也是有數字簽名的,它們都可以在SecureBoot開啟時正常啟動。不過好像少數機器還是得關閉SecureBoot才能順暢啟動。

最後吐槽一下,EFI版GRUB2有個坑在聯想部分型號的筆記本上,UEFI固件可能自作聰明,把grub2錯誤識別成某個Linux發行版,然後就無法正常從U盤啟動了。要對付這種情況,也許你可以試試rEFInd、syslinux等其他的引導器。尤其推薦rEFInd,答主發現它可以神奇地解決Macbook上選擇EFI Boot後卡死的問題……


如果只是為了不用重複刻錄的話,我現在的做法是寫了一個bat文件,可以在幾種啟動盤切換。優點在於不用搞那麼複雜,而且U盤可以正常使用,缺點顯然是每次要切換時得在一個能正常啟動的電腦上切換一下。

具體切換方法就是把U盤根目錄下的文件移動到其他目錄中(非常直白)

運行效果:

代碼和說明放在github上了,建議有相關基礎的人使用。(不過有相關基礎的人基本也有能力自己寫這種腳本 :D)

wenjinghuan999/switchboot


用grub不知道可不可以,我記得百度有教程


首要條件是u盤要夠大,我自己用的就是64G分兩個區分別是ubuntu live和PE

可以找得到量產工具的U盤均可以把U盤量產為CDROM+可移動磁碟

題主的解決方案可以如下

1.u盤量產為Cdrom+分兩個區分別做不同的系統分區

2.三分區多重啟動

這樣可以達到需求,但是U盤的可靠性不夠,建議移動硬碟好些


怎麼用u盤一次引導多個系統不太清楚,只引導過單個系統


推薦閱讀:

如何使用快捷鍵讓電腦從U盤啟動
win10系統無法連接vpn怎麼解決
電腦密碼忘了咋辦?

TAG:Linux | 多系統 | U盤啟動 | Windows引導 |