Chinaunix首页 | 论坛 | 博客
  • 博客访问: 855415
  • 博文数量: 68
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 2800
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-04 20:57
文章分类

全部博文(68)

文章存档

2008年(68)

我的朋友

分类: LINUX

2008-07-04 11:00:36

摘要

Mk-boot-usb 是一個用來製作可開機 usb 碟的小小 perl script。 您只需要決定要把 usb 碟切成幾塊, 各留多少空間, 它就會把整顆 usb 碟清空, 切成數個分割, 建立檔案系統, 安裝開機管理員 grub, 並安裝一個極小的 linux, 讓您的 usb 立即變成可開機隨身碟。 Mk-boot-usb 的目的是要讓製作可開機 usb 碟的程序變得極迅速簡便, 極易驗證。 之後如果您想安裝比較有用的 linux 版本, 只需要 (1) 把您所挑選的 Live CD 所有檔案全部拷貝到適切的分割 (2) 修改 grub 的設定檔, 就可以用了。 自從 08g 版開始, 它還具有自我複製的功能: 第一顆可開機隨身碟製作好之後, 灌入 mk-boot-usb, 就可以用它來複製更多相同的可開機隨身碟, 而這些隨身碟也就跟著都有自我複製功能!

這個程式會把您的隨身碟上所有的資料清除; 如果您不小心, 甚至可能會把電腦本身的硬碟, 以及接到電腦上的所有其他儲存裝置, 全部都清得一乾二淨! 此外, 這支程式在撰寫時, 完全沒有把潰客入侵等等與安全性相關的議題列入考量。 請自行斟酌使用。

如果您對推廣自由軟體的興趣甚於技術本身, 請放心略過技術細節 (請找一位略通 linux 命令列的朋友支援技術部分即可), 直接前往這一節:

下載

下載點 ; md5sum: 637b899ab4d0cb8adbfbe3535da44681; ; 新版釋出的消息將以留言方式貼在 這帖。 本程式以 第三版或更新的版本開放授權大眾使用。

從 08g 版開始, 您可以直接在根目錄底下解壓縮, 執行檔就放在 /usr/sbin/mk-boot-usb ; 其他相關的系統與資料檔案都放在 /usr/share/mk-boot-usb 底下, 包含 。 (應該說 mk-boot-usb 已變成 ttylinux 的非官方包裝紙才對。) 這樣可省去許多麻煩, 例如網路連線的需求, 及無法在 unionfs 上用 -o loop 掛載檔案系統的問題, ... 等等。

軟體需求及功能限制

Mk-boot-usb 用到以下套件/指令: perl, sfdisk, mkfs (mkfs.vfat and mkfs.ext2), grub。

也建議您安裝 , 這樣製作完成之後, 就可立即測試是否成功。

Mk-boot-usb 在 Ubuntu 的衍生版本 Edubuntu 上面開發。 有聽說在 Fedora 上面執行 mk-boot-usb, 可以成功安裝 grub, 但最後的 usb 碟卻無法開機。 如果您在 *ubuntu 系列以外的版本上成功, 請分享您的經驗。

這支程式在撰寫時, 完全沒有把潰客入侵等等與安全性相關的議題列入考量

製作第一顆可開機隨身碟

製作第一顆隨身碟稍微麻煩一點, 要讀這一節跟下一節。 感謝 Eating 寫了兩篇圖文並茂的文章, 詳盡解釋所有步驟: , 。 因為本頁面的文字會隨著版本更新而更正, 所以建議以本頁面文字為主, 不清楚之處再輔以那兩篇的圖片, 應更容易上手。 又, 勤益科大朱孝國老師製作一份 簡報

首先請打開終端機, 變身成 root。 以 ubuntu 為例, 下 sudo bash 指令, 並打您自己的密碼。 若是 fedora, 可能是下 su 並打 root 的密碼; 不過請見上面關於 fedora 的問題。 然後取消 「自動掛載抽取式儲存裝置」 功能。 以 ubuntu 7.10 為例, 在「系統」「偏好設定」「抽取式儲存裝置」 底下, 把所有選項都取消掉。 若是 ubuntu 8.04, 則要用 ubuntu 身份 (而不是用 root 身份) 執行 gconf-editor 指令, 選進 apps/nautilus/preferences, 把 media_automount 和 media_automount_open 的勾清除掉。

假設您有一支 1GB 的 usb 碟, 且您想將 4.2.5 與 6.0.0 裝進去 (當然 ttylinux 是我們原本就會替您安裝的)。 太好了! Mk-boot-usb 內建的 grub 選單恰好已有適用於這兩片 Live CD 的選項, 所以這是最簡單的情況; 也因此建議初次使用者先拿這兩個版本測試。

