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 選項它還會把隨身碟切成:

  1. 第一分割: vfat 主分割區, windows 可以看得見。
  2. 第二分割: 延伸分割區, 裡面可以有一至數個 linux 邏輯分割。

二、 需求

  1. 作業系統必須是 linux
  2. 已安裝 perl、 sfdisk、 dosfstools、 extlinux
  3. 建議 (但非必須) 備妥 finnix 作業系統資料夾 (光碟或隨身碟皆可)
  4. 建議 (但非必須) 安裝 qemu-system-x86 套件以便測試。

如果你用 阿貴版 finnix 開機, 以上需求都直接滿足。

三、 限制

  1. 僅能處理 MBR 分割表的隨身碟; 無法處理 GPT 分割表的隨身碟。
  2. 僅能處理有切分割的隨身碟 (插入後出現 /dev/sdz 跟 /dev/sdz1 等等); 無法處理未切分割的隨身碟 (插入後僅出現 /dev/sdz)。
  3. /dev/sdz1 必須是 fat16/fat32 檔案系統; 無法處理 ntfs。

四、 安裝

解壓縮之後, 請進入 mbootu2-master 子目錄, 然後:


cp mbootu2 /usr/sbin
cp syslinux/* /usr/lib/syslinux

其中最重要的就是 syslinux/ 底下的設定檔 extlinux.conf。

五、 一些使用範例

以下假設你用 finnix-ckhung16c 或更新的版本開機。 [注意! 若你的 finnix 不是上述版本, 務必閱讀第五節 「完整選項列表」 關於 -f 的說明。]

  1. 在 /dev/sdz1 上面安裝 extlinux, 把 /dev/sdz 變成可開機隨身碟:
    mbootu2 -t /dev/sdz
    (但是因為沒有拷貝 finnix, 所以開機時只會出現一個沒有功能的選單。)
  2. 在 /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
  3. 同上, 且做好之後呼叫 qemu (硬體加速模式、 給它 1024 MB 的記憶體) 測試一下:
    mbootu2 -f /cdrom -q '-enable-kvm -m 1024' -t /dev/sdz
  4. 燒毀! 把 /dev/sdz 切成 sdz1、 sdz5、 sdz6 共三個分割, 並且把它變成 finnix 開機隨身碟。 分配 800MB 給 sdz5、 1200MB 給 sdz6; 剩下的空間全留給 sdz1。
    mbootu2 -f /cdrom -t /dev/sdz -z '800 1200'
  5. 燒毀! sfdisk 對某些隨身碟過敏, 需要加上 -o force_sfdisk 選項才會成功:
    mbootu2 -f /cdrom -o force_sfdisk -t /dev/sdz -z '800 1200'
  6. 燒毀! /dev/sdz 容量太大 (超過 40000MB, 例如是 64G 的隨身碟) 以至於 mbootu2 不敢動它。 把容量上限調高到 80000MB:
    mbootu2 -f /cdrom -m 80000 -t /dev/sdz -z '800 1200'
  7. 燒毀 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 指令可能就成功了。

六、 完整選項列表

  1. -b /tmp/syslinux 改從 /tmp/syslinux 子目錄拷貝 syslinux 的開機 (boot) 相關檔案。 注意! 標的碟上的 syslinux 的版本必須跟 「安裝 extlinux 的時候 (extlinux -i ...) 這個 extlinux 執行檔的版本」 要一致, 否則會無法載入模組。 所以通常沒事的話, 還是接受預設值 /usr/lib/syslinux 比較簡單。
  2. -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 這樣就會跟設定檔裡面的預設值一致。]
  3. -m 80000 把標的碟的容量上限調整為 80000MB, 這樣 mbootu2 才敢寫入 64G 的隨身碟。 預設上限是 40000MB, 也就 mbootu2 通常只敢寫入 32G 或更小的隨身碟。
  4. -n 測試; 僅顯示 shell 指令, 不要真的執行。
  5. -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.) 那就需要加上這個選項。
  6. -q '-enable-kvm -m 1024' 安裝完畢後, 呼叫 qemu-system-x86_64 測試一下, 並且傳 -enable-kvm -m 1024 當做 qemu-system-x86_64 的選項。
  7. -t /dev/sdz 把開機管理員安裝到 /dev/sdz。 /dev/sdz 的分割表跟其上的每個分割全部都會被一掃而空!
  8. -v 2 把 mbootu2 列印訊息的囉嗦程度設為 2。
  9. 危險! 燒毀! -z '200 800 600' 把五、六、七分割的大小分別設定成 200MB、 800MB、 600MB。