製作直讀光碟 ISO 映像檔多重開機 USB 救急工具碟

以往要將這些 Live Linux OSes 裝進 USB 隨身碟裡,需花不少工夫,不過昨晚找到相關資料,可以使用 GRUB2 直接啟動 ISO image(s),相形之下簡單許多。

準備一枚視自己想塞多少系統進去,而相對剩下多少空間的隨身碟。既有的 FAT 檔案系統就可以了,已有的資料不必清除,但是建議製作這工具碟以前先備份這枚隨身碟的資料,以避免任何腦殘手滑造成的意外導致檔案遺失。

sudo grub-install --no-floppy --root-directory=/media/MBOOT /dev/sdb

其中 /media/MBOOT 是把隨身碟插進電腦後,系統自動掛載的資料夾;/deb/sdb 則是該隨身碟的裝置代號,請自行依自身情況代換。

sudo mkdir /media/MBOOT/iso

在這個隨身碟開一個 iso 目錄(呃,資料夾),放想要拿來直讀的 ISO images。並非任何的 Live CD 都可以用本篇的方法啟動,我測試過至少 Fedora, GeeXboX, Debian GNU/Linux, Clonezilla Live 都不行,得用老方法裝在特別規劃出來的分割區、或將光碟內容解到隨身碟裡另外處理啟動事宜。不過,我想要跑的那幾個救急工具能用就好了。

接著再寫一個 /media/MBOOT/boot/grub/grub.cfg 設定檔:

set color_normal='light-blue/black'
set color_highlight='light-cyan/blue'
set drive_label=MBOOT

menuentry "System Rescue CD" {
 loopback loop /iso/systemrescuecd-x86-2.8.1.iso
 linux (loop)/isolinux/rescuecd isoloop=/iso/systemrescuecd-x86-2.8.1.iso setkmap=us docache dostartx
 initrd (loop)/isolinux/initram.igz
}

menuentry "Parted Magic Disk Utilities 2012-07-13" {
 loopback loop /iso/pmagic_2012_07_13.iso
 linux (loop)/pmagic/bzImage iso_filename=/iso/pmagic_2012_07_13.iso edd=off load_ramdisk=1 prompt_ramdisk=0 rw loglevel=9 vga=normal livemedia noeject max_loop=256 vmalloc=288MiB
 initrd (loop)/pmagic/initrd.img
}

menuentry "Ubuntu 12.04 (i386)" {
 loopback loop /iso/ubuntu-12.04-desktop-i386.iso
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-12.04-desktop-i386.iso noeject noprompt --
 initrd (loop)/casper/initrd.lz
}

menuentry "Ubuntu 12.04 (amd64)" {
 loopback loop /iso/ubuntu-12.04-desktop-amd64.iso
 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=/iso/ubuntu-12.04-desktop-amd64.iso noeject noprompt --
 initrd (loop)/casper/initrd.lz
}

menuentry "Arch Linux i686 (Archboot 2012.06)" {
 loopback loop /iso/archlinux-2012.06-1-archboot-dual.iso
 linux (loop)/boot/vmlinuz_i686 gpt loglevel=7 rootdelay=10
 initrd (loop)/boot/initramfs_i686.img
}

menuentry "Arch Linux x86_64 (Archboot 2012.06)" {
 loopback loop /iso/archlinux-2012.06-1-archboot-dual.iso
 linux (loop)/boot/vmlinuz_x86_64 gpt loglevel=7 rootdelay=10
 initrd (loop)/boot/initramfs_x86_64.img
}

menuentry "Arch Linux i686 (2012.07)" {
 set isofile="iso/archlinux-2012.07.15-netinstall-dual.iso"
 loopback loop /$isofile
 linux (loop)/arch/boot/i686/vmlinuz img_dev=/dev/disk/by-label/$drive_label img_loop=$isofile archisolabel=ARCH_201207
 initrd (loop)/arch/boot/i686/archiso.img
}

menuentry "Arch Linux x86_64 (2012.07)" {
 set isofile="iso/archlinux-2012.07.15-netinstall-dual.iso"
 loopback loop /$isofile
 linux (loop)/arch/boot/x86_64/vmlinuz img_dev=/dev/disk/by-label/$drive_label img_loop=$isofile archisolabel=ARCH_201207
 initrd (loop)/arch/boot/x86_64/archiso.img
}

menuentry "FreeBSD 9.0 i386" {
 set isofile=/iso/FreeBSD-9.0-RELEASE-i386-disc1.iso
 loopback loop $isofile
 kfreebsd (loop)/boot/kernel/kernel iso-scan/filename=$isofile noeject noprompt splash --
 kfreebsd_module (loop)/boot/mfsroot.gz type=mfs_root
}

menuentry "FreeBSD 9.0 x86_64" {
 set isofile=/iso/FreeBSD-9.0-RELEASE-amd64-disc1.iso
 loopback loop $isofile
 kfreebsd (loop)/boot/kernel/kernel iso-scan/filename=$isofile noeject noprompt splash --
 kfreebsd_module (loop)/boot/mfsroot.gz type=mfs_root
}

menuentry "Lenovo PC-DOCTOR" {
 linux16 /boot/memdisk
 initrd16 /iso/pc-doctor.img
}

menuentry "ThinkPad Update" {
 linux16 /boot/memdisk iso
 initrd16 /iso/7uuj48uc.iso
}

最後把設定檔裡提到的那些 ISO images 檔案都放進 iso 目錄裡,就完工了。

如設定檔所示,我放了 System Rescue CD 這個可以拿來清除 Windows 管理者密碼、救 NTFS 檔案系統的工具,這還只是它諸多功能當中的兩種,推薦每位苦命 MIS 都能準備這工作利器。

Parted Magic 則是拿來做磁碟分割管理、備份的好用工具,可以把它當成開源版本的 Partition Magic。

Ubuntu,這個還需要介紹嗎?雖然我很久以前就因為對它累積許多不滿而棄用,但是哪天出門在外臨時要借用他人電腦,在這枚隨身碟裡擺這一套 desktop 用途的 Live 系統,應該也是蠻好用的。

Arch Linux 是我目前使用的 Linux OS。

因為這枚工具碟不需要將分割區重劃為非 FAT16/FAT32 的檔案系統,所以還可以把 PortableApps 放進來,在 Windows 下也能使用不少可攜式、綠色軟體。

註:如果需要用到 Lenovo 的 PC-DOCTOR 及 ThinkPad BIOS Upadate CD,請另外參考這篇安裝 SYSLINUX/MEMDISK。

CC BY-SA 4.0 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Leave a Reply

Your email address will not be published. Required fields are marked *