System-Installation

如何從儲存在硬碟上的 ISO 文件啟動?

  • April 6, 2019

我知道我可以創建/刻錄可啟動 CD/DVD 或 live USB,並可以從中啟動/安裝。但是假設我目前正在執行 GNU/Linux,並且我有另一個 GNU/Linux 的 ISO 文件,我想在我的硬碟上安裝,那麼我可以直接從硬碟啟動 ISO 並嘗試/安裝那個 GNU/Linux 作業系統嗎? ?

是的,您可以通過在GRUB引導載入程序菜單中添加一個菜單項來完成此操作。

您可以通過編輯添加自定義 GRUB 菜單項/etc/grub.d/40_custom

自定義菜單條目範例

exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.  

menuentry "Trisquel ISO" {
       set isofile="/Operating_Systems/Trisquel_7.0_i686/trisquel_7.0_i686.iso"
       loopback loop (hd0,5)$isofile
       linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash
       initrd (loop)/casper/initrd
}

說明與說明:

  1. 該命令set用於將 ISO 文件的路徑儲存到一個變數中,這裡是isofile.
  2. loopback用於從文件系統映像製作設備。為此,需要指定設備和圖像文件。這裡我們使用(hd0,5)$isofilein which(hd0,5)代表磁碟的第五個分區。
  • 注意事項: 在(hd0,5)中,第
    1位表示從0(這裡:0 = 第 1 個設備)開始的設備號,第
    2位表示從1(這裡 5 = 第 5個分區)開始的分區號。
    這意味著/dev/sda5
  • 變數$isofile具有 ISO 文件的路徑。所以,最後變成了(hd0,5)/Operating_Systems/Trisquel_7.0_i686/trisquel_7.0_i686.iso
  • 有關詳細資訊,請訪問:如何指定設備文件
  1. linux命令用於從文件載入 Linux 核心 ( vmlinuz )。將Linux核心的路徑放在ISO中。
  • 讀取/提取 ISO 的內容以獲取核心範例的路徑:
 $ 7z l trisquel_7.0_i686.iso | grep vmlinu
 2014-10-29 21:41:43 .....      5841680      5841680  casper/vmlinuz
 2014-11-03 00:45:09 .....      5844176      5844176  casper/vmlinuz.netinst

以,`/casper/vmlinuz`在這裡使用。
4. [**`initrd`**](http://www.gnu.org/software/grub/manual/grub.html#initrd)命令用於為 Linux 核心映像載入初始 ramdisk,並在記憶體中的 Linux 設置區域中設置適當的參數。


[initrd](https://en.wikipedia.org/wiki/Initrd)是一種將臨時根文件系統載入到記憶體中的方案。將路徑放在`initrd`ISO 中。
讀取/提取 ISO 的內容以獲取路徑`initrd`:
7z l trisquel_7.0_i686.iso | grep initrd
14-11-03 00:45:19 .....     16851900     16851900  casper/initrd
14-11-03 00:45:09 .....      9398592      9398592  casper/initrd.netinst
5. 附加參數如`boot=casper iso-scan/filename=$isofile noprompt noeject`可能是特定於 GNU/Linux 發行版的,並且因另一個 Linux 系列而異。[您可以從這裡](https://web.archive.org/web/20170718204158/https://git.marmotte.net/git/glim/tree/grub2)找到不同系列/分佈的一些配置。


注意:某些發行版使用`initrd.gz`或`initrd.lz`取決於使用的​​算法/壓縮。


編輯完成後`/etc/grub.d/40_custom`,需要通過`update-grub2`命令更新 GRUB。重新啟動後,您將在 GRUB 螢幕上找到您添加的自定義菜單項。您可以使用 GNU/Linux 發行版的 Live 環境。


為了從 ISO 執行安裝,安裝程序可能需要解除安裝任何已安裝的分區;即說另一個系統安裝在`/isodevice`,那麼你可以`umount -l /isodevice`。

引用自:https://unix.stackexchange.com/questions/251079