查看完整版本: 如何使用 GRUB 2 直接從硬盤運行 ISO 文件
頁: [1]

lixuhua 發表於 2015-10-7 11:42 PM

如何使用 GRUB 2 直接從硬盤運行 ISO 文件

本帖最後由 lixuhua 於 2015-10-20 07:46 PM 編輯

大多數 Linux 發行版都會提供一個可以從 USB 啟動的 live 環境,以便用戶無需安裝即可測試系統。我們可以用它來評測這個發行版或僅僅是當成一個一次性系統,並且很容易將這些文件復制到一個 U 盤上,在某些情況下,我們可能需要經常運行同一個或不同的 ISO 鏡像。GRUB 2 可以配置成直接從啟動菜單運行一個 live 環境,而不需要燒錄這些 ISO 到硬盤或 USB 設備。
獲取和檢查可啟動的 ISO 鏡像為了獲取 ISO 鏡像,我們通常應該訪問所需的發行版的網站下載與我們架構兼容的鏡像文件。如果這個鏡像可以從 U 盤啟動,那它也應該可以從 GRUB 菜單啟動。當鏡像下載完后,我們應該通過 MD5 校驗檢查它的完整性。這會輸出一大串數字與字母合成的序列。http://www.linuxidc.com/upload/2015_10/151018132015812.png將這個序列與下載頁提供的 MD5 校驗碼進行比較,兩者應該完全相同。
配置 GRUB 2ISO 鏡像文件包含了整個系統。我們要做的僅僅是告訴 GRUB 2 哪里可以找到 kernel 和 initramdisk 或 initram 文件系統(這取決于我們所使用的發行版)。在下面的例子中,一個 KUbuntu 15.04 live 環境將被配置到 Ubuntu 14.04 機器的 Grub 啟動菜單項。這應該能在大多數新的以 Ubuntu 為基礎的系統上運行。如果你是其它系統並且想實現一些其它的東西,你可以從這些文件了解更多細節,但這會要求你擁有一點 GRUB 使用經驗。這個例子的文件 kubuntu-15.04-desktop-amd64.iso 放在位于 /dev/sda1 的 /home/maketecheasier/TempISOs/ 上。為了使 GRUB 2 能正確找到它,我們應該編輯
[*]/etc/grub.d40-custom
http://www.linuxidc.com/upload/2015_10/151018132015813.png
[*]menuentry "Kubuntu 15.04 ISO"{
[*]set isofile="/home/maketecheasier/TempISOs/kubuntu-15.04-desktop-amd64.iso"
[*]loopback loop (hd0,1)$isofile
[*]echo"Starting $isofile..."
[*]linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash
[*]initrd (loop)/casper/initrd.lz
[*]}
http://www.linuxidc.com/upload/2015_10/151018132015815.png
分析上述代碼首先設置了一個變量名 $menuentry ,這是 ISO 文件的所在位置 。如果你想換一個 ISO ,你應該修改 isofile="/path/to/file/name-of-iso-file-.iso".下一行是指定回環設備,且必須給出正確的分區號碼。
[*]loopback loop (hd0,1)$isofile
注意 hd0,1 這里非常重要,它的意思是第一硬盤,第一分區 (/dev/sda1)。GRUB 的命名在這里稍微有點困惑,對于硬盤來說,它從 “0” 開始計數,第一塊硬盤為 #0 ,第二塊為 #1 ,第三塊為 #2 ,依此類推。但是對于分區來說,它從 “1” 開始計數,第一個分區為 #1 ,第二個分區為 #2 ,依此類推。也許這里有一個很好的原因,但肯定不是明智的(明顯用戶体驗很糟糕)..在 Linux 中第一塊硬盤,第一個分區是 /dev/sda1 ,但在 GRUB2 中則是 hd0,1 。第二塊硬盤,第三個分區則是 hd1,3, 依此類推.下一個重要的行是:
[*]linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash
這會載入內核鏡像,在新的 Ubuntu Live CD 中,內核被存放在 /casper 目錄,並且命名為 vmlinuz.efi 。如果你使用的是其它系統,可能會沒有 .efi 擴展名或內核被存放在其它地方 (可以使用歸檔管理器打開 ISO 文件在 /casper 中查找確認)。最后一個選項, quiet splash ,是一個常規的 GRUB 選項,改不改無所謂。最后
[*]initrd (loop)/casper/initrd.lz
這會載入 initrd ,它負責載入 RAMDisk 到內存用于啟動。
啟動 live 系統做完上面所有的步驟后,需要更新 GRUB2:
[*]sudo update-grub
http://www.linuxidc.com/upload/2015_10/151018132015814.png當重啟系統后,應該可以看見一個新的、並且允許我們啟動剛剛配置的 ISO 鏡像的 GRUB 條目:http://www.linuxidc.com/upload/2015_10/151018132015816.png選擇這個新條目就允許我們像從 DVD 或 U 盤中啟動一個 live 環境一樣。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

jayzai 發表於 2016-3-1 09:50 AM

謝謝分享~~~~我是用grub2載入android-x86版的iso檔,一樣可以用唷~~~

chevylin0802 發表於 2016-3-4 01:19 PM

本帖最後由 chevylin0802 於 2016-3-4 01:21 PM 編輯

現在比較少人會使用這個方式去測試新版本的Linux
蓋因現在多半都用虛擬機器的方式做

以前虛妳機器的執行效率差
但自從半虛擬化技術越來越成熟之後
現在iso檔安裝在虛擬機器上已經越來越多人使用
因此grub再好也變得利用價值不高

若不考慮linux kernel版本差異的問題的話
甚至使用docker就已經足夠了

頁: [1]