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盤一次引導多個系統不太清楚,只引導過單個系統
推薦閱讀: