我有一台有多個作業系統的筆記型電腦。
是否有任何命令可以關閉當前作業系統並啟動到另一個作業系統?
windows->Ubuntu,反之亦然
謝謝
答案1
是的,如果您使用 Grub 進行啟動選擇,這是可能的:-
- 啟動進入 Linux。
- 使能夠根透過登入或使用
su
或來獲得權限sudo -s
。 - 複製
/boot/grub.cfg
到 或/boot/grub.win
,/boot/grub.lin
取決於您的預設值。 - 編輯
/etc/default/grub
以變更GRUB_DEFAULT=
為啟動清單中備用作業系統的編號(從零開始計數)。 - 運行
update-grub
,然後根據需要複製/boot/grub.cfg
到/boot/grub.lin
或/boot/grub.win
。 - 恢復
GRUB_DEFAULT=
到之前的值/etc/default/grub
。 - 建立
bootlin
並bootwin
包含:cp /boot/grub.lin /boot.cfg
或cp /boot/grub.win /boot.cfg
shutdown -r now
現在您可以從 Ubuntu呼叫bootlin
或。bootwin
在 Windows 中,您將需要做同樣的事情:-
- 首次安裝ext2fsd。
U:
為 Ubuntu 分割區指派一個磁碟機號(例如)並使其可寫入。- 現在您可以建立
bootlin.cmd
並bootwin.cmd
包含適當的copy
命令來覆蓋U:\boot\grub.cfg
,然後是:shutdown -r
如果您啟動,ntldr
則可以對兩個副本使用類似的技術boot.ini
(您可能需要先清除唯讀、系統和隱藏屬性)。可能有類似的技術可以與其他引導程式一起使用,但我將其留給其他人來建議如何使用這些技術。
注意:我發現ext2fsd在唯讀模式下運作良好,但我從未在可寫模式下使用過它:請注意,它可能會損壞您的Ubuntu 系統,因此請確保它得到良好備份,直到您嘗試了幾次並確信它可以工作正確。從 Windows 進行編輯可能更安全grub.cfg
就地,這不需要更改目錄,但您將需要某種 Windows 內聯編輯器,該編輯器不使用同一文件系統中的工作文件,或敲擊幾行來C
完成此操作。
答案2
這些細節可能與 UEFI 處理 GPT 系統的方式不完全匹配,但它確實描述了基於 MBR 的系統。
官方(舊)標準是使用主引導記錄上的內容。 「fdisk」指令可用於變更 MBR 的詳細資料。
傳統的 MBR 包含一些指定分割區是否被標記的位元。此標準指定僅標記一個分區,儘管啟動程式碼不一定強制執行這一點。當使用者指定應標記特定分割區時,傳統的 fdisk 程式通常會檢查另一個標記分割區,如果找到,則取消標記。可能有其他字詞用於描述“標記”分區,例如“選定”分區。
然後,傳統的MBR包含一些「代碼」(指令)。當系統啟動時,將運行此程式碼。該程式碼將檢查 MBR 以查看每個分割區有多大,並查看哪個分割區被標記。然後,它將透過運行位於標記的分區中的一些附加程式碼來繼續啟動過程。
所以,這是廣泛支持的標準。不幸的是,這種標準方法涉及進入 fdisk 並手動與其互動。所以這不僅僅是一個可以運行的程式。然而,它是最廣泛支持的標準。
幾乎每個作業系統都提供了一個程式來執行此操作; OpenBSD 的程式是 fdisk(8),Windows 9x 和 DOS 以及許多其他作業系統中也有類似的命名程式。對於需要很長時間關閉和重新啟動的操作系統或系統來說,這可能是非常理想的- 您可以設置它並開始重新啟動過程,然後走開,喝杯咖啡,然後返回到以這種方式啟動的系統您想要它 - 無需等待神奇時刻來選擇下一個作業系統。
有趣的是,隨著人們做出了所有花哨的替代品,最廣泛支持的官方流程的優勢經常被忽視。
我知道這可能不像預期的那麼自動化,儘管提出的問題沒有指定非互動性。所以,簡單的答案是,是的,有這樣一個命令。它是“fdisk”。
現在,還有一些其他變體,因此如果您正在尋求這樣的解決方案,自動化可能是可能的。您可能想要檢查作業系統中是否有名為「boot」或類似命令的命令;我知道舊的 OS/2 作業系統確實包含一個「BOOT」指令,可以修改啟動的作業系統。您需要執行的精確命令取決於您實際使用的引導程式碼。有多個可用的“啟動管理器”程序,並且此功能現已內建到更多作業系統中。這是個好消息。壞消息是,該過程並不那麼標準化,所以我不能只為您提供一種能夠與每個人的不同變體很好地整合的特定流程。基本上,您需要選擇一個解決方案並使用它。主要關注點可能是找到一個可以從多個作業系統完成的進程,並且可以用來寫入系統啟動時處理的磁碟部分。這些部分通常不是檔案系統的一部分,防毒功能可能會嘗試限制人們寫入磁碟的這些關鍵部分的能力。
基本上,該過程將涉及更改分區的標誌位,或更改 MBR 的引導程式碼,或更改 MBR 用於繼續引導的分區上的程式碼的行為。這是三種不同的方法,每種方法實際上都被一些可用的不同選項所使用。
第四種方法可能是更改 BIOS 從哪個磁碟啟動。然而,這種方法傳統上在不同系統之間的兼容性要差得多,因此該方法更多是一種理論上的可能性,而不是實際使用的方法。 (儘管許多用戶以互動方式使用了這種方法,通常是按 F12 或其他鍵來調出啟動選單;有時他們只是進入 BIOS 設定並更改後續啟動時使用的預設磁碟。)
最常見的方法可能是當系統在一個作業系統中啟動時建立整個 MBR 的 512 位元組映像,然後當系統使用不同的作業系統啟動時保存整個 MBR 的 512 位元組映像。然後,使用您需要的任何軟體,將這 512 位元組直接寫入磁碟的前 512 位元組。 (像「dd」這樣的東西就可以了。)最大的挑戰可能是獲得作業系統的許可。
AFH 的答案似乎顯示瞭如何使用 grub 在 Linux 上完成此操作。 XP/2003 時代的 Windows 啟動管理器將使用此類磁區映像(將由「Boot.ini」檔案引用),因此可以透過更改 Boot.ini 文字檔案來退出 Windows。 (該過程可能在Vista/2008 中發生了變化,因此在較新的系統上嘗試之前請先檢查新的啟動管理器。)實施這些解決方案中的任何一個的精確方法將取決於您試圖停止使用的作業系統。 (例如:Microsoft Windows 的版本。)
答案3
而當我們稱之為硬體重新啟動時,它或多或少與隨後的斷電和上電相同。因此所有記憶體都會遺失。當我們加電時,引導過程由主機板韌體處理。如果我們想告訴主機板韌體一些訊息,我們絕不能在記憶體中留下這樣的訊息。但我們可以在磁碟(或其他一些永久介質,我相信 efi 提供了設定非揮發性變數的機制)上寫一些東西(任何東西)。
除了前面提到的方法之外,linux核心還有執行程式在硬體不停機的情況下「將控制權交給另一個系統」的功能。儘管 Windows 核心可能無法直接 kexec 進入,但存在一種解決方法,即透過 kexec 進入載入程式並讓載入程式初始化 Windows 系統。