星期二, 3月 25, 2008

利用valgrind對用fuse所出的檔案系統進行memory leak除錯

如之前的文章說過,valgrind可以幫助程式設計者快速找出程式中會造成memory leak的部分。但是,如果你用fuse來進行user-level的檔案系統開發,並想利用valgrind來找出程式中memory leak的部分,馬上你就會發現一個問題,就是程式跑一下子後就會自動結束了。這時候你應該會看到螢幕上出現以下的錯誤訊息:

fuse: bad mount point `/mnt/storage': Transport endpoint is not connected

其實這不算是個錯誤,造成這個現象的主要原因是fuse的runtime librry會呼叫mount,進行檔案系統掛載的動作。但是因為mount這支程式本身是privileged program,必須要有root權限才可以執行此程式進行檔案系統掛載的動作,因此才會出現上面錯誤。

解決此問題最簡單的方式,就是將mount程式的setuid bit取消掉,也就是執行

chmod -s /bin/mount

如此一來,就可以使用valgrind來對用fuse所寫的檔案系統進行memory leak除錯的工作了。

當然,將mount的setuid bit取消掉會造成系統安全有疑慮。不過,也沒關係啦,只要記得在進行完debug的動作後,恢復mount程式的權限就可以了。

FUSE (Filesystem in Userspace)

這裡所指的FUSE是Filesystem in Userspace,可不是保險絲。
一般來說,檔案系統的開發是需要寫kernel-level module的,但是kernel-level programming比較困難,不容易debug,而且只要一不小心很可能會造成整個系統當機。FUSE則是用來解決這個問題的一個Linux kernel標準module。
FUSE是一套允許使用者自行建立在Linux上執行的檔案系統的開發套件,這個套件包含了kernel module以及系統相關的library。其中kernel module是用來與Linux kernel的VFS的介面銜接,VFS使得應用程式可以不需要理會所使用的檔案系統為何,就可以在各式各樣的檔案系統上進行檔案存取的動作,因為VFS會根據mount point資訊以及應用程式所要存取的路徑來決定應該將request轉到那個檔案系統模組進行處理。換句話說,有了FUSE的幫忙,我們就可以輕鬆的在user level進行檔案系統功能的開發,可以應用以往在user level 所學的工具以及programming資源來進行檔案系統的開發,實在是一個不錯的開發工具。

星期一, 3月 10, 2008

第一次覺得Sony的維修客服還不錯

自己的Sony VAIO SZ38電池一直怪怪的,問題超多的。
電池充滿後,放著不用一兩天後開機,發現電量只剩下一點點,用不到一個小時就沒電了。
每次充電電源都會顯示從0%一直慢慢增加至50%,然後神奇的事情就會發生。電池的容量就會在到達50%之後開始往下掉,漸漸地減少至0%。第一次發現這個狀況時還被嚇了一跳,以為是自己電源線沒接好差點就將自己辛辛苦苦寫的東西就這麼泡湯了。後來經過幾次的測試,發現雖然電池的電量往下掉,但是只要減少至0%,接下來就會顯示充電完成了,簡直舊式莫名其妙。

因為之前送修Sony的經驗不是很好,覺得不止服務態度不好,連問題都沒解決,還得跑好幾趟覺得很煩,所以這個現象拖延了很久一直都沒有去處理。後來在Mobile01的網站上面看到有網友在討論VAIO SZ系列的電池的問題,都是有關Sony SZ系列的電池設計不良導致電腦會找不到電池或是類似的問題,很多人說他們送修後運氣不錯,再加上還在保固期內,Sony都換一顆新的電池給他們。因此我也就抱著姑且一試的心裡將我的電池送修。
想不到,這次送修的感覺還不錯,不知道是不是被投訴多了,服務人員的態度比以前好多了,呵呵!
更想不到的是,經過幾天的等待,Sony竟然也換了一顆新的電池給我耶,或許是因為我還在保固期內,不過就是覺得很爽。再加上服務態度還不錯,總算是讓我對Sony恢復了一些好印象。

星期五, 3月 07, 2008

我復活了

我又復活了!!

已經好久沒有更新blog了,想想真是有點不好意思。
本來寫blog是希望透過書寫的方式,紀錄一下自己的一些讀書心得,順便可以幫助自己回覆記憶(呵呵,人老了總是會忘東忘西的)。可是,去年年中開始趕計畫進度之後就越來越懶了,懶到連email也都很少看了,怎麼可能會有功夫寫blog!

雖然這段時間曾經有想過要再開始寫寫blog,不管多寡,總是有寫比沒寫好。可是日子久了,就越來越覺得不好意思了,甚至曾經有個念頭想說乾脆放棄這個blog,再另起爐灶好了,反正我寫也沒幾個人看過我的blog,而且網路上孤兒blog到處都是,畢竟很多人對寫blog這玩意都只是跟流行,退燒了就再也不會造碰了。但是,又覺得自己不是一個會退縮的人,怎麼可以就這樣把辛苦經營的blog給放棄掉(呵!好像也沒寫幾篇阿!)。所以囉,還是決定繼續在原來的blog繼續努力,希望有一天可以像Mr. 6一樣,成為網路上人氣超旺的部落客。

嗯!為了慶祝這個重要的日子,就把今天訂為復活節吧!!哈哈!!