那我們就留大約 60MB 給 DSL, 240MB 給 slax; 剩下大約 700MB 可用來儲存資料。

首先請確認這支 usb 碟 沒有插在電腦上。 接著將下載回來的檔案在根目錄下解壓縮, 並執行:

        cd /
tar xzf ~/mk-boot-usb-08g.tgz
mk-boot-usb

Mk-boot-usb 會請您 此時才插入 usb 碟。 然後請等幾秒鐘, 看見 usb 碟上的燈閃了幾下, 又停下來。 此時如果跳出檔案總管視窗, 則表示您先前忘記取消自動掛載 usb 碟的功能。 請按 ctrl-c 中斷, 詳讀本節最前面, 再重來一次。 如果沒有跳出檔案總管視窗, 您就可以按 Enter 繼續執行。 此時 mk-boot-usb 會比較您插入 usb 碟前後的 /dev/sd*, 看看到底那個裝置才是您要清空並安裝可開機 linux 的 usb 碟。

接著 mk-boot-usb 會把您的 usb 碟上的所有分割都看過一遍, 並列出每個分割上最近修改的五個檔案, 讓您確認這真的是即將清除的 usb 碟沒錯。 然後它會印出此 usb 碟的真實大小 (單位為 MB), 並要求您輸入一組以空格分開的數字, 這些數字的總和必須恰為印出的數字。 這是為了再次確認抓到正確的 usb 碟 (或至少抓到大小一模樣的 usb 碟 :-) )。 例如它秀出 968, 則您可敲入:

        668 60 240

在您同意繼續之後, 它會建立一個 vfat 的主分割區, 大小為 668MB, 用以安裝 grub 與 ttylinux; 又會建立兩個 ext2 的邏輯分割區, 大小分別為 60MB 與 240 MB。 (usb 碟速度太慢, 不適合用 ext3。)

如果您的系統裝有 qemu, 現在就可以下指令: qemu -usb /dev/sdy (當然 sdy 要依實際狀況改成別的名字)。 ttylinux 的登入帳號密碼都是 root。 恭喜您! 您已經有一顆可開機隨身碟。 當然 ttylinux 只有英文, 也沒有圖形界面, 沒什麼太多好玩的東西。 所以還要繼續照著下一節做。

其實您也可以用批次方式執行, mk-boot-usb 就不會一直問問題。 請見原始碼前幾頁, 關於命令列選項的註解。 這個使用模式很危險, 尤其是 -d 選項一定不可以弄錯, 不然後果不堪設想, 請小心使用!

把您自己挑選的 Live CD 裝到其他分割

如果您要安裝的是 DSL 4.2.5, 只需要把 Live CD 上的所有檔案目錄全部拷貝到 usb 碟的一個空的分割上, 並修改 usb 碟的主分割區裡面的 /boot/grub/menu.lst 設定檔。 Grub 的語法中, 第一個主分割區叫做 (hd0,0); 而第一個邏輯分割區叫做 (hd0,4)。 (為什麼是 hd0...? 因為以 usb 開機時, 它自己一定是系統認得的第一個裝置。) 除此之外, 不需要再改其他任何地方了。

Slax 6.0.0 的做法完全相同。 順便一提, slax 會把您操作過程當中所有的修改都寫入它所在分割的 /slax/changes 目錄當中。 試想: 這是一套將 400MB 左右內容塞入 200MB 空間的 Live CD 版 Linux; 而現在它卻若無其事地直接寫入 usb 碟, 完全沒有被它的 「唯讀出身」 所限制; 使用者完全不必做任何設定! Slax 真是帥呆了!

關於 *ububtu 系列的 Live CD 的提醒: (1) 根目錄下有一個隱藏目錄 /.disk 拷貝到可開機 usb 碟時別漏掉了! 感謝 misivic 的 提醒。 (2) 如果照著 的說明多做幾步 (直接跳到 'Creating the "casper-rw" File System' 那一節), 您也可以讓您這份來自 live CD 的 ubuntu 變成可讀寫的。 也就是說, 您可以在上面新增套件, 彷彿是在用一個安裝到硬碟的系統一樣! (3) 使用 qemu 測試 mk-boot-usb 所製作的 *ubuntu 系列 Live USB 時, 可以成功地帶到圖形介面一下子, 但最後掉入 busybox 命令列。 我在幾部實機測試 (包含 eeepc), 倒是可以正常開機。 真希望 Ubuntu 方面有人可以把 /casper/initrd.gz 修改一下, 至少可以加個 log 功能, 這樣它掉入 busybox 時, 至少比較容易做 bug report。 詳見

