利用 GRUB2 掛載 ISO 檔安裝 OS
以前要安裝新的 OS 總是要利用光碟片來開機才能安裝,但最近碰到光碟機會挑片,無法讀取單面雙層的 DVD,每次要安裝還得跟別人借光碟機,實在有夠麻煩!
後來偶然間看到 Grub2/ISOBoot 才發現:原來 GRUB2 不只可以掛載 Partition,也可以掛載 ISO 檔模擬成光碟機 (類似 Windows 下的虛擬光碟機),這樣就可以安裝了,而且速度還比實體光碟機快多了,反正現在硬碟空間那麼大,不在乎存放 ISO 檔的那一點點空間!
以下就用 Ubuntu 10.04 的 ISO 檔來實驗看看,首先編輯 menuentry
sudo gedit /etc/grub.d/40_custom
加入以下的設定
其中 set isofile 與 loopback 是設定 ISO 檔的存放位置,像我是在 /dev/sda8 切一塊 ext4 的空間專門用來存放檔案
至於後面兩個則是啟動指令,不同的 OS 會有不同的啟動方式,有機會再補上其它 OS 的資料,詳細的說明就請參考上面 GRUB2 的文件
存檔後再執行
sudo update-grub
重新開機後就可以進入 Ubuntu 10.04 Live CD 了
2018/01/28
以上的作法在 Ubuntu 17.10 上已經行不通了,參考 grml-rescueboot 的作法如下:
2013/9/30
Windows 7 x64 (from MSDN test OS)
首先要說明的是,Windows 7 無法使用 Ubuntu 的方式來載入,後來參考 GRUB2引导Windows PE等ISO文件的办法 使用 syslinux 內建的 memdisk (解開後位於 bios/memdisk 的路徑下) 來載入就行了,為了方便使用,我把它跟 ISO 檔放在相同的位置。
接下來是 ISO 檔的製作,原本在 Windows 找了一些軟體,但製作出來的 ISO 檔都無法使用。後來直接使用 Ubuntu 內建的 Brasero 光碟燒錄程式 就 OK 了。開啟 Brasero 後點選 光碟複製,在目標光碟選擇 映像檔案 即可。
最後就是 menuentry 的設定了
sudo gedit /etc/grub.d/40_custom
加入以下的設定
它跟上面不同的地方在於 GRUB2 先載入 memdisk,再利用 memdisk 載入 ISO 檔來執行;而不像 Ubuntu 直接由 GRUB2 載入。另外 linux16 與 initrd16 是用來載入 16-bit 程式的。
存檔後再執行
sudo update-grub
就大功告成了!
這裡附帶提一下 Windows 下的虛擬光碟機,原本想使用 Microsoft 的 Virtual CD-ROM Control Panel,但它不支援 64-bit OS;後來改用 Virtual CloneDrive 就可以了,這樣裝 Visual Studio 就不需要光碟機了!(當然要先製作 ISO 檔)
2013/10/4
用上述方式開始安裝後,會出現 "遺失必要的 CD/DVD 磁碟裝置驅動程式..." (參考:Grub4Dos 系統安裝碟) 看起來上述掛載的方式只是載入一些前導程式,實際要安裝的程式內容並未掛載上來 (我猜想),關閉錯誤訊息後回到主畫面,然後進入 系統管理員 (Shift + F10) 利用 ImDisk 把 ISO 檔再掛載一次就可以了。
首先把下載的 ImDisk 用 7-Zip 解壓縮後,跟 ISO 檔放在一起,然後建立以下兩個批次檔
SetupImDisk.CMD (安裝 ImDisk)
SetupCDROM.CMD (載入 ISO 檔)
然後輸入下列指令
此外因為 ISO 檔需要在安裝的過程中重新掛載,所以將 ISO 檔從 ext4 移到 NTFS,但 memdisk 仍然放在 ext4 的位置,修改的 memuentry 如下:
接下來就是把系統保留的 100MB 刪除,不過這一次沒做,下次有做再補吧
後來偶然間看到 Grub2/ISOBoot 才發現:原來 GRUB2 不只可以掛載 Partition,也可以掛載 ISO 檔模擬成光碟機 (類似 Windows 下的虛擬光碟機),這樣就可以安裝了,而且速度還比實體光碟機快多了,反正現在硬碟空間那麼大,不在乎存放 ISO 檔的那一點點空間!
以下就用 Ubuntu 10.04 的 ISO 檔來實驗看看,首先編輯 menuentry
sudo gedit /etc/grub.d/40_custom
加入以下的設定
menuentry "Ubuntu 10.04 ISO" { set isofile="/ubuntu-10.04.4-desktop-i386.iso" loopback loop (hd0,8)$isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject initrd (loop)/casper/initrd.lz }
其中 set isofile 與 loopback 是設定 ISO 檔的存放位置,像我是在 /dev/sda8 切一塊 ext4 的空間專門用來存放檔案
至於後面兩個則是啟動指令,不同的 OS 會有不同的啟動方式,有機會再補上其它 OS 的資料,詳細的說明就請參考上面 GRUB2 的文件
存檔後再執行
sudo update-grub
重新開機後就可以進入 Ubuntu 10.04 Live CD 了
2018/01/28
以上的作法在 Ubuntu 17.10 上已經行不通了,參考 grml-rescueboot 的作法如下:
- 安裝 grml-rescueboot
sudo apt-get install grml-rescueboot - 把 iso 檔案放到 /boot/grml/ 下
sudo mv ~/Downloads/<filename.iso> /boot/grml/ - 更新 grub
sudo update-grub
- 以試用的方式進入 Ubuntu
- 開啟終端機執行卸載
sudo umount -l -r -f /isodevice - 點選 "安裝 Ubuntu" 開始安裝
2013/9/30
Windows 7 x64 (from MSDN test OS)
首先要說明的是,Windows 7 無法使用 Ubuntu 的方式來載入,後來參考 GRUB2引导Windows PE等ISO文件的办法 使用 syslinux 內建的 memdisk (解開後位於 bios/memdisk 的路徑下) 來載入就行了,為了方便使用,我把它跟 ISO 檔放在相同的位置。
接下來是 ISO 檔的製作,原本在 Windows 找了一些軟體,但製作出來的 ISO 檔都無法使用。後來直接使用 Ubuntu 內建的 Brasero 光碟燒錄程式 就 OK 了。開啟 Brasero 後點選 光碟複製,在目標光碟選擇 映像檔案 即可。
最後就是 menuentry 的設定了
sudo gedit /etc/grub.d/40_custom
加入以下的設定
menuentry 'Boot Windows 7 64-bit ISO'{ set root='(hd0,msdos8)' echo 'Loading Memdisk...' insmod memdisk linux16 /memdisk iso raw echo 'Loading ISO...' initrd16 /Win7_64.iso }
它跟上面不同的地方在於 GRUB2 先載入 memdisk,再利用 memdisk 載入 ISO 檔來執行;而不像 Ubuntu 直接由 GRUB2 載入。另外 linux16 與 initrd16 是用來載入 16-bit 程式的。
存檔後再執行
sudo update-grub
就大功告成了!
這裡附帶提一下 Windows 下的虛擬光碟機,原本想使用 Microsoft 的 Virtual CD-ROM Control Panel,但它不支援 64-bit OS;後來改用 Virtual CloneDrive 就可以了,這樣裝 Visual Studio 就不需要光碟機了!(當然要先製作 ISO 檔)
2013/10/4
用上述方式開始安裝後,會出現 "遺失必要的 CD/DVD 磁碟裝置驅動程式..." (參考:Grub4Dos 系統安裝碟) 看起來上述掛載的方式只是載入一些前導程式,實際要安裝的程式內容並未掛載上來 (我猜想),關閉錯誤訊息後回到主畫面,然後進入 系統管理員 (Shift + F10) 利用 ImDisk 把 ISO 檔再掛載一次就可以了。
首先把下載的 ImDisk 用 7-Zip 解壓縮後,跟 ISO 檔放在一起,然後建立以下兩個批次檔
SetupImDisk.CMD (安裝 ImDisk)
rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 132 .\imdisk.inf
SetupCDROM.CMD (載入 ISO 檔)
Set fullname=%~1 imdisk -a -f "%fullname%" -m #:
然後輸入下列指令
pushd D:\ImageSource\imdisk // 切換到 ImDisk 的路徑 (實際上用 cd 切換到該路徑即可,但配置的磁碟機路徑需要自行找一下) SetupImDisk.CMD // 安裝 ImDisk SetupCDROM.CMD ..\Win7_64.ISO // 掛載 ISO 檔
此外因為 ISO 檔需要在安裝的過程中重新掛載,所以將 ISO 檔從 ext4 移到 NTFS,但 memdisk 仍然放在 ext4 的位置,修改的 memuentry 如下:
menuentry 'Boot Windows 7 64-bit ISO NTFS'{ set root='(hd0,msdos8)' echo 'Loading Memdisk...' insmod memdisk linux16 /memdisk iso raw set root='(hd0,msdos9)' echo 'Loading ISO...' initrd16 /ImageSource/Win7_64.iso }
接下來就是把系統保留的 100MB 刪除,不過這一次沒做,下次有做再補吧
留言