OnlyLog

just put something what I need. Forgive my poor English!

2009年11月18日 星期三

[轉貼] Fixing Poor MySQL Default Configuration Values

來源網址:http://jeremy.zawodny.com/blog/archives/011421.html
作者:Jeremy Zawodny
-----------------------------------------------------------------.

I've recently been accumulating some MySQL configuration variables that have defaults which have proven to be problematic in a high-volume production environment. The thing they all have in common is a network blip or two can trigger some very undesirable behavior.

max_connect_errors

If a client is having trouble connecting to MySQL, the server will give up waiting after connect_timeout seconds and increment the counter which tracks the number of connect errors it has seen for the host. Then, when that value reaches max_connect_errors, the client will be locked out until you issue a FLUSH HOSTS command. Worse yet, if you have occasionally network blips and never need to restart your MySQL boxes, these errors can accumulate over time and eventually cause you middle of the night pain.

See Host 'host name' is blocked in the MySQL docs. Sadly, there is no way to disable this check entirely. Setting the variable to 0 doesn't accomplish that. Your only real solutions are (a) setting it to a very high value (max_connect_errors=1844674407370954751), and (b) running an occasional FLUSH HOSTS command.

connect_timeout

This is related to the above problem. In situations of network congestion (either at the client or server), it's possible for an initial connection to take several seconds to complete. But the default value for connect_timeout is 5 seconds. When you trip over that, the max_connect_errors problem above kicks in.

To avert this, try setting connect_timeout to a value more like 15 or 20. And also consider making thread_cache_size a non-zero value. That will help in situations when the server occasionally gets a high number of new connections in a very short period of time.

skip-name-resolve

MySQL does a reverse DNS lookup on every incoming connection by default. This sucks. It seems that no matter how good your infrastructure is, there are blips in DNS service. MySQL's host cache exists to keep those lookups to a minimum. Yet I've seen this cause pain off and on for eight years now. I can only assume there's a bug in the host cache or the resolver library when this happens.

I recommend adding skip-name-resolve to your /etc/my.cnf to skip DNS entirely. Just use IP addresses or ranges for your GRANTs. It seems that slow replies from DNS servers can also help you to trip over connect_timeout as well. Imagine having 2 or 3 DNS servers configured but the first one is unavailable.

slave_net_timeout

When the network connection between a master and slave database is interrupted in a way that neither side can detect (like a firewall or routing change), you must wait until slave_net_timeout seconds have passed before the salve realizes that something is wrong. It'll then try to reconnect to the master and pick up where it left off. That's awesome.

However, the default value is 3600 seconds. That's a full hour! FAIL.

Who wants their slaves to sit idle for that long before checking to see if something might be wrong? I can't think of anyone who wants that.

My suggestion, if you're in a busy environment, is that you set that to something closer to 30 seconds.

2009年6月3日 星期三

Ubuntu 9.04 - 小問題詳解

Q: WinFF 轉換成 mp4 格式錯誤.
A: cmd~$> apt-cache search libavcodec-unstripped-52

Q: Firefox Flash 顯示中文時, 會變成很多的框框, 主要是字型問題 (引自).
A: 解決步驟

  1. vim /etc/fonts/conf.d/49-sansserif.conf
  2. 將所有 sans-serif 改成 sans serif
  3. 重開 Firefox 即可

2009年5月14日 星期四

UBUNTU 8.10 Java GUI 中文顯示不正常 - 出現方框

來源:流浪生死
來源網址:http://tw.myblog.yahoo.com/jw!9b0o7zqYEQTp3BKYq3oYpZO.gQ--/article?mid=942&prev=943&next=941
作者:ZERO
-----------------------------------------------------------------
因為最近重裝 Notebook ,
重新安裝 Sun JDK 6.0 , 搭配另一個使用Java 開發的軟體結果
發現Java GUI 程式有些中文字顯示不正常 , (只有某些中文字出現方框 , 不是全部出現方框)
但是直接使用gedit去看資料檔的內容又是對的 ,

所以就猜測是 JRE , JDK 的字型設定不正常 ;
測試之後果然如此 ,


解法:
開啟這個字型設定檔
sudo gedit /usr/lib/jvm/java-6-sun/jre/lib/fontconfig.properties


找到 這兩行

filename.-arphic-ar_pl_shanheisun_uni-medium-r-normal--*-*-*-*-p-*-iso10646-1=/usr/share/fonts/truetype/arphic/uming.ttf
filename.-arphic-ar_pl_uming_uni-medium-r-normal--*-*-*-*-p-*-iso10646-1=/usr/share/fonts/truetype/arphic/uming.ttf

(就是把 uming.ttf 改成 uming.ttc , 因為原先的設定是 uming.ttf , 但是我發現我的電腦上根本沒有這個檔案 , 只有 uming.ttc 就是這樣)
修改成
filename.-arphic-ar_pl_shanheisun_uni-medium-r-normal--*-*-*-*-p-*-iso10646-1=/usr/share/fonts/truetype/arphic/uming.ttc
filename.-arphic-ar_pl_uming_uni-medium-r-normal--*-*-*-*-p-*-iso10646-1=/usr/share/fonts/truetype/arphic/uming.ttc

然後存檔結束 ,

重新啟動我的 Java GUI 程式 , 中文顯示又回復正常了...

2009年2月9日 星期一

[轉貼] 在Linux 看HiHD

來源:Ubuntu 正體中文站 討論區
來源網址1:http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=12593&forum=22
來源網址2:http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=12701&forum=22&post_id=65373#forumpost65373
作者:gsir
----------------------------------------------------------------
第一步-找一張有支援的電視卡

一片電視卡要在Windows下工作, 一定要先安裝這一片電視卡的Windows驅動程式 (driver),而這一片電視卡的Windows驅動程式, 廠商也一定會提供給你, 但Linux驅動程式(Module)廠商則是基本上沒有。

所幸有一個LiuxTV project開發了一套電視卡驅動系統V4L-DVB, 只要安裝這一套電視卡驅動系統,很多電視卡都可以被成功驅動起來,而事實上現在的Linux的核心程式已含入了V4L-DVB, 只要是V4L-DVB有支援的電視卡, 想在Linux收看HiHD的第一步就會比較容易過關。

這個網址可以查到V4L-DVB最新的CRDLIST, 依電視卡使用的晶片有多組的 CARDLIST。

http://linuxtv.org/hg/v4l-dvb/file/bfdb85b864ee/linux/Documentation/video4linux/

我有整理出幾張國內廠商製造銷售的DVB-T電視卡,給大家參考一下:

CARDLIST.cx23885

12 -> Leadtek Winfast PxDVR3200 H
13 -> Compro VideoMate E650F

CARDLIST.saa7134

70 -> Compro Videomate DVB-T300
71 -> Compro Videomate DVB-T200
137 -> AVerMedia Hybrid TV/Radio (A16D) 圓剛三頻電視卡A Power, 圓剛三頻電視卡
136 -> AVerMedia Cardbus TV/Radio (E506R) 圓剛三頻Cardbus電視卡
139 -> Compro VideoMate T750

CARDLIST.cx88
35 -> WinFast DTV1000-T


另外國內也找到廠商附有 Linux 驅動程式的產品:

1.圓剛 Volar數位棒 A808 (support kernel 2.6.25)
2.圓剛 Volar三頻電視棒 A828 (support kernel 2.6.27)
3.華碩 My Cinema-U3000Mini

-----------------------------------------------------------------------

對於V4L-DVB有支援的電視卡, 原則上在Linux (2.6.x kernel)一開機. 應該就會自動偵測到並且也會自動載入適用該張電視卡的驅動程式, 但也有可能因為一些硬體相容性或是驅動程式本身的bug 而造成有支援的電視卡還是不能work,下列的測試步驟可供大家參考一下:

1.用google搜尋盡可能查出電視卡使用的晶片與tuner的產品型號。
2.開完機後, 先用lsmod指令檢查電視卡的驅動程式是否有自動載入, 驅動程式的名稱是與電視卡的晶片型號有關。

lsmod

3. 電視卡的驅動程式有被載入, 還不能完全表示電視卡可以正確工作, 必須再進一步檢查/dev/dvb/ 與 /dev/dvb/adapter0這二個目錄否有被自動建立?

ls -l /dev/dvb/

4.最後一個檢查是掃描找出節目頻道, 能夠找出節目頻道出來, 那應該就OK 了。

掃描節目頻道需要安裝一套 dvb-utils , 安裝與掃描指令如下:

sudo apt-get install dvb-utils
scan /usr/share/doc/dvb-utils/examples/scan/dvb-t/tw-Taipei

tw-taipei 預先包含了幾家國內無線數位電視台的頻道參數, 沒有HiHD頻道, 其他頻道也有小錯誤, 可以用文字編輯器修正一下。

gedit /usr/share/doc/dvb-utils/examples/scan/dvb-t/tw-Taipei


正確的收視頻率表, 包含了HiHD,HiHD 目前收視範圍為宜蘭-桃園,嘉義-屏東.

T 533000000 6MHz 2/3 AUTO QAM16 8k 1/4 NONE
T 545000000 6MHz 2/3 AUTO QAM16 8k 1/4 NONE
T 557000000 6MHz 2/3 AUTO QAM16 8k 1/4 NONE
T 569000000 6MHz 2/3 AUTO QAM64 8k 1/4 NONE
T 581000000 6MHz 2/3 AUTO QAM16 8k 1/4 NONE
T 593000000 6MHz 2/3 AUTO QAM16 8k 1/4 NONE


掃描可以過關,想在Linux下看HiHD的第一步也就過關了。

假如過不了關, 那麼也只好開始磨練自己google搜尋能力或是碰碰運氣了。

如果你已經十分確定你的電視卡是有被列入 V4l-DVB的cardlist裡面, 那麼手動加入一個options, 有很大的機會就可以過關了。

如 我有一片compro T300已經十分確定在 V4l-DVB cardlist的編號是70, tuner編號則是67, 在ubuntu 8.10 一開機後, 用lsmod查有載入saa7134驅動程式, 但/dev/dvb/ 目錄沒有產生, 後來用dmesg 查, 發現根本辦識錯誤,所以在我輸入下列指令加入正確參數後, Compro T300就可以正常work了。

cd /etc/modprobe.d
sudo gedit options

新增一行

option saa7134 card=70 tuner=67

或者也可以

sudo gedit alsa-base

將insert saa7134 那一行的 $CMDLINE_OPTS 變更為 code=70 tuner=67

------------------------------------------------------------------

增加二支有成功案例的DVB-T電視棒

《圓剛Volar X 數位棒 A815》

(Ubuntu 8.10)
http://linuxpractico.wordpress.com/2008/12/20/instalar-avertv-volar-x-dvb-t-tdt-en-ubuntu-810/

需要先執行下列程序:

sudo apt-get install mercurial linux-headers-$(uname -r) build-essential subversion gcc make
wget http://www.otit.fi/~crope/v4l-dvb/af9015/af9015_firmware_cutter/firmware_files/4.95.0/dvb-usb-af9015.fw
sudo cp dvb-usb-af9015.fw /lib/firmware/
hg clone http://linuxtv.org/hg/~anttip/af9015
cd af9015

make
sudo make install


《技嘉 U7000 USB》

(Ubuntu 8.04)
http://waterwave.ch/weblog/detail.php?id=324130

需要新編譯 v4l-dvb

sudo apt-get install mercurial linux-headers-$(uname -r) build-essential
hg clone http://linuxtv.org/hg/v4l-dvb
cd v4l-dvb
sudo make
sudo make install

---------------------------------------------------------------

V4L-DVB的電視卡驅動程式雖然是相同晶片共用同一個驅動程式, 但程式裡面還是需要依照不同的電視卡產品來設定不同的參數值, 這也就是為什麼同樣使用saa7134驅動程式, 在cardlist 裡面不同電視卡也都個別擁有一個編號, 不在 cardlist 裡面的電視卡, 只能試運氣, 不保證可以相容, 我一片compro E800, 不在cardlist裡面, 同樣公司的compro E650F在cardlist裡面有編號, 晶片與 tuner 型號也都一樣, 但就是無法相容。

裝電視棒有可能會比電視卡更容易, 因為V4L-DVB的USB電視棒驅動程式只認電視棒的一棵整合晶片,不分廠牌產品, 只要知道usb電視棒用了那一個整合晶片, 就可以搞定了, v4l-dvb 的程式做法是需要那一棵整合晶片的firmware file, firmware file 因為版權問題並沒有與驅動程式包附一起,有些可以到http://www.linuxtv.org/download/firmware/下載, 有些則需要到特別網站下載, firmware file的檔案名稱因為已經固定寫入驅動程式裡面, 所以一定要先查清楚, 不同整合晶片在V4L-DVB驅動程式裡面指定的Firmware 檔名是什麼 ? 建議將最新版的V4L-DVB Source下載回來自己重新編譯一次, 然後再找到正確的Firmware檔名,以便到網路下載Firmware File。

這是下載最新版V4L-DVB Source與編譯指令:

hg clone http://linuxtv.org/hg/v4l-dvb
cd v4l-dvb
make
sudo make install


看firmware file 檔名的地方


v4l-dvb/linux/dirvers/media/dvb/dvb-usb/*.c


下表是我查到資料, 提供給大家參考

整合晶片 :af9015
firmware File:dvb-usb-af9015.fw
下載指令 :

wget http://www.otit.fi/~crope/v4l-dvb/af9015/af9015_firmware_cutter/firmware_files/4.95.0/dvb-usb-af9015.fw


國內使用產品 :

【Winfast DTV Dongle Gold】
【AVerMedia Volar-X (A815)】

整合晶片 :dib0700
Firmware File:dvb-usb-dib0700-1.20.fw
下載指令 : 下載是更新版, 需要更名正確的檔名。

wget http://www.wi-bw.tfh-wildau.de/~pboettch/home/linux-dvb-firmware/dvb-usb-dib0700-03-pre1.fw
cp dvb-usb-dib0700-03-pre1.fw dvb-usb-dib0700-1.20.fw

國內使用產品 :

【AVerTV DVB-T Volar (A808)】
【Asus My Cinema U3000】
【Asus My Cinema U3100 mini】
【技嘉 U700】


下載回來的Firmware File 要固定放在 /lib/firmware/ 目錄, 然後 reboot, 理論上Firmware 抓對電視棒就可以work了,自己沒有那麼多產品可以一一測試, 有電視棒的網友, 試了如果有效, 就分享給大家吧!

-------------------------------------------------------------

有親自在Ubuntu 8.10下實測的幾片電視卡棒

(一) 圓剛Volar X 數位棒 A815 (OK)
過關, 在Ubuntu 8.10 只要下載 af9015 晶片的Firmware , cp 到 /lib/firmware , Reboot後 scan 就掃到HiHD頻道了.

wget http://www.otit.fi/~crope/v4l-dvb/af9015/af9015_firmware_cutter/firmware_files/4.95.0/dvb-usb-af9015.fw
sudo cp dvb-usb-af9015.fw /lib/firmware/

http://www.avermedia.com/avertv/tw/Product/ProductDetail.aspx?Id=39



(二) 康博 T300 (OK)
在Ubuntu 8.10 並沒有自動抓到正確參數, 但只要在 /etc/modprobe.d/options 檔案末尾增加一行
options saa7134 card=70 tuner=67
然後 reboot 就正常可以工作了, but , 這一片卡康博已經停產了.

(三) 圓剛三頻電視卡A Power A16D

沒有過關。
這 一片應該是可以過關, 因為已經被編入V4l-DVB 的cardlist ( card=137 ), 但開機後, 沒有work, /dev/dvb/ 裝置沒有自動產生, 用 dmesg 查有一個「xc3028-v27.fw file not found」錯誤訊息 , google 一下, 得知是因為版權問題, 必須自行產生Xceive xc2028/xc3028 tuner的Firmware
產生 Firmware 的指令也打了, reboot 後, /dev/dvb/ 有了, dmesg 也沒有甚麼錯誤訊息, 但就是Scan 不到任何一台無線數位台, 我在二台電腦測試, 都是一樣,沒有什麼錯誤訊息, 但在Ubuntu 就是不work , 要被列為不過關產品了, 希望未來可以知道有人是可以搞定的.

自行產生Xceive xc2028/xc3028 tuner Firmware的指令 :

wget http://www.steventoth.net/linux/xc5000/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip
unzip -j HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip Driver85/hcw85bda.sys
perl extract_xc3028.pl
cp xc3028-v27.fw /lib/firmware

http://www.avermedia.com/avertv/tw/Product/ProductDetail.aspx?Id=25



(四)圓剛三頻電視棒-HX A827
沒有過關, 網路上也沒找到可以過關的解法。
http://www.avermedia.com/avertv/tw/Product/ProductDetail.aspx?Id=293



(五)圓剛Volar數位棒 A815

這一隻外表與Avermedia 有附Linux驅動程式 A808 一模一樣, 編號也與確定可以過關的圓剛Volar X 數位棒一樣, 但大家要注意,沒有過關, 網路上也沒找到可以過關的解法.

http://www.avermedia.com/avertv/tw/Product/ProductDetail.aspx?Id=448



(六)康博 E800

與 E650F 使用晶片一樣, 但E650F 有列入V4L-DVB 支援的Cardlist , E800 沒有被列入。

使用同樣參數也是不能過關,網路上也沒找到可以過關的解法.

http://www.comprousa.com/tw/product/e800/e800.html

----------------------------------------------------------------

第二步 - 選擇VLC

在Linux看HiHD的第一步 -找一張有支援的電視卡/棒
請到這理

電視卡/棒搞定後, 接著就是要有一套可以收看HiHD的軟體, 然而在Linux看HiHD會遇到的問題也是與Windows一樣 :


1.需要雙核心以上CPU或有H.264硬解的顯示卡。


以我實測經驗來說,同樣版本的VLC, 同樣CPU等級 Core2 E6300, 在Windows可以平順播放HiHD, 但在Ubuntu 8.10還不行, 需要升級到core 2 E7300才能平順播放, 也就是說, 我的實測經驗告訴我在Linux看HiHD, CPU 等級的要求會比Windows看HiHD還要高。

有硬解的顯示卡是可以降低CPU等級的要求, 但光有硬解的顯示卡, 驅動程式與看HiHD的軟體也是需要相對支援, 否則一樣還要回來依靠CPU。

H.264 硬解在Windows, ATI與nvidia都有提供驅動程式 ,Linux 則只有nvidia提供硬解驅動程式, 且還是最近發行的180.x 版本才開始支援硬解。

軟體方面在Windows是播放器使用Cyberlink H.264/AVC Decoder就有硬解或是Totalmedia使用自家的Arcsoft Video Decoderu也會有硬解提供,但在 Linux 目前ffmpeg,mplayer,xine,smplayer正陸續加入支援nVidia 180.x 的vdpau硬解功能, 預期需要經過一段時間才會達到穩定使用。


2.需要有能夠將 H.264 + HE-AAC 的 HiHD 串流正確解析出來的TS分離器。


H.264 或是 HE-AAC 的解碼器在linux都有, 但能夠正常將H.264 + HE-AAC 的HiHD串流分離給解碼器, 影音能夠同步播放, 目前我的實測經驗卻只有VLC唯一可以做到,mplayer 我遇到很嚴重的影音不同步問題到目前還沒有解,xine播放HiHD頻道有影像無聲音,這些應該都是demux的問題。


3.需要有正常品質的H.264解碼功能。


解 HiHD H.264影像, 硬體引擎不夠力會造成影像無法平順播放, 走走停停, 但有一些影像品質的問題應該是屬於軟體本身造成的,如移動影像邊緣出現塊狀馬賽克, 或是影音不同步, 有影無音。

以我目前的實測經驗來說在Ubuntu 8.10 的vlc 0.9.4 或是更新到 0.9.8a,甚至是還沒有正式發行的1.0.0-git都存在一個H.264的解碼瑕疵, 在高速移動影像的邊緣會出現馬賽克。

綜合以上三點需要,對我來說,目前可以在Ubuntu 8.10收看HiHD頻道的軟體似乎就只有一個選擇 VLC。

使用Ubuntu 8.10的套件管理程式可以直接安裝Vlc 0.8.4,或是到這裡 http://nightlies.videolan.org/ 依指示將一個套件庫的位置加入到 Ubuntu 8.10 的軟體來源sources.list, 就可以自動安裝到還沒有正式發行的 1.0.0-git 版。

加入方法在【系統】->【軟體來源】->【第三方軟體】按加入, 然後在【APT套件庫位置】欄位裡面輸入進去,習慣用終端機者, 就下達 :

sudo gedit /etc/apt/sources.list 把上述網站所提供的套件庫位置加到最後一行。

i386 使用的套件庫位置

deb http://nightlies.videolan.org/build/intrepid-i386/arch ./
AMD64 使用的套件庫位置

deb http://nightlies.videolan.org/build/intrepid-amd64/arch ./

如 果不能滿足, 那就要繼續玩起自行編譯了, 但因為在ubuntu 8.10已經可以自動安裝到vlc開發中版本1.0.0-git,所以如果真的要玩起自行編譯, 建議能把最新版的ffmpeg 也一起編譯進來, 這樣或許有可能可以改善vlc的H.264解碼品質問題, 目前VLC雖然是唯一可以收看HiHD的軟體, 但H.264 的解碼效果有瑕疵, 移動影像的邊緣有馬賽克, 有試過使用ffmpeg附的一支play 小程式播放錄自HiHD的TS檔,H.264解碼效果比VLC好, 可惜是HE-AAC聲音沒有出來。

自行編譯最新版VLC + 最新版ffmpeg,試過, 編譯過關, 沒有錯誤訊息, 但播放解碼則是亂七八糟, 需要再多練功與更多空閒時間,如果有高手成功過關, 也真的改善了VLC的H.264解碼品質, 請一定要分享, 否則, 在Linux看 HiHD 這一條路有可能會是一條寂靜與遙遠的路。

--------------------------------------------------------------

在 Ubuntu 8.10 使用開發中的 vlc 原始程式 ( version 1.0.0-git 1/17) + FFmpeg (version SVN-r16654)編譯成功, 也很幸運, vlc 原有的H.264解碼瑕疵(移動影像邊緣會出塊狀馬賽克)也跟著完全消失了, 目前在Ubuntu 8.10 使用Vlc收看 HiHD的影像品質已經等同於VLC 0.9.8a Windows version , 也等同於 Windows DVBviewer 掛 Fddshow Video Decoder ( VLC , Fddshow 都是使用ffmpeg 的解碼程式庫 ), 在Linux 看 HiHD 已有 80分的接受度, 比不過在Windows 掛 cyberLink H.264/avc decoder, Arcsoft Video Decoder 與 coreAvc video Decoder, 但能夠在Linux 收看HiHD , 對我來說, 意義更非凡.

把編譯過程提供給大家參考, 很期待有其他網友的經驗心得發表 :

先安裝一些下載原始程式的工具程式及aac,mp3與ac3 音訊解碼程式庫
sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaad-dev libfaac-dev libmp3lame-dev libtheora-dev liba52-0.7.4-dev

下載編譯 vlc所需要的程式庫
sudo apt-get build-dep vlc

刪除上一行指令自動下載的幾個ffmpeg程式庫, 這幾個ffmpeg程式庫版本都很舊了, 要先刪除, 否則等一下編譯完成的新版程式庫會無法安裝.
sudo apt-get purge libavcodec-dev libavcodec51 libavformat-dev libavformat52 libavutil-dev libavutil49 libpostproc-dev libpostproc51 libswscale-dev libswscale0

下載編譯 ffmpeg所需要的程式庫
sudo apt-get build-dep ffmpeg

下載新版ffmpeg 的原始程式
svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

配置ffmpeg編譯選項

cd ffmpeg
./configure --enable-gpl --enable-swscale --enable-x11grab --prefix=/usr --enable-libtheora --enable-libvorbis --enable-pthreads --enable-libfaad --enable-libfaadbin --enable-libdc1394 --enable-shared --disable-static --enable-postproc

開始編譯
sudo make


將編譯完成的ffmpeg 程式庫掛入Ubuntu系統
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg --pkgversion "3:0.svn`date +%Y%m%d`-12ubuntu3"
sudo ldconfig


下載VLC media player nightly builds 原始程式, 我編譯時期是1/17 , 所以就選擇1/17的原始程式下載.
http://nightlies.videolan.org/build/source/?C=M;O=D

配置vlc編譯選項, 我是直接使用 Vlc 執行版的選項作為我編譯vlc的選項, 因為這樣對我來說是最安全的.
cd vlc-1.0.0-git
./configure '--build=i486-linux-gnu' '--enable-maintaner-mode' '--enable-release' '--prefix=/usr' '--enable-libtool' '--enable-fast-install' '--with-binary-version=1ubuntu3' '--disable-update-check' '--disable-gnome' '--disable-gtk' '--disable-familiar' '--disable-fb' '--enable-ggi' '--enable-sdl' '--enable-esd' '--enable-mad' '--enable-arts' '--enable-jack' '--enable-pulse' '--enable-lirc' '--enable-a52' '--enable-aa' '--enable-dvbpsi' '--enable-mozilla' '--with-mozilla-pkg=libxul-plugin' '--disable-kde' '--enable-mp4' '--enable-dvb' '--disable-satellite' '--enable-ogg' '--enable-vorbis' '--enable-shout' '--enable-qt4' '--disable-slp' '--enable-flac' '--disable-skins' '--disable-basic-skins' '--enable-skins2' '--enable-freetype' '--enable-mkv' '--enable-speex' '--enable-caca' '--enable-live555' '--enable-libmpeg2' '--enable-fribidi' '--enable-cdio' '--enable-mod' '--enable-theora' '--enable-modplug' '--enable-dvdnav' '--enable-gnutls' '--enable-ffmpeg' '--enable-ncurses' '--enable-smb' '--disable-gnomevfs' '--enable-bonjour' '--enable-mpc' '--enable-vcd' '--enable-vcdx' '--enable-notify' '--enable-twolame' '--enable-x264' '--enable-faad' '--disable-zvbi' '--enable-telx' '--enable-mediacontrol-bindings' '--disable-atmo' '--enable-taglib' '--enable-libass' '--enable-libdca' '--enable-alsa' '--enable-dv' '--enable-v4l' '--enable-v4l2' '--enable-pvr' '--enable-svgalib' '--enable-dvd' '--without-dvdcss' 'build_alias=i486-linux-gnu' 'CFLAGS=-g -O2' 'LDFLAGS=-Wl,--as-needed' 'CPPFLAGS=' 'CXXFLAGS=-g -O2'

開始編譯然後安裝, vlc 會被安裝於 /usr/bin 目錄下, Ubuntu 應用程式的影音目錄應該就有vlc了.
sudo make
sudo make install

------------------------------------------------------------------

第一張圖, 仔細看水流那一部分, 很明顯有許多塊狀馬賽克, 這是vlc 0.9.4 (Ubuntu 8.10預設安裝的版本),或是自行編譯最新發展版vlc.1.0.0-git , 都一樣有這個在流動影像邊緣出現塊狀馬賽克的瑕疵, 不是cpu引擎力量所造成的, 在windows的vlc舊版( 現在release 版是 0.9.8a) 或是同樣使用ffmpeg解碼程式庫的fddshow video decoder舊版一樣出現這種瑕疵, 目前windows新版本都已經獲得改善, 然而 ubuntu 8.10 恐怕就需要自行改善.

改善的關鍵其實不在於vlc 的版本更新, 而在於ffmpeg 這幾個 LIB (Libavutil,libavcodec,libavformat,libswscale,libpostproc)的版本更新,編譯vlc 需要ffmpeg 這幾個 lib, Ubuntu 8.10 的ffmpeg lib 版本太舊, 必須先下載新版ffmpeg source 來編譯產生新的 lib , 再來編譯 vlc 才能改善H.264的解碼瑕疵.

ffmpeg 必須先編譯, 才來編譯vlc , 因為重點是需要使用最新的ffmpeg lib 來改善vlc 的H.264解碼瑕疵 ( 也可以說是舊版ffmpeg的H.264解碼瑕疵).
但 因為透過 ubuntu 8.10 安裝的vlc 0.9.4套件已經包含了舊版本的ffmpeg lib , 所以在編譯新版ffmpeg 前, 一定要先手動去刪除舊版的ffmpeg lib , 如此才能將ffmpeg lib 換版成功, 而ffmpeg lib換了新版, 編譯新產生的 vlc 也才能消除用vlc看HiHD時流動影像邊緣出現塊狀馬賽克的H.264解碼瑕疵.

用ubuntu 8.10 自動安裝的vlc 0.9.4 , 水流處有明顯塊狀馬賽克.


自行編譯vlc 1.0.0-git + ffmpeg lib (version svn-r16654), 水流處的塊狀馬賽克已經消除.

----------------------------------------------------------------

如果收看HiHD有一點不平順, 在[編好設定]->勾選所有的選項->[輸入/編碼器]->[其他編碼器]-[ffmpeg]->Skip the loop filter for H.264 decoding 設定為「所有的」


如果收看HiHD有交錯條紋現象,可以選擇vlc 的去交錯功能改善, 去交錯的方式有多種可以選擇, 挑選自己滿意的, 預設值是關閉去交錯功能,我的經驗, 收看HiHD一定要打開去交錯功能, 否則交錯條紋蠻明顯的, 除非你都是用全螢幕才正常.
vlc 的去交錯功能, 需要設定二個地方
(1) [偏好設定]->開啟所有的選項->[視訊]->[濾波器]->[視訊輸出濾波模組]->勾選Deinterlacing video filter


(2) [偏好設定]->開啟所有的選項->[視訊]->[濾波器]->[去交錯]->選擇一種自己中意的去交錯模式.

---------------------------------------------------------------------------

在vlc 收看 HiHD 有二個操作方法 :
1. 建立一個檔名為channels.conf的文字檔, 後後把下面17行文字內容複製貼到文字檔案裡面, 當要收看HiHD時, 用vlc 開啟 channels.conf , 17個頻道就會顯示在vlc的播放清單, 並會自動開始播放第一列的中視頻道, 如果
希望一開啟channels.conf 就自動播放 HiHD , 就把Hi_HD那一列搬到channels.conf 的第一個頻道.

中 視:533000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_AUTO:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:1001:1002:100
中 視-新聞 台:533000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_AUTO:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:1011:1012:101
中 視-綜藝 台:533000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_AUTO:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:1021:1022:102
公 視:545000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:2011:2012:201
DiMoTV:545000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:2021:2022:202
HakkaTV:545000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:2031:2032:203
民 視:557000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:3001:3002:300
民 視交通 台:557000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:3011:3012:301
民 視新聞台 News:557000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:3021:3022:302
Hi_HD:569000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:0:0:200
台 視:581000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:4001:4002:400
台 視財經 台:581000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:4011:4012:401
台 視健康娛樂 台:581000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:4021:4022:402
台 視廣播 台:581000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:0:4042:404
華 視:593000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:5011:5012:501
華 視教育 台:593000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:5021:5022:502
華 視休閒 台:593000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:5031:5032:503



2. 進入vlc , 「媒體」->「開啟擷取裝置」 擷取模式選擇 dvb , 介面卡選擇 /dev/dvb/adapter0 (第一片電視卡) , DVB類型選擇 DVB-T
Transponder/multiplex frequency 輸入電視頻道頻率, 如HiHD頻道是 569000000, Transponder symbol rate 輸入 8kHz , 另外一個bandwidth 對收看台灣無線數位台
是相當重要的, 但沒有輸入欄位, 因此必須自行溝選 [show more options], 然後在自訂化欄位補一個參數 :dvb-bandwidth=6 , 才能成功開啟HiHD頻道.


---------------------------------------------------------------------

另外補充一個說明, 如果要將HiHD 串流輸出到一個檔案,也就是將 HiHD錄影下來, 用 vlc 的GUI操作會不成功, 必須用command line 直接下指令啟動vlc 把 HiHD 串流輸出到目的檔案.

vlc --ttl 1 dvb:// --dvb-frequency=569000000 --dvb-bandwidth=6 :sout=#duplicate{dst="std{access=\"file\",mux=\"ts\",dst=\"目的檔名\"}"}

2009年2月2日 星期一

[修正][轉貼] 設定Linux核心網路安全參數

來源網址:http://www.friendschat.idv.tw/xoops/modules/smartsection/item.php?itemid=15
來源:遊手好閒 巴男的部落格

ps. 裏面有幾個地方有問題, 已修正
--------------------------------------------------------------------

◎忽略發送至廣播位置的PING封包有些惡意者會假造來源IP然後發送PING封包發送至廣播位址,區域網路所有主機收到後會將PING封包回應至假造的來源IP,如此將導致該來源IP的主機瞬間收到龐大的流量。

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcast
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

◎忽略有問題的ICMP封包啟動針對無效錯誤訊息的防禦

echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

◎阻擋來源路由封包不要接受來源路由 (source route) 的封包。攻擊者可以使用源頭路由來產生假裝本來就在您內部網路產生的封包,不過將會從他來的路徑路由回去,所以攻擊者可以危害您的網路。源頭路由很少在正當的狀況下被使用

echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

◎阻擋ICMP Redirect封包 ICMP Redirect封包是路由器用來通知主機更改路由表的工具,所以惡意者可能使用此功能修改路由表,為了安全起見,最好忽略此封包

echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

◎禁止主機送出ICMP Redirect封包剛剛提到阻擋從外面到內的ICMP Redirect封包,萬一那天被入侵了你的主機也有可能被人當做入侵別人的工具,所以要禁止ICMP Redirect封包從你的主機送出

echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects

◎開啟核心的逆向路徑過濾功能啟動反轉路徑過濾。這可以幫助確認封包來自合法的源頭,經由自動捨棄那些網路位置不符合應該進入的網路介面的封包。這有安全上的優點因為它防止 IP 偽造 (IP spoofing)。
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

◎ 使用SYN cookies 功能防止SYN Flood 攻擊 SYN Flood是當前最流行的DoS(拒絕服務攻擊)與DDoS(分散式拒絕服務攻擊)的方式之一,這是一種利用TCP協議缺陷,發送大量偽造的TCP連接請 求,從而使得被攻擊方資源耗盡(CPU滿負荷或記憶體不足)的攻擊方式。所以必須要開啟SYN cookies 功能,以避免受到SYN Flood攻擊

echo "1" > /proc/sys/net/ipv4/tcp_syncookies

◎縮短TCP連線的重試次數與逾時時間縮短TCP連線的重試次數與逾時時間,以減少DoS的危害


echo "3" > /proc/sys/net/ipv4/tcp_retriesl
echo "3" > /proc/sys/net/ipv4/tcp_retries1
echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
echo "2400" > /proc/sys/net/ipv4/tcp_keepalive_time
echo "0" > /proc/sys/net/ipv4/tcp_windows_scaling
echo "0" > /proc/sys/net/ipv4/tcp_window_scaling
echo "0" > /proc/sys/net/ipv4/tcp_sack
echo "0" > /proc/sys/net/ipv4/tcp_timestamps

2009年1月26日 星期一

[轉貼] HOWTO : Performance tuning

來源網址:http://samiux.wordpress.com/2008/06/12/performance-tunning/

來源:Samiux’s Blog

-------------------------------------------------------------------

Ubuntu is fast out of the box. However, we can make it more faster.

Step 1 :
Add the following lines to /etc/sysctl.conf if you have 512MB RAM or more :

kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# If you have more than 512MB RAM, use this setting (uncomment it and comment the setting just below)
#fs.file-max = 256000
# If you have 512MB RAM or less, use this setting
fs.file-max = 65535
vm.swappiness = 1
vm.vfs_cache_pressure = 50

Step 2 :
If you have a fast broadband (UL 10Mbps / DL 10Mbps, my broadband connection speed) (other connection speed is not tested), use the following setting :

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_no_metrics_save = 1

If you have a Wifi (such as IEEE 802.11 a/b/g) or a 3.5G modem, use the following setting :

net.core.rmem_default = 524288
net.core.rmem_max = 524288
net.core.wmem_default = 524288
net.core.wmem_max = 524288
net.ipv4.tcp_wmem = 4096 87380 524288
net.ipv4.tcp_rmem = 4096 87380 524288
net.ipv4.tcp_mem = 524288 524288 524288
net.ipv4.tcp_rfc1337 = 1
net.ipv4.ip_no_pmtu_disc = 0
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_ecn = 0
net.ipv4.route.flush = 1

Then make the setting effective :

sudo /sbin/sysctl -p

Step 3 :
Tuning for the large hard drive :
sudo nano /etc/rc.local

Add the following lines before “exit 0“.
echo 1024 > /sys/block/sda/queue/read_ahead_kb
echo 256 > /sys/block/sda/queue/nr_requests

Reboot your system.

Step 4 (Optional) :
If you are using ext3 as your filesystem, you may consider to add “noatime” to the /etc/fstab for every entry of partitions or hard drives before “relatime“. However, you should pay more attention to this hacking as it is danger. You may not boot up you computer then.

UUID=0e57987f-...... / ext3 noatime,relatime,errors=remount-ro 0 1

After saved the file, you can execute the following command to make sure all entries are okay. If there is any error, go to /etc/fstab to make correction until no error to show up. If there is no error, you can boot your computer if you want.

sudo mount -a

Lightening Ubuntu!!!!

2009年1月25日 星期日

[轉貼] Linux 支援的檔案系統小評測 - 最後的選擇是...

[轉貼] Linux 支援的檔案系統小評測 - 最後的選擇是...

來源:Tetralet | 24 元月, 2009 21:10
來源網址:http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=214&blogId=1

前幾天公司的電源瞬斷,我的一台使用 reiserfs 的主機就此再也無法開機:『root 檔案系統損毀』。後來拔硬碟到另外一台電腦做 fsck 之後是復活了,但也嚇出了我一身的冷汗。長久以來總一直聽到有關 reiserfs 的種種負面評論,親身體驗之後才知道真的不是一般的恐怖。於是興起來把我所有主機裡的 reiserfs 丟掉的念頭。

要轉換檔案系統是很麻煩沒錯。但最麻煩的是:該選擇哪一種檔案系統才好?Google 了半天,幾乎各種檔案系統都有其支持者和種種見証及說法讓人無所適從,甚至種種測試報告及使用心得,其結論都大異其趣,還真叫人不知該聽信哪一個才好。於是我決定自己動手測試,畢竟自己動手測過,感覺才會實在。

測試環境:

CPU:Intel(R) Pentium(R) 4 CPU 2.80GHz
RAM:1GB(其中約 600 MB 掛載為 tmpfs)
Kernel:2.6.29-RC1
Swap:(none)

參加測試的檔案系統簡介:

  • ext2:老牌 Linux 檔案系統,不支援 journaling。

  • ext3:當今各大 Linux 預設使用的檔案系統。支援 journaling。

  • ext3 (data):加上 journal_data 功能的 ext3。

  • ext4:ext3 的下一版本。已正式進入 kernel 2.9.29 RC1 中。

  • reiserfs:號稱最快的 FS。Linux 上第一個支援 journaling 的檔案系統。

  • reiserfs (data):加上 journal_data 功能的 reiserfs。

  • reiser4:reiserfs 的下一版。(尚未進入 kernel 中)

  • jfs:由 IBM 所開發的 journaling 型檔案系統。已停止開發。

  • xfs:由 SGI 所開發的 journaling 型檔案系統。

  • vfat:古老 DOS/Windows 檔案系統,不支援 journaling。

  • ntfs:現今 Windows 的主流檔案系統。在 Linux 上是經由 fuse 來支援 ntfs。

  • zfs:由 Sun 所開發的終極檔案系統。在 Linux 上是經由 fuse 來支援 zfs。

  • btrfs:下一代 Linux 預設使用的檔案系統。已進入 kernel 2.9.29 RC1 的測試分支中。

測試方式:

  • 把 Swap 關掉。這是為了避免 Swap 到硬碟會影響測試結果。

  • 將 650 MB 掛載為 tmpfs。因為 1GB 的 RAM 太大了,故意減少 RAM 的空間。據說測試資料要是 RAM 的 2 倍,結果才會較準確。不過要有塞資料給 tmpfs,它才會真的佔用 RAM 的空間,所以敝人計劃要塞 Debian Etch 的 iso 檔進去,並把它當作資料來源。

  • 把 Debian Etch 的 iso 檔複製到 tmpfs 裡。

  • 掛載該 Debian Etch 的 iso 檔。因為 RAM 的讀取速度應該會遠大於硬碟的讀取速度,用 RAM 當資料來源比較不會影響到測試結果。

  • 開始將該 iso 裡的檔案及目錄複製到測試分割區裡。然後刪除約一半的檔案。如此重覆 24 次。這是模擬人們使用硬碟會不斷寫入刪除資料的動作,讓磁碟裡的資料散亂。最後將硬碟寫滿。

  • 再刪除一部份資料以空出空間做為測試用。如此硬碟裡的資料應該算是十分散亂了。

  • 開始測試資料的讀出、寫入、列出、搜尋、計算剩餘空間等等。並記錄其時間及 CPU Loading。

以下為測試結果:

剛開始寫入硬碟的速度:

File System Test Start

btrfs 不愧是下一代 Linux 預設使用的檔案系統,速度實在驚人,竟然連 reiser4 都追不上。

而 ext3 / jfs / xfs 就真的有待加強了。ext3 慢 btrfs 約 36%,jfs 慢 btrfs 約 40%,xfs 慢 btrfs 約 60%。

而加上了 journal_data 功能的 reiserfs 及 ext3 就更慢了,因為所有的資料都要寫入硬碟 2 次。

zfs 和 ntfs 由於是用 fuse 實作的,所以實在慢得可憐。

在磁碟裡的資料散亂後,寫入硬碟的速度:

File System Test End.png

看來,在磁碟裡的資料散亂後,btrfs 會有 fragment 的問題,速度上己被 reiser4 追過。但還是遙遙領先其它的檔案系統。

此時,ext3 慢 btrfs 約 27%,jfs 慢 btrfs 約 30%,xfs 慢 btrfs 約 60%。

fragment 的比率:

File System Defrag

這是資料在最剛開始及最後時,寫入速度的比較。jfs 的表現令人驚豔,但也慢了約 13%;btrfs 和 xfs 就有待加強了,約慢了 23% 左右。

ntfs 和 zfs 也許不是 defragment 做得好,而可能是因為碟裡的資料是否散亂已不是速度的瓶頸 - 用 fuse 來實作的速度實在太慢了,慢到連磁碟 I/O 變慢了都不太影響到測試結果。 XD

讀出、寫入、列出、搜尋、計算剩餘空間等等的效能表現:

File System Performance

reiserfs 不愧是檔案系統的效能之王,佔據了前 1、2 名。而 jfs 則慢了 reiser4 約 40% 左右,xfs 則是慢了 reiser4 約 65% 左右。差距實在很大。

不過在本測試中,操作的多是一些 <> 500MB 大檔案的檔案系統其實並不公平。但個人認為 Linux 系統裡本來就是充斥著小檔案,所以其實也有必要如此測試才行。

敝人也試著用 > 500MB 的大檔案來進行測試,除了 ntfs 和 zfs 之外,最慢的 jfs 也只比最快的 reiser4 慢約 13%,個人認為差距沒有想像中大。

據說 xfs 在操作 > 1TB 的檔案的速度是其它檔案系統完全比不上的:xfs 要刪除一個 1TB 的檔案和刪除 1KB 的檔案所花費的時間是一樣的;但若是 ext3 則可能要刪上幾個小時。但因為敝人實在沒有什麼操作 1TB 檔案的機會,所以這個功能對敝人而言實在是英雄無用武之地。

另外,每個人、甚至每個目錄操作檔案系統的習慣都不同,有的目錄(像 /var)常在做讀寫動作;而 像 /usr 就讀取比較多,/home 則用 ls、讀寫的機會比較高,find 和 du 因為會耗費大量磁磁 I/O 敝人就不常用... 一個測試要能完全模擬人們使用磁碟的習慣是不可能的。所以這個測試一定有其不準確的地方,僅供參考。

CPU 使用量:

File System CPU Loading
如圖,藍色的是 %user,紅色的是 %system,而黃色的是 %iowait。大部份的檔案系統的 %user 都不到 2%,差距實在不大;ntfs 和 zfs 是運作在 user space,所以數據才會如此嚇人。而在 %system 上,xfs / jfs /ext3 都約在 10% 上下,其實算是不錯的了。reiserfs 約是 20%,而 btrfs 則是 33%,應該是還有很多的調整空間。xfs 竟然還有 18% 是 idle 的,實在太驚人了。要不是 xfs 有著一些較為不足之處,其實敝人光看這個數據,真的會直接轉用 xfs。

磁碟空間使用量:

File System Disk Usage

這個數據是指,當 zfs 塞滿後,用同樣的資料量去塞別的檔案系統,會佔用多少硬碟空間。

xfs/btrfs/reiserfs/vfat/ntfs/jfs 的比率十分接近,而 ext2/3/4 的表現就很糟了。使用 ext2/3/4 會無謂得浪費很多硬碟空間,在本測試中,ext3 會比 xfs 多佔用 12% 的硬碟空間,ext3 據說要再保留 10% 的硬碟空間否則效能會嚴重下滑,想想真的是太超過了。zfs 則是磁碟空間使用量最大的。

另 外,圖中 btrfs 的硬碟使用率極佳,但在個人的測試裡,btrfs 只到約 86% 就回應已無可用空間,但 btrfs 不是支援動態 inode 嗎?真令人百思不解。最下方那條 btrfs (guess) 是假設,若那 14% 是被 btrfs 暗槓掉的話,那麼 btrfs 真正的使用空間應該會再多上 16%,那麼它的使用空間就會比 zfs 更多了。

請注意,隨著分割區大小的不同,以上的數據將會跟著不同。

敝人對以上各種檔案系統的評語:

ext2:

  • 在隨身碟上可以考慮使用這個格式,以減少磁碟讀寫,延長隨身碟使用年限。

  • 無謂得浪費很多硬碟空間。

ext3:

  • 因架構上的優勢及長年的開發測試,據說有著最可靠的回復能力。

  • 在掛載硬碟時,可用 -o journal_data 啟用 data journaling 功能。那麼,在寫入磁碟時,會先把資料內容先寫入 journal 裡,然後在真的寫到磁碟上,如此能有效再進一步降低資料丟失的機率。不過因為資料會寫入磁碟 2 次,效能也會因而大幅下滑。
  • 沒有 undelete 功能。

  • 在開機時會視情況進行自我檢查。有時會等上半小時。非常令人不耐。ext4 據說有試著解決這個問題了。

    可用:
    tune2fs -c 0 -i 1m /dev/hdXY
    來關閉 max-mount-counts,讓它不會在掛載多次後便進行 fsck;並設定 interval-between-checks 為 1 個月。
  • 除了 journal 會佔用大量的硬碟空間之外,有人建議至少要保留 10% 的未使用空間,否則會造成 ext3 效能低落。

ext4:

  • 向前相容於 ext3,但有著更可靠的 checksumming in journal 功能。

  • 在個人測試中,速度可逼進 ext2。

  • 和 ext3 類似的,會無謂得浪費很多硬碟空間。

  • 加快了 fsck 的速度。
  • 可線上重整。

reiserfs:

  • 速度飛快。這也是之前敝人選擇這種檔案系統的主因。

  • 和 ext3 一樣,也支援 data journaling 功能。不過效能也會大幅下滑。

  • 有些目錄的操作是非同步的,不太適合用於某些系統(像 postfix)上。
  • 會佔用較多的 CPU 及記憶體。較適合用於較新的電腦上。

  • 回復能力較差。常常有人抱怨說,硬碟裡的資料在不正常斷電後就一去不回了。

  • 掛載及卸載速度很慢,嚴重影響到開機速度。

  • 個人在使用時,偶爾偶爾在搬移檔案時會出現 Disk I/O 100% 超過 30 秒的怪事。
  • 隨著主要開發者入獄,開發工作幾近停頓了。

reiser4:

  • 改進了 reiserfs 的眾多缺點,且速度比 reiserfs 更快!

  • 隨著主要開發者入獄,開發工作幾近停頓,應該不可能進入 kernel 了。

xfs:

  • 在操作一些充斥著小檔案的目錄,或是在大量新增或移除檔案或目錄時, 速度很慢。因此不太建議使用在 / 上。

  • 在操作 > 200MB 的檔案時有其優勢。但個人以 600MB 的檔案實測結果是相差無幾。

  • 可線上重整磁區。

  • 只要使用時日一久,效能下降得很嚴重。

  • 沒有 undelete 功能。

  • 有報告指出,在強迫關機後,甚至只是 umount,檔案可能因而損壞且難以復原。

  • 在所有的檔案系統中,佔用最少的 CPU Loading。

  • 掛載及卸載速度極快。
  • 仍在開發維護中。

jfs:

  • 佔用較低的 CPU Loading。

  • 綜合比較起來,速度會比起 ext3 快上一些些。

  • 據說其修復能力可以和 ext3 比擬。

  • 磁碟較不容易有 fragment 的問題。

  • 掛載及卸載速度極快。
  • 可將 journal 放到另一顆硬碟上,不過在實作上是有點麻煩。

  • 在刪除大量檔案時速度很慢。
  • 雖然 IBM 開發這個磁碟系統時間超過 10 年,但在它在 Linux 真正普及之前就已停止開發了,所以使用的人並不多。所以是否有潛在的問題也未可知。

  • Debian Installer 預設就會提供 fsck.jfs。

vfat:

  • 還是很常見於數位相機、數位攝影機、手機等等攜帶裝置中。
  • 速度中下,且不支援 journaling。

  • 磁碟 fragment 的問題很嚴重。

ntfs:

  • 因為是經由 fuse 來支援 ntfs 的,所以速度很慢很慢。但對於還在使用 Window/Linux 雙系統的使用者而言,它仍是一個很重要的工具程式。

  • 在個人測試中常導致 Kernel Panic。

zfs:

  • 雖然號稱是終極檔案系統,但因為授權的因素而無法進入 kernel 中,因而是經由 fuse 來支援 zfs 的,所以速度很慢很慢。在 Linux 上幾乎沒有競爭力。

btrfs:

  • 基本上是為了向 zfs 看齊而開發出來的 Linux 終極檔案系統。

  • 支援一些很先進的磁碟功能,像是磁碟快照、磁碟陣列、動態掛載等等。

  • 在速度上也是傲視群倫。

  • 更可靠的 checksumming in journal 功能。

  • 有對 SSD 做最佳化。

  • 可線上重整磁區。

  • 尚在測試實驗階段,連基本架構都未定案。

於是,幾經考慮,在 btrfs 推出之前,在 ext3、reiserfs、jfs 和 xfs 等 4 種檔案系統之間,敝人的首選應該會是 jfs - CPU Loading 低、硬碟使用率高、效能中上、回復能力佳。至於 IBM 已停止開發 jfs 一事,我想只好先不管了。

不過,關於資料回復一事,其實以上的評論大多來自網路一些使用者本身的使用經驗。但同是 ext3,有些人說它的回復能力是其它檔案系統所比不上的,但也有使用者回報他的 ext3 死了無數次。所以這些評論請頂多當作參考,不要太過相信呀!

而要讓磁碟資料長保安康,請確保:

  • 記憶體務必好好測過。有問題的記憶體是硬碟資料殺手。

  • 請安裝 UPS。電腦常不正常關機肯定會影響到磁碟資料的。

  • 要進行可能會 kernel panic 的動作,像測試 kernel module 前,請先祈禱。

  • 備份、備份、備份,永遠不嫌少。

然後,再加點運氣,也許那些磁碟資料真能跟著您直到天長地久、海枯石爛呢!