順便提到花蓮縣網所製作的 。 這是從原本正常安裝在桌機上的 ubuntu, 採用 處理, 改裝出來的中文教育版 Live DVD。 (也因此有上述 qemu 的問題) 因為我的聽眾多半是老師, 所以打算將來演講時就盡量裝這套, 也因此從 08d 版開始, 將它納入開機選單。 如果您喜歡 otg-linux, 但 mk-boot-usb 做出來的 usb 碟無法進入 otg-linux, 您也可改用他自己的可開機 usb 安裝程式: .

若您選擇安裝其他版本的 Live CD, 則還需要將光碟上原本的 isolinux (或 syslinux) 語法翻譯成 grub 的 menu.lst 語法。 請對照 DSL (或 slax) 的 grub 語法與 isolinux 語法, 作為翻譯的範例。

其實您也可以在 Windows 下進行光碟至隨身碟的拷貝, 只要安裝 或 就行了; 不過要讓 Microsoft Windows 在我的 linux 分割上毛手毛腳? 要是我, 可會格外謹慎。

把您正在使用的 Linux 系統安裝到 usb 碟上

Linux 新手請略過此節。

比方說您想將日常使用的 ubuntu 桌面裝到 usb 碟上。 首先, 您的 usb 碟必須夠大, 因為一般的 Live CD 都有壓縮過; 但若希望安裝完的系統可以自己再加裝套件, 則最簡單的方法就是不要壓縮, 通常總會用掉 2G 多, 因此建議要用 4G 的隨身碟。 其次, 用其他 linux 開機 (例如用一張 Live CD 或用您剛剛製作的 live usb 進入 slax) 並將您的 ubuntu 分割整個拷貝到 usb 碟的一個空的 ext2 分割。 (ext3 太慢) 相信走到這個地步, 您早已清楚如何修改隨身碟主要分割區的 /boot/grub/menu.lst。

剩下來的最重要修改都集中在標的分割區的 /etc/fstab 檔:

  1. 因為每次開機可能都在不同的電腦, 無法給一個固定的 /dev/sda5 之類的 device name, 所以應以 UUID 或 LABEL 的方式掛載根目錄
  2. 以 tmpfs 的方式掛載 /var 與 /tmp
  3. 移除其他大部分的內容
  4. 在所有 ext2 條目的 option 欄位加上 noatime

還遺漏了什麼嗎? 請大家補充囉!

複製可開機 USB 碟

* * * 開始之前, 容我提醒您: 要為他人複製可開機 USB 碟之前, 請先謹慎想清楚您自己的隱私資料! 請確認來源碟上沒有任何私密資料, 諸如即時通好友名單或個人帳號密碼等等。 "Information wants to be free", 資訊一旦釋出, 如覆水難收, 後悔都來不及。 * * *

如果您有數支一模一樣的隨身碟 (相同型號, 相同大小), 您可輕易地複製。 先用 mk-boot-usb 將其中一支製作成可開機 USB 碟。 比方說這支是 /dev/sdx, 而另一支空白的是 /dev/sdy, 則可用指令: dd < /dev/sdx > /dev/sdy 複製, 另一支也就變成一模一樣的可開機 USB 碟。

如果是不一樣的隨身碟呢? 我試著把兩支不同廠牌, 但同為 2GB 的隨身碟 對拷, 結果開機時 grub 只載一半, 印出 "grub ", 就當掉了。 如果您知道為什麼, 請指教, 謝謝!

沒關係, 從 08g 版開始, 您可以很輕鬆地複製不同廠牌型號的可開機隨身碟:

  1. 用裝有 mk-boot-usb 的隨身碟開機, 就叫它 W 吧。
  2. 執行 ls /dev/sd? 查看系統認到幾顆硬碟/隨身碟
  3. 插入另一顆預先製作好的可開機隨身碟 X。 請確認 X 本身也裝有 mk-boot-usb, 這樣用它複製出來的 Y 才可以再度去複製別人 :-)
  4. 等幾秒後 (通常 X 碟的燈會閃幾下) 再次執行 ls /dev/sd? 查看系統新看到的碟叫什麼名字? 例如叫做 /dev/sdx 這顆就是將被複製的來源碟。
  5. 執行 mk-boot-usb -s /dev/sdx 然後在它提示之後插入 [將被清空重灌的] 隨身碟 Y, 按 Enter 之後, 就開始複製程序。 您可以去喝杯咖啡運動個一二十分鐘, 順利的話, 回來時, Y 就變成 X 的複製品了 :-)

可否略過 W, 直接用 X 開機, 並把 X 複製到 Y 呢? 我用的是上面提到的 otg linux 來做這件事; 請記得它是用 tux2live 處理 ubuntu 製作出來的, 其中採用到 unionfs 技術。 我無法從程式當中掛載 X 的分割, 懷疑與 unionfs 有關。 (給 Linux 高手: 我很有興趣知道 slax 能否避開這個問題, 因為它不用 unionfs 而改用 aufs; 但我沒時間玩 slax) 沒關係, 只要在執行 mk-boot-usb 之前, 手動把 /dev/sdx 的所有分割預先掛載好, 一樣可以複製。 (從別的頁面被直接帶到此節的 Linux 新手: 可以請教身旁略懂 Linux 的朋友, mount 與 df 指令的用法與意義; 這個動作只要做一次; 複製第二顆, 第三顆, ... 就不必再重複這個動作了。)

補充說明:

  1. mk-boot-usb 會膽小地拒絕從大碟複製到小碟, 所以您不能將 2G 的碟複製到 1G 的碟。
  2. mk-boot-usb 可以將小碟複製到大碟, 多出來的空間就留給最前面的 vfat 資料分割。
  3. 但是如果目的地太大 (超過 32GB), mk-boot-usb 也會膽小地拒絕, 因為它怕不小心把機器內建的硬碟給毀了。
  4. 複製前請確認 X (來源碟) 的每個分割都不要太滿 (90% 以下), 因為 (1) 同樣號稱 2G, 隨身碟的大小還是有些微差異 (2) 即便 Y 比 X 大還是有風險: 因為對 Y 切分割的動作並不完全精確, 最後與 X 的各分割大小可能有些許差異。 如果 X 的某些分割太滿, 複製到 Y 時, 有可能會裝不下。

我朋友 chungyu 說我製造了一個電影 「駭客任務」 當中的史密斯先生。 我想 mk-boot-usb 和影集 「星鑑迷航記」 當中的 Borg 也蠻像的 :-) 還有在全民之間 (合法或非法) 傳染的 也很像。 不過 mk-boot-usb 和這三者最大的不同, 在於它將 「是否要複製」 的決定權留給每個人, 而不像這三者用暴力或欺騙將自己強迫加諸於受害者身上。 微軟用盡各種方法阻撓 linux 和其他自由軟體。 不過就像侏羅紀公園說的: 「生命會找到它的出路」 linux 跟生命一樣, 不只找到它的出路, 也會不停地繁衍 ;-) 請幫助它在微軟的荒漠帝國裡用力繁衍。

* * * 最後, 再提醒您一次:

讓 mk-boot-usb 幫您推廣自由軟體!

試想: 下次您舉辦 linux 安裝大會之類的活動時, 將不再需要請與會者攜帶笨重的大電腦來; 只需要請他們帶 usb 碟來就夠了! 如果他們急著想現場驗證的話, 才需要帶筆記電腦來測試。

其實它的應用也不限 linux 安裝大會這種電腦玩家的活動。 只要十分鐘, 就可以現場向非技術聽眾展示製作可開機隨身碟! 比方說吧, 下次您在任何數/理/化/美/音/工教育軟體的研習場合 (對象不是電腦老師, 而是想用電腦融入教學的各學科老師) 甚至是 「資訊科技與人權」 這類完全非技術的演講場合, 不妨要求主辦單位公告, 請聽眾自備空白隨身碟。 如果您運氣好, 現場還可以有一位不太害怕命令列的助教幫忙, 那您在演講時, 他就可以當場為每一位聽眾製作可開機隨身碟。 如果是研習場合 (每位學員有電腦可用) 只要在研習結束前, 花十五分鐘介紹如何設定 BIOS 以改用用隨身碟開機就 ok 了。 再進一步請聽眾記得: 下次購買電腦時, 要帶著這個 usb 去店家測試。 這有兩個效果: (1) 確認買到支援 linux 的硬體 (2) 讓店員開開眼界。 又, 建議順便把 或 也裝到隨身碟的第一主要分割區。

以後我的演講 :-) 這就是當初我寫 mk-boot-usb 的原始動機。 祝大家推廣快樂!

問題與討論?

呵呵我沒力正式維護一個計畫; 但歡迎大家提出指教。 請前往 部落格此篇 留言。


  • 本頁最新版網址: ; 您所看到的版本: June 10 2008 03:48:17.
  • 作者: 科技大學 系
  • , 請 , 多用背面, 丟棄時做垃圾分類。
  • 本文件以 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。
阅读(1477) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~