2009年10月6日

關於桌面 Linux 分區的一點看法

關於桌面 Linux 分區的一點看法

{ 撰文/upsuper }

今天看了 LinuxTOY 上推薦的《Arch Linux 安裝指南》,看到其中關於分區的部分,我突然想寫篇文章來討論一下 Linux 中應該怎麼分區、應該怎麼選文件系統、應該怎麼配置才會比較不錯。

第一個問題是哪些東西單獨分區比較好。我在 Ubuntu 的社區上看到的建議有很多種,比如最基本的把 /boot、/home 單獨分出來的,也有把 /tmp、/var 或 /usr 也單獨分出來的。不過根據我的觀察以及設想來說,我覺得,而且我個人採用的是把 /boot、/tmp 及 /home 單獨分區,為什麼這樣選擇呢?

首先是 /boot 區,由於裝載的是啟動器,一般來說比較建議單獨分區,這樣可以減小損壞導致完全不能啟動的風險,而且由於單獨分區,在磁盤上的區域較集中,對於啟動效率也 有一定改善吧~下面是 /tmp 區,這個區我覺得是一定要分出來的,因為這幾乎是 Linux 裡面操作最頻繁的一個區了,各種雜七雜八的臨時文件裝在裡面。最後是 /home 區,把這個區單獨分有一個最重要的好處就是,每次重裝不需要額外的備份操作,直接沿用原來的分區就可以了~此外,還有比較喜歡更多分區的人也可以考慮把 /var 也單獨分出來,這個作為日誌及某些服務的資料儲存地的操作頻繁度也是與根目錄相當不同的。至於把 /usr 單獨分出來,我覺得是毫無道理的……個人看法~最後,我們還有一個區,就是 swap 區,無論內存多大,都建議建一個 swap 區!

接下來我們的問題是,每個分區該有多大?說實話,這並不是一個十分難辦的問題,因為現在的 GParted 等軟件能夠很輕鬆安全的改變分區大小,如果設不好大不了花一點時間調整咯。不過還是要稍微討論一下的。

/boot 區是一個對空間要求非常寬鬆的分區,一般來說可以根據自己硬盤的寬裕程度給他分 50MB-200MB 都是沒什麼問題的,就一堆啟動文件嘛~至於 /tmp 區,據說如果要刻錄 DVD,至少要給這個區留 4.2GB 以上的空間。我個人是沒有 DVD 刻錄機的,因此對這個不太瞭解,不過如果這樣的話那以後刻藍光難道要預留 25GB?我是留了 1GB 的空間,據觀察利用率並不高,通常維持在 10% 以下,但考慮到某些時候說不定會突然暴增,維持一定量給它總沒什麼壞處吧……然後是 swap 區,這個前人總結的很多了,這裡轉引一下,一般來說就是內存 1GB 以下的設為兩倍內存,1GB 及以上的給個 1GB 就差不多了,當然,如果想要能夠使用休眠這個功能,swap 區至少要和內存一樣大,這個問題上就看個人喜好自己權衡咯。根目錄依自己的情況給個 10GB、20GB 的應該是足夠了,硬盤大得蛋疼的給個 50GB 我看一般來說也差不多了,我給了 20GB,安裝各種軟件,至今也只用了 55%。剩下的就是給 /home 目錄了,各種資料盡存其中~至於部分人可能願意分出來的 /var 區,剛剛查了一下我自己的情況,我估計要給個 1G-2G,特別是對於那些用 Debian 系卻從來不清裡安裝包緩存的人,更要分大一點。

現在的問題就是,我們需要什麼樣的文件系統?現在主流的桌面級文件系統大概有這幾個:ext3、ext4、reiserfs、jfs。其他的文件系統大體上不是淘汰過時就是支持不完善,或者難以使用。

這幾個文件系統可謂各有千秋,首先說說 ext3,這是 Linux 中這幾個文件系統經歷最長時間考驗的,因此應該說穩定性是很優秀的,重要的東西放在這裡面自然比較安心一些,但為了能從 ext2 平穩升級,沿用了線性目錄儲存的方式,效率自然打了些折扣。而 ext4 剛剛進入穩定版不久,說實話,我對開源界的穩定版感覺相當不好,Ubuntu 9.04 正式版出來不到一週後我下載安裝,就增加了數十個安全更新……而 ext4 亦在穩定不久後爆出了丟失數據的 bug。因此,對於 ext4 的穩定性我想還有待進一步的檢驗,我猜也正是這個原因 Ubuntu 9.04 最終沒選擇這個作為默認文件系統。但其效率確實是有提高的,我想作為一些不需要經常修改的東西存放的地方還是很好的。下面來看看 reiserfs,這是一個很優秀的文件系統,可惜作者被抓起來了……這個文件系統對於小文件的存取具有很大的優勢,並且在許多測試中有不俗表現。最後是 jfs,這是一個企業級的文件系統,似乎是有很穩定的性能,不過總體性能似乎不強。

好了,分析完這些文件系統的特性,我們大概可以知道應該怎麼做了。當然,swap 區一定要用 swap 文件系統是必然的了。我想先看看 /tmp 所在的區,我想這裡面大多是小文件,而且存在時間不長,加之重啟就可以消掉,對穩定性要求不高,但如果比較高效是不錯的,因此我個人選擇了 reiserfs。當然,有人內存夠大直接把 /tmp 掛到內存裡做個 tmpfs 對效率提高很有好處。然後是 /home 區,我想 ext3 作為一個成熟和穩定的文件系統,放在 /home 再合適不過了,而且 /home 區裡面通常一個文件夾我們都不會存太多文件導致其效率嚴重下降。至於根目錄,我想 ext4 和 reiserfs 應該都不是太差的選擇,而 ext3 顯得就不太優越了,因為根目錄裡面一個目錄下有成百上千的文件是很常見的(如 /usr/bin、/usr/lib 之類的……),而且大多數文件是小文件,ext3 的效率實在堪憂。而相比之下,ext4 也對小文件的訪問做了一些優化,而且默認開啟了對樹型數據結構的支持,使得其管理文件的效率也有一定的提高。至於 reiserfs 前面也說過了,顯然在這裡都是合適的~至於 /boot 區,我想不應該選 reiserfs 和 ext4 這樣支持 extents 的文件系統,即使可以支持效率也高不了。其實我一直在想弄一個不需要載入 GRUB stage 1.5 的應該是最快的了~最後 /var 區我沒有經驗,就不說了……

最後是不是非常重要的一個問題,怎麼排順序?我們都知道在傳統機械硬盤上,分區越靠前意味著尋道時間越短,也即速度越快,因此我們顯然要將經常要的放前面,以提高整體效率。此外我們都知道另外一個事實,如果你的內存比較大,Linux 幾乎是不使用 swap 區的。因此我一向很反對把 swap 區放在前面,取而代之我覺得應該把 /tmp 放在最前面,根目錄放其次,我想內存大於 1G 的可以把 swap 扔到第三個,再大的直接扔最後一個都無所謂……這裡我還基於另外一個猜想:減慢 swap 訪問速度有助於在有程序異常佔用內存的時候減緩其擴張進程,給我們留一點時間解決這些程序……當然,這個猜想不一定是對的哈~

好了,上面都是關於傳統機械硬盤的,我也想談談固態硬盤的問題。我的上網本就是配了個 16GB SSD……

對於 SSD,顯然應該把頻繁寫入的東西移走,我的基本方案就是:把 /tmp、/var/log、/var/tmp 這類文件夾直接移入內存掛載為 tmpfs,然後整個硬盤分成兩個區:一個 swap,一個根目錄。顯然在這麼小的盤裡你想放什麼東西幾乎是不可能的,因此我掛了一個外部硬盤作為我主文件夾的一個子目錄,就不把 /home 單獨分出來了。而且此處使用了 ext4,因為據說 ext4 是為 SSD 優化過的。至於為什麼還要給 swap,這個上面也解釋過了,雖然看起來很矛盾 _-b 不過這也是沒有辦法的……

很久沒寫這麼長的東西了……僅是小弟我的個人意見,肯定有許多不正確和不完善之處,還請各位高手多多指教。

参考:

{ Source. Thanks upsuper. }

署名 • 注明出处 • 非商业性使用


沒有留言:

發佈留言