mbootu2
一、 簡介
這個計畫已終止。 請改用 mbootuz。
稍早版 mbootu2 的使用者請注意: 2015/7/19 修改版之後, 選項略有改變, 請重讀本文件!
mbootu2 算是 mk-boot-usb 的重寫版。 它幫你製作第二代的百毒不侵救命碟。 你可以拿它來把你所有的資料隨身碟全部改裝成 finnix 開機碟; 它不會去動到你的資料, 只會把 /usr/lib/syslinux 整個目錄拷貝到第一分割的 boot/syslinux 子目錄去, 並且安裝 (syslinux 的兄弟) extlinux 開機管理員 (還有 finnix -- 如果你願意撥出 300MB 空間的話)。
如果加上危險的 -z 選項, 則 mbootu2 會像第一代的 mk-boot-usb 一樣, 在安裝上述開機管理員等等之前, 先把你的隨身碟上的所有資料清空、 把整顆隨身碟砍掉重練。 所以使用 -z 選項時請特別注意: (1) linux 新手請先把插在電腦上的其他隨身碟通通拔掉, 以免不小心被格式化掉了! (2) 想要製作救命碟的那顆隨身碟, 請先把所有資料先備份到其他地方。 如果加了 -z 選項它還會把隨身碟切成:
- 第一分割: vfat 主分割區, windows 可以看得見。
- 第二分割: 延伸分割區, 裡面可以有一至數個 linux 邏輯分割。
二、 需求
- 作業系統必須是 linux
- 已安裝 perl、 sfdisk、 dosfstools、 extlinux
- 建議 (但非必須) 備妥 finnix 作業系統資料夾 (光碟或隨身碟皆可)
- 建議 (但非必須) 安裝 qemu-system-x86 套件以便測試。
如果你用 阿貴版 finnix 開機, 以上需求都直接滿足。
三、 限制
- 僅能處理 MBR 分割表的隨身碟; 無法處理 GPT 分割表的隨身碟。
- 僅能處理有切分割的隨身碟 (插入後出現 /dev/sdz 跟 /dev/sdz1 等等); 無法處理未切分割的隨身碟 (插入後僅出現 /dev/sdz)。
- /dev/sdz1 必須是 fat16/fat32 檔案系統; 無法處理 ntfs。
四、 安裝
解壓縮之後, 請進入 mbootu2-master 子目錄, 然後:
cp mbootu2 /usr/sbin
cp syslinux/* /usr/lib/syslinux
其中最重要的就是 syslinux/ 底下的設定檔 extlinux.conf。
五、 一些使用範例
以下假設你用 finnix-ckhung16c 或更新的版本開機。 [注意! 若你的 finnix 不是上述版本, 務必閱讀第五節 「完整選項列表」 關於 -f 的說明。]
- 在 /dev/sdz1 上面安裝 extlinux, 把 /dev/sdz 變成可開機隨身碟:
mbootu2 -t /dev/sdz
(但是因為沒有拷貝 finnix, 所以開機時只會出現一個沒有功能的選單。) - 在 /dev/sdz1 上面安裝 extlinux, 並且把
/cdrom 拷貝到 /dev/sdz1 上面,
真的把 /dev/sdz 變成 finnix 可開機隨身碟:
mbootu2 -f /cdrom -t /dev/sdz
註: 如果開機時是用 finnix 隨身碟而不是 finnix 光碟開機, 那麼有可能你的複製指令應該要改成這樣:
mbootu2 -f /cdrom/finnix-ckhung16c -t /dev/sdz
- 同上, 且做好之後呼叫 qemu (硬體加速模式、
給它 1024 MB 的記憶體) 測試一下:
mbootu2 -f /cdrom -q '-enable-kvm -m 1024' -t /dev/sdz
- 燒毀! 把 /dev/sdz 切成 sdz1、 sdz5、 sdz6
共三個分割, 並且把它變成 finnix 開機隨身碟。
分配 800MB 給 sdz5、 1200MB 給 sdz6; 剩下的空間全留給 sdz1。
mbootu2 -f /cdrom -t /dev/sdz -z '800 1200'
- 燒毀! sfdisk 對某些隨身碟過敏, 需要加上
-o force_sfdisk
選項才會成功:
mbootu2 -f /cdrom -o force_sfdisk -t /dev/sdz -z '800 1200'
- 燒毀! /dev/sdz 容量太大 (超過 40000MB,
例如是 64G 的隨身碟) 以至於 mbootu2 不敢動它。
把容量上限調高到 80000MB:
mbootu2 -f /cdrom -m 80000 -t /dev/sdz -z '800 1200'
- 燒毀 C 槽! 讓你無家可歸!
假設這是一部剛買的新電腦, 2T 的主硬碟裡沒有資料。
你用 finnix-ckhung16c 光碟開機, 想要一口氣分割硬碟並安裝 finnix。
因為平常 mbootu2 不敢燒毀 /dev/sda (就是 windows 下的 C 槽),
所以需要用
-o force_sda
選項強迫它照辦:
以下指令分配大約 200G 給 sda5、 大約 200G 給 sda6、 大約 600G 給 sda7, 剩下的都給 sda1:mbootu2 -t /dev/sdz -f /cdrom -m 3000000 -o force_sda,force_sfdisk -z '200000 200000 600000'
呼叫 qemu-system-x86_64 測試隨身碟能否開機時, 第一次測試經常會失敗。 先不要急著重做, 手動重下一次 qemu-system-x86_64 指令可能就成功了。
六、 完整選項列表
-b /tmp/syslinux
改從 /tmp/syslinux 子目錄拷貝 syslinux 的開機 (boot) 相關檔案。 注意! 標的碟上的 syslinux 的版本必須跟 「安裝 extlinux 的時候 (extlinux -i ...) 這個 extlinux 執行檔的版本」 要一致, 否則會無法載入模組。 所以通常沒事的話, 還是接受預設值 /usr/lib/syslinux 比較簡單。-f /cdrom
從 /cdrom 把 finnix 拷貝到標的碟的第一分割。 注意: 請確認 /cdrom 底下有一個 finnix/os-release 檔, 並確認裡面有一句VARIANT="ckhung16c"
之類的。 mbootu2 會依據這個變數的值來命名標的目錄及設定開機選單。 如果你的 finnix 是 finnix-ckhung16c 或更新的版本, 這麼做完之後隨身碟就真的可以開機了。 若是舊版或官方版, 事後可能還必須手動用文字編輯器把標的碟第一分割上的 boot/syslinux/extlinux 裡面 「指定 finnix 目錄」 的 (三幾個) 參數也改成相同的名稱。 [而且 2015/7/19 或更舊版本的 mbootu2 不會依據 os-release 的資訊命名。 如果你的 finnix 放在 /cdrom 子目錄下, 但是希望拷貝過去之後改名為 finnix-ckhung15c , 那麼可以在事先建立連結:cd /tmp ; ln -s /cdrom finnix-ckhung15c
然後呼叫 mbootu2 即可用-f /tmp/finnix-ckhung15c
這樣就會跟設定檔裡面的預設值一致。]-m 80000
把標的碟的容量上限調整為 80000MB, 這樣 mbootu2 才敢寫入 64G 的隨身碟。 預設上限是 40000MB, 也就 mbootu2 通常只敢寫入 32G 或更小的隨身碟。-n
測試; 僅顯示 shell 指令, 不要真的執行。-o force_sda
或-o force_sfdisk
這個 -o 後面可以加上一到數個特殊選項, 當中用半型逗號分開 (不可有空格)。- 燒毀 C 槽! 無家可歸!
force_sda
通常 mbootu2 拒絕把 /dev/sda 當做標的碟。 加了這個選項之後, mbootu2 才敢把 /dev/sda 當做標的碟。 force_sfdisk
某些隨身碟在製作時會失敗, 並且看到當中有類似這樣的錯誤訊息: sfdisk: I don't like these partitions - nothing changed. (If you really want this, use the --force option.) 那就需要加上這個選項。
- 燒毀 C 槽! 無家可歸!
-q '-enable-kvm -m 1024'
安裝完畢後, 呼叫 qemu-system-x86_64 測試一下, 並且傳 -enable-kvm -m 1024 當做 qemu-system-x86_64 的選項。-t /dev/sdz
把開機管理員安裝到 /dev/sdz。 /dev/sdz 的分割表跟其上的每個分割全部都會被一掃而空!-v 2
把 mbootu2 列印訊息的囉嗦程度設為 2。- 危險! 燒毀!
-z '200 800 600'
把五、六、七分割的大小分別設定成 200MB、 800MB、 600MB。