「百毒不侵救命碟」 可以讓你過著 電腦樂活 的生活。 不過隨身碟如果寫入頻率過高, 很容易衰老損毀。 在經過設定之後, 過去三個多星期我帶著 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/ 底下的檔案都只是提醒作用,
你必須找到自己系統內相對應的檔案, 模仿修改;
其他檔案則可以不去動它。
- 修改 grub 選單裡的開機選項, 加上
elevator=noop
這一小段 (請參考 reminder/menu.lst) - 修改 /etc/fstab , 加上以下幾句:
tmpfs /tmp tmpfs defaults 0 0 tmpfs /var/run tmpfs defaults 0 0 tmpfs /var/log tmpfs defaults 0 0
這些都是最常寫入的目錄, 所以把它們放在記憶體裡。 超重要! (請參考 reminder/fstab) - 找到每一位用戶的 firefox 設定檔 --
~/.mozilla/firefox/亂數.default/prefs.js
並且在裡面加上這一句:user_pref("browser.cache.disk.parent_directory", "/tmp/ckhung/firefox");
(請參考 reminder/prefs.js 並且請把 ckhung 改成你的帳號 id) 這個超重要! 幾年前我剛開始玩隨身碟開機時, 就是因為不懂得設定這個, 所以有好幾顆隨身碟死在 firefox 的 cache 手上 冏rz。 這個設定指定快取暫存檔放置的目錄。 注意: 如果是在多人共用電腦上, 這個設定會洩漏隱私! - 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。 這部分的所有檔案應該都不需要更改。 - /etc/polkit-1/localauthority/50-local.d/02-disable-hibernation.pkla 的作用是取消休眠功能 (我不確定有無效果)
重新開機之後, 請做兩個最重要的檢查:
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
ls -la .mozilla/firefox/*.default/Cache
應該看到空的目錄; 另一方面ls -la /tmp/你的帳號/firefox
應該看到很多目錄與檔案。
如果這兩個檢查的結果不符預期, 那麼你的隨身碟還是曝露在過度寫入的危險之中! 另一個次要的檢查是 /park 裡面的檔案。 使用電腦時, 那些檔案應該不會增減; 但每次重開機之後, 會有一些檔案更新、 變大。
最後, 壓縮檔裡面還附贈一個 /usr/sbin/mbu-uuid
指令。
因為複製新版的救命碟時, 需要多一個步驟...
複製 SimplyMepis 版的百毒不侵救命碟
想複製 SimplyMepis 版的百毒不侵救命碟, 要比以前 slax 版稍微麻煩一些, 因為現在採用的方式是將隨身碟視為硬碟直接安裝 linux, 而不是用特殊的唯讀方式掛載根目錄。 這造成兩個問題:
- 用來開機的那一個系統, 不能當做來源碟。
- 開機時系統必須自行找到正確的根目錄; 但隨身碟開機有一個問題: 每次在不同的機器上使用時, 分割名稱可能會改變 (sda5 或 sdb5 或 sdc5 ...)。
(1) 的處理方式是: 另外拿一顆來源碟;
(2) 的處理方式是使用 root=UUID=一串數字
來取代 root=/dev/sd??
。
但這樣一來, 複製完的隨身碟凡是提到 UUID 的部分,
也必須跟著更改 (因為每次重建檔案系統就會有一個新的 UUID)。
mbu-uuid 這支小程式的功用就是去查看隨身碟的幾個分割的 UUID 各是多少,
並且據此更正 grub 選單及 /etc/fstab 裡面提到 UUID 的地方。
(複製出來的隨身碟與母碟唯二不同的地方)
所以現在複製隨身碟的步驟變成:
- 用甲碟開機; 或者用舊版 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 開機, 繼續以下步驟...]
mk-boot-usb -b -v 1 -s /dev/sd乙 -d /dev/sd丙
把乙碟複製給丙碟。mbu-uuid /dev/sd丙
整修丙碟。
請用力為更多朋友製作開機隨身碟吧! (但要注意保護自己及他人的隱私, 記得別誤將自己平日使用的隨身碟複製給別人了) 史巴克與貴哥共同祝您的 Linux 開機隨身碟與記憶卡長命百歲, 多子多孫 -- live long and prosper!