我們可以從一個安裝的 Linux 熱插拔到另一個安裝嗎?

我們可以從一個安裝的 Linux 熱插拔到另一個安裝嗎?

我的機器上安裝了多個獨立的 Linux,然後重新啟動到合適的一個。我想知道是否可以在不完全重新啟動的情況下從一個切換到另一個,例如,複製 fstab 並列出新安裝的分區,然後mount -a.

顯然,核心不會改變,但沒關係,我希望只改變工作分區。我還認為很明顯,這必須在沒有任何運行的情況下從命令列完成(如果可能的話)。或者這個想法從一開始就是無效的和純粹的瘋狂?

原因是我通常會在單獨的“實驗”安裝中嘗試根本性的更改(例如移至 Debian 中的“amd64”內核)。重新啟動來啟動它當然很好,但如果我可以在不完全重新啟動的情況下跳到該安裝,那就太酷了。您可以認為這只是動態更改根分區,但也許這根本不可能。

是的,這是可能的,正如我在下面所了解的那樣。如果您不需要換出核心本身,請使用“chroot”。如果您想模擬完全重新啟動,請使用“kexec”。

答案1

我認為這是不可能的。

理論上你想做的是:

  1. 使用 將系統移至“單一”運行級別init 1,理論上您只運行 init 和 bash。
  2. 卸載除 / 之外的所有分割區。此時您的系統可能會停止運作,這取決於 /usr 是否位於根分割區上。
  3. 將其他作業系統的根目錄安裝到某處。
  4. ivot_root 將根更改為新分割區。
  5. init 5告訴 init 透過運行(或 2 或任何合適的)來啟動新系統。

問題是pivot_root只改變目前進程的根分割區,這表示它不會影響init,當你告訴init啟動系統時,它會啟動你的舊系統。您需要某種方法來告訴 init 執行pivot_root,我認為這是不可能的。

哦,我們不要討論當您的其他作業系統使用不同的 init 服務時會發生什麼(例如,Fedora 使用 systemd,而 Ubuntu 使用 upstart)。您需要替換內核下的 init 進程(pid 1),這確實是不行的。

答案2

如果您想嘗試不同的內核,則必須重新啟動或在虛擬機器中執行它們。虛擬機器更方便,但你無法在真實硬體上測試核心。

如果您想對不同的已安裝組件進行不同的設置,您也可以使用虛擬機器。如果您想避免虛擬機器的開銷,您可以在chroot。我經常這樣做是為了在 64 位元安裝上輕鬆存取 32 位元程序,或者除了穩定版本(例如 Debian stable)之外還可以獲得最新的東西(例如 Debian stable)。我寫了一個為備用 Debian/Ubuntu 版本設定 chroot 的指南。也可以看看輕量級隔離linux環境

答案3

如果你想要/需要更改內核,但只想使用其他文件系統,正如您在這裡指出的那樣:

顯然,核心不會改變,但沒關係,我希望只改變工作分區。

那麼也許你只需要(掛載和)chroot,用你的話來說,

您可以認為這只是動態變更根分割區

我一直在救援系統(如 Clonezilla)中使用 chroot 來與通常使用不同核心的檔案系統進行互動。我不希望能夠執行諸如加載新核心模組之類的操作,但它對於讀取和寫入檔案(修復 fstab、調整 grub.conf 等)來說很好。

您可以使用綁定安裝來使 chroot 環境更有用。我一直使用它來複製 chroot 目標內已安裝的檔案系統:

mount /dev/sda1 /mnt
for d in dev sys proc; do mount -obind /$d /mnt/$d; done
chroot /mnt

相關內容