写这些东西之前,我始终犹豫一个问题:这些文章应该有一个怎样的定位。我不是什么高手,按照目前的情况看,也不会成为什么高手。随着工作中对Linux的接触越来越多,碰到的问题也越来越麻烦,所以觉得有必要将学过的东西做一个略微深化的总结。以下内容是各大高人的总结以及自己碰到的问题的一个综合记录,望高手斧正。
问:什么是文件系统?答:文件系统指的是文件存在的物理空间。(关于文件系统的理解,可谓仁者见人,智者见智。文件系统的设计者与SA一定会说出给出不同的答案。这种纯定义类的东西,自己看看,想想就算了。死钻牛角尖,有这个必要吗?有这个必要吗??)而文件系统记录目录与文件被称为文件结构。每一个文件系统在Linux里都被解释成由一个根目录为起点的目录树结构,Linux将这些文件系统mount到系统目录树中使用的。
当前,用户遇到的最常用的文件管理系统是 ext2/ext3、ReiserFS。以下是这几种分区主要特性的汇总表。
特性 |
ext2 |
ext3 |
ReiserFS3.6 |
最大分区大小 |
4TB |
4TB |
16TB |
最大文件大小 |
2GB-4GB |
2GB-4GB |
8TB |
块大小 |
1KB-4KB |
1KB-4KB |
只有 4KB |
日志功能 |
无 |
有 |
有 |
崩溃后重新启动 |
慢 |
快 |
非常快 |
用于恢复清除文件的工具 |
有 |
有 |
无 |
崩溃后数据的状态 |
良好 |
非常好 |
一般 |
ACL 支持 |
有 |
有 |
无 |
稳定性 |
优秀 |
良好 |
良好 |
先说ext2/ext3,这两种文件系统支持rwx权限以及attributes,他们采用block+inode的方式存放文件。每个ext2/ext3分区都包含一个超级块,用于维护分区中文件系统上的信息,包括一组在每个超级块中唯一编号的 inode、空闲 inode 的数目以及 inode 总数、数据块总数、空闲数据块数和文件系统的状态。文件系统的状态有两种:干净(当文件处于未更改状态时)和脏(当有未写入磁盘的文件系统更改时)。超级块中的一个 inode 对应着一个文件。除文件名外,inode 包含了有关文件的所有信息,其中包括:
地址
类型
大小
所有者
对文件数据所在块的引用
文件最后一次修改和访问的时间戳。
可以使用以下命令查看文件的 inode编号:
inode 只在超级块中唯一编号,且每个分区只有一个超级块,这就是硬链接无法跨越多个分区的原因。
ext3文件系统是目前Linux平台使用最多的文件系统,原起自ext2,在其基础上加入日志功能(主要改变)。官方列举出很多特点,比如:高可用性,数据完整性,文件系统速度,数据转换和多种日志模式balabalabala。
以下是在/etc/fstab文件引导时激活的三种不同日志模式:
data=journal日志模式
日志中记录包括所有改变文件系统的数据和元数据。它是三种ext3日志模式中最慢的,但它将发生错误的可能性降至最小。使用“data=journal”模式要求ext3将每个变化写入文件系统2次、写入日志1次,这将降低文件系统的总性能,但它的确是使用者最心爱的模式。由于记录了在ext3中元数据和数据更新情况,当一个系统重新启动的时候,这些日志将起作用。
data=ordered日志模式
仅记录改变文件系统的元数据,且溢出文件数据要补充到磁盘中。这是缺省的ext3日志模式。这种模式降低了在写入文件系统和写入日志之间的冗余,因此速度较快,虽然文件数据的变化情况并不被记录在日志中,但它们必须做,而且由ext3的daemon程序在与之相关的文件系统元数据变化前执行,即在记录元数据前要修改文件系统数据,这将稍微降低系统的性能(速度),然而可确保文件系统中的文件数据与相应文件系统的元数据同步。
data=writeback日志模式
仅记录改变文件系统的元数据,但根据标准文件系统,写程序仍要将文件数据的变化记录在磁盘上,以保持文件系统一致性。这是速度最快的ext3日志模式。因为它只记录元数据的变化,而不需等待与文件数据相关的更新如文件大小、目录信息等情况,对文件数据的更新与记录元数据变化可以不同步,即ext3是支持异步的日志。缺陷是当系统关闭时,更新的数据因不能被写入磁盘而出现矛盾,这一点目前尚不能很好解决。
不同日志模式间有差别,但设置的方法一样方便。可以使用ext3文件系统指定日志模式,由/etc/fstab启动时完成。例如,选择data=writeback日志模式,可以做如下设置:
/dev/hda5 /opt ext3 data=writeback 1 0
在一般情况下,data=ordered日志模式是ext3文件系统的缺省模式。
ext3日志可以保存在另外一个存储设备上,这也是一种I/O调优的手段。如下:
ext2/3文件系统对某单个文件,能提供额外的属性支持,使用lsattr查看、chattr (+,-)修改,权限如下:
A:当文件被更改时,文件的更改时间不变
a:只能追加,不能更改文件原内容
d:此文件在dump是被跳过
i:文件不可改变
j:在ext3文件系统中,此文件一定会被写入日志
S:当文件被改动,此更动会同步写入文件系统
测试如下:
洋洋洒洒写了这么多,其实还有许多未尽之处,譬如与文件系统相关的几个命令(mount/umount、mkfs/mke2fs、fdisk、e2label等),文件(/etc/fstab等),功能(LVM、quota、raid等)未能详细说明。这些会在今后慢慢补充。结束。3Q
阅读(987) | 评论(0) | 转发(0) |