Linux 開機隨身碟延年益壽妙方 & 複製 SimplyMepis 版救命碟

May your tux usb keys and sd cards live long and prosper! 「百毒不侵救命碟」 可以讓你過著 電腦樂活 的生活。 不過隨身碟如果寫入頻率過高, 很容易衰老損毀。 在經過設定之後, 過去三個多星期我帶著 Linux 開機隨身碟在國外生活, 開機六十多次共使用一百多個小時, 到目前為止都沒什麼問題。 (這帖的圖文也還是在這上面完成的。) 以下解釋如何讓您的 Linux 開機隨身碟也可以延年益壽; 主要參考 SSD optimizations on Linux 這篇文章。

救命碟原本採用的版本是 slax-cyut; 但是因為 slax 已經兩年沒有更新, 所以最近改用 SimplyMepis。 本文的實作環境是 mk-boot-usb 所製作的開機隨身碟上安裝的 SimplyMepis 11; 不過我猜大致上也適用於其他基於 debian 的版本。

首先請把你的隨身碟當做硬碟, 將 SimplyMepis 安裝進去。 我是在 8G 隨身碟上用 mk-boot-usb 分配 6G 給 SimplyMepis 用。 (好懷念 slax 的輕薄短小...) 然後下載 ssd-opt.tgz 並且到根目錄底下解壓縮: cd / ; tar xvzf ssd-opt.tgz。 這些檔案就是讓開機隨身碟延年益壽的妙方。 reminder/ 底下的檔案都只是提醒作用, 你必須找到自己系統內相對應的檔案, 模仿修改; 其他檔案則可以不去動它。

  1. 修改 grub 選單裡的開機選項, 加上 elevator=noop 這一小段 (請參考 reminder/menu.lst)
  2. 修改 /etc/fstab , 加上以下幾句:
            tmpfs /tmp tmpfs defaults 0 0
            tmpfs /var/run tmpfs defaults 0 0
            tmpfs /var/log tmpfs defaults 0 0
    
    這些都是最常寫入的目錄, 所以把它們放在記憶體裡。 超重要! (請參考 reminder/fstab)
  3. 找到每一位用戶的 firefox 設定檔 -- ~/.mozilla/firefox/亂數.default/prefs.js 並且在裡面加上這一句: user_pref("browser.cache.disk.parent_directory", "/tmp/ckhung/firefox"); (請參考 reminder/prefs.js 並且請把 ckhung 改成你的帳號 id) 這個超重要! 幾年前我剛開始玩隨身碟開機時, 就是因為不懂得設定這個, 所以有好幾顆隨身碟死在 firefox 的 cache 手上 冏rz。 這個設定指定快取暫存檔放置的目錄。 注意: 如果是在多人共用電腦上, 這個設定會洩漏隱私!
  4. park/ 子目錄搭配 etc/init.d/park-ssd 腳本, 作用是: 關機前把 (存放於記憶體裡面的) /var/log 拷貝回隨身碟上的 park/ 子目錄; 開機後又把隨身碟上的 log 檔拷貝到 (記憶體內的) /var/log 。 另外, etc/rc?.d/*park-ssd 這幾個捷徑, 是用 update-rc.d park-ssd defaults 自動產生出來的; 詳見 Making scripts run at boot time with Debian。 這部分的所有檔案應該都不需要更改。
  5. /etc/polkit-1/localauthority/50-local.d/02-disable-hibernation.pkla 的作用是取消休眠功能 (我不確定有無效果)

重新開機之後, 請做兩個最重要的檢查:

  1. df 指令的結果, 至少應該包含以下所有 tmpfs 的檔案系統:
            ckhung@z9100:~$ df
            檔案系統               1K-區段      已用     可用 已用% 掛載點
            ...
            tmpfs                   512208     10684    501524   3% /tmp
            tmpfs                   512208       384    511824   1% /var/run
            tmpfs                   512208     21944    490264   5% /var/log
    
  2. ls -la .mozilla/firefox/*.default/Cache 應該看到空的目錄; 另一方面 ls -la /tmp/你的帳號/firefox 應該看到很多目錄與檔案。

如果這兩個檢查的結果不符預期, 那麼你的隨身碟還是曝露在過度寫入的危險之中! 另一個次要的檢查是 /park 裡面的檔案。 使用電腦時, 那些檔案應該不會增減; 但每次重開機之後, 會有一些檔案更新、 變大。

最後, 壓縮檔裡面還附贈一個 /usr/sbin/mbu-uuid 指令。 因為複製新版的救命碟時, 需要多一個步驟...

複製 SimplyMepis 版的百毒不侵救命碟

想複製 SimplyMepis 版的百毒不侵救命碟, 要比以前 slax 版稍微麻煩一些, 因為現在採用的方式是將隨身碟視為硬碟直接安裝 linux, 而不是用特殊的唯讀方式掛載根目錄。 這造成兩個問題:

  1. 用來開機的那一個系統, 不能當做來源碟。
  2. 開機時系統必須自行找到正確的根目錄; 但隨身碟開機有一個問題: 每次在不同的機器上使用時, 分割名稱可能會改變 (sda5 或 sdb5 或 sdc5 ...)。

(1) 的處理方式是: 另外拿一顆來源碟; (2) 的處理方式是使用 root=UUID=一串數字 來取代 root=/dev/sd??。 但這樣一來, 複製完的隨身碟凡是提到 UUID 的部分, 也必須跟著更改 (因為每次重建檔案系統就會有一個新的 UUID)。 mbu-uuid 這支小程式的功用就是去查看隨身碟的幾個分割的 UUID 各是多少, 並且據此更正 grub 選單及 /etc/fstab 裡面提到 UUID 的地方。 (複製出來的隨身碟與母碟唯二不同的地方) 所以現在複製隨身碟的步驟變成:

  1. 用甲碟開機; 或者用舊版 slax 隨身碟/光碟開機也可以, 但要另外下載 mbu-uuid 並且放到 /usr/sbin 底下。 此外, 請確認你的甲碟的 grub 版本是 grub-legacy (因為貴哥所寫的 mk-boot-usb 還活在過去 orz) 這樣開機選單才會有圖形介面。 我自己製作第一顆 SimplyMepis 時, 先移除 grub 再安裝 grub-legacy。 [10/1 更新: 或者乙碟上除了 SimplyMepis 之外, 也安裝一套原始精簡的 slax 並加裝 mk-boot-usb 與 mbu-uuid, 那麼就可以省略甲碟, 直接從乙碟的 slax 開機, 繼續以下步驟...]
  2. mk-boot-usb -b -v 1 -s /dev/sd乙 -d /dev/sd丙 把乙碟複製給丙碟。
  3. mbu-uuid /dev/sd丙 整修丙碟。

請用力為更多朋友製作開機隨身碟吧! (但要注意保護自己及他人的隱私, 記得別誤將自己平日使用的隨身碟複製給別人了) 史巴克與貴哥共同祝您的 Linux 開機隨身碟與記憶卡長命百歲, 多子多孫 -- live long and prosper!