Total Pageviews

Thursday 25 October 2012

关于桌面 Linux 分区的一点看法

看了 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 不过这也是没有办法的……
很久没写这么长的东西了……仅是小弟我的个人意见,肯定有许多不正确和不完善之处,还请各位高手多多指教。
参考: