2012年9月15日 星期六

ezgoX 開機隨身碟減少寫入要領

2013/9/3 補充: 改推薦 antix。 (ezgo 還是比較適合裝在硬碟上。)

趕在替本學期的修課同學製作第一支救命碟之前, 成功地試出如何把 ( 教育意義遠超過 iPad 的...) ezgoX 製作成開機隨身碟了! 對於處理 /var/log 的熟手而言, 這篇的重點只有兩句話: 「開機時從隨身碟還原到記憶體」 的動作可以寄生在 bootlogd 裡面 (但 ezgox/kubuntu 12.04 預設並未開啟 bootlogd); 「關機時從記憶體寫入隨身碟」 的動作可以寄生在 umountfs 裡面。 以下列出完整的步驟。

  1. 把 ezgox 安裝到隨身碟上。 重開機。
  2. 做下一步之前, 先關掉 firefox。
  3. echo 'user_pref("browser.cache.disk.parent_directory", "/tmp/ckhung/firefox"); ' >> ~/.mozilla/firefox/*.default/prefs.js (以上是假設你的 ezgox 的用戶名稱取為 ossacc 而且假設你的 firefox 並沒有 使用多個 profiles -- 也就是說, 假設 .mozilla/firefox/ 底下 *.default/ 只有一個目錄。)
  4. 順便清掉舊的 Cache: rm -rf ~/.mozilla/firefox/*.default/Cache/*
  5. 編輯 /etc/fstab , 確認根目錄那一句的 options 當中要有 ,noatime,discard (逗點緊貼著前面, 不可有空格) 例如本來如果是 errors=remount-ro 就改成 errors=remount-ro,noatime,discard。 詳見 ext4 對固態硬碟的支援 noatime 的意義與效果。 (老實說, 我自己沒試過 discard 的效果, 因為我的救命碟還在用舊版 grub 0.97 搭配 ext2 。 但是少了 atime 的效果很明顯: 光是 find / ... 的指令, 就會讓 ezgo 關機前整個當住好久。)
  6. 在 /etc/fstab 裡面加上這幾句:
    tmpfs /tmp tmpfs defaults 0 0
    tmpfs /run tmpfs defaults 0 0
    tmpfs /var/cache tmpfs defaults 0 0
    tmpfs /var/tmp tmpfs defaults 0 0
    # tmpfs /var/log tmpfs defaults 0 0
    
  7. 建立備份用的目錄: mkdir -p /park/var/log
  8. 在 /etc/init.d/bootlogd 裡面搜尋 "start)" 並且在這句後面加上:
    cp -a /park/var/log/* /var/log/
    (echo -n "bootlogd start ; /var/log restored from /park/var/log " ; date) >> /root/log ;
    
  9. 在 /etc/init.d/umountfs 裡面搜尋 "stop)" 並且在這句後面加上:
    cp -a /var/log/* /park/var/log/
    (echo -n "umountfs stop ; /var/log saved to /park/var/log " ; date) >> /root/log ;
    
  10. 把 /etc/default/bootlogd 裡面的 BOOTLOGD_ENABLE=No 改成 BOOTLOGD_ENABLE=Yes
  11. 重新開機、 打開終端機、 打開 firefox。 檢查幾件事:
    • df 指令, 看看 /tmp 等等四個目錄是否已正確掛載為 tmpfs?
    • ~/.mozilla/firefox/*.default/Cache 裡面是不是空的?
    • 是不是有一個 /tmp/ckhung/firefox/Cache/ 目錄, 裡面有很多東西?
    • /root 底下是不是有一個 log 檔, 裡面至少記錄有剛才關機、 開機時刻各一列? 類似這樣:
      bootlogd start ; /var/log restored from /park/var/log Sat Sep 15 10:52:38 CST 2012
      umountfs stop ; /var/log saved to /park/var/log Sat Sep 15 10:55:00 CST 2012
      
  12. 如果以上皆是 -- 尤其是最後一項一定要正確 -- 就可以把 /etc/fstab 裡面的 /var/log 那一句打開 (去掉前面的 #)。
  13. 如果重開機沒有出現一堆錯誤訊息而且當得很慘, 那就恭喜你, 成功了! 再次下 df 時, 連 /var/log 也變成 tmpfs。
  14. 用別的 linux 開機、 掛載這顆隨身碟、 cd 到這顆 ezgox 碟的根目錄, 並下指令:
    du -s tmp run var/cache var/tmp var/log
    find tmp run var/cache var/tmp var/log -mmin -60
    
    前一句是查看各目錄用了多少空間。 後一句是查看有沒有最近 60 分鐘內修改過的檔案。 請配合你的狀況修改參數, 確認一下: 自從你把這些目錄掛在 tmpfs 之後, 這些目錄就再也不曾更新過。 如果一切 ok, 用 rm -rf tmp/* run/* var/cache/* var/tmp/* var/log/* 把這幾個目錄都清空。 (但目錄本身不能刪除! 否則等一下重開機就無法 mount -- 因為我曾經這樣死得很慘過。) 這可以省下不少空間。

安裝 apache2 之後, 可能無法順利啟動。 可能需要手動建立 /park/var/log/apache2/ 再重開機。

關於製作開機隨身碟如何避免過度寫入的詳細解說及相關連結, 請回顧 Linux 開機隨身碟延年益壽妙方 以及 SimplyMepis 11.9 救命碟 兩帖。

這學期的救命碟有 ezgox 當靠山, 就不必再自己寫 (永遠處於過時狀態的) 使用文件了, 超開心的!

[2012/12/20: 在 antix 上做類似的動作時有一些新的心得。 回頭更正一下這篇。 ]

  1. /var/cache 還是別去動它好了。 如果把它掛成 tmpfs, 開機變得好慢 orz
  2. 應該是 umountfs 才對; 不是 umountroot 。

沒有留言:

張貼留言