文件体系是用来办理和安排保存在磁盘驱动器上的数据的体系软件,其完成了数据完好性的确保,也便是确保写入磁盘的数据和随后读出的内容的一致性。除了保存以文件方法存储的数据以外,一个文件体系相同存储和办理关于文件和文件体系本身的一些重要信息(例如:日期时刻、属主、拜访权限、文件巨细和存储方位等等)。这些信息一般被称为元数据(metadata)。
因为为了防止磁盘拜访瓶颈效应,一般文件体系大都以异步方法作业,因而假如磁盘操作被忽然中止或许导致数据被丢掉。例如假如呈现这种状况:假如当你处理一个在linux的ext2文件体系上的文档,忽然机器溃散会呈现什么状况?
有这几种或许:
当你保存文件今后,体系溃散。这是最好的状况,你不会丢掉任何信息。只需求重新启动计算机然后持续作业。
在你保存文件之前体系溃散。你会丢掉你一切的作业内容,可是老版别的文档还会存在。
当正在将保存的文档写入磁盘时体系溃散。这是最糟的状况:新版文件覆盖了旧版别的文件。这样磁盘上只剩下一个部分新部分旧的文件。假如文件是二进制文件那么就会呈现不能翻开文件的状况,因为其文件格局和运用所等待的不同。
在终究这种状况下,假如体系溃散是产生在驱动器正在写入元数据时,那么状况或许更糟。这时候便是文件体系产生了损坏,你或许会丢掉整个目录或许整个磁盘分区的数据。
linux标准文件体系(ext2fs)在重新启动时会经过调用文件扫描东西fsck企图康复损坏的元数据信息。因为ext2文件体系保存有冗余的要害元数据信息的备份,因而一般来说不大或许呈现数据彻底丢掉。体系管帐算出被损坏的数据的方位,然后或许是经过康复冗余的元数据信息,或许是直接删去被损坏或是元数据信息损毁的文件。
很明显,要检测的文件体系越大,检测进程费时就越长。关于有几十个G巨细的分区,或许会花费很长时刻来进行检测。因为Linux开端用于大型服务器中越来越重要的运用,因而就越来越不能容忍长时刻的当机时刻。这就需求更杂乱和精巧的文件体系来代替ext2.
因而就呈现了日志式文件体系(journalling filesystems)来满意这样的需求。
什么是日志式文件体系
这儿只是对日志式文件体系进行简略的阐明。假如需求更深化的信息请参阅文章日志式文件体系,或许是日志式文件体系介绍。
大多数现代文件体系都运用了来自于数据库体系中为了进步溃散康复能力而开发的日志技能。磁盘业务在被真实写入到磁盘的终究方位曾经首要依照次序方法写入磁盘中日志区(或是log区)的特定方位。
依据日志文件体系完成技能的不同,写入日志区的信息是不彻底相同的。某些完成技能只是写文件体系元数据,而其他则会记载一切的写操作到日志中。
现在,假如溃散产生在日志内容被写入之前产生,那么原始数据仍然在磁盘上,丢掉的只是是最新的更新内容。假如当溃散产生在真实的写操作时(也便是日志内容现已更新),日志文件体系的日志内容则会显现进行了哪些操作。因而当体系重启时,它能容易依据日志内容,很快地康复被损坏的更新。
在任何一种状况下,都会得到完好的数据,不会呈现损坏的分区的状况。因为康复进程依据日志进行,因而整个进程会非常快只需求几秒钟时刻。
应该留意的是运用日志文件体系并不意味着彻底不需求运用文件扫描东西fsck了。随机产生的文件体系的硬件和软件过错是依据日志是无法康复的,有必要借助于fsck东西。
现在Linux环境下的日志文件体系
鄙人面的内容里将评论三种日志文件体系:第一种是ext3,由Linux内核Stephen Tweedie开发。ext3是经过向ext2文件体系上增加日志功用来完成的,现在是redhat7.2的默许文件体系;Namesys开发的ReiserFs日志式文件体系,能够从www.namesys.com下载,现在Mandrake8.1选用该日志式文件体系。SGI在2001年三月发布了XFS日志式文件体系。能够在 oss.sgi.com/projects/xfs/下载。下面将对这三种日志文件体系选用不同的东西进行检测和功用测验。
装置ext3
关于ext3文件体系技能方面的问题请参阅Dr. Stephen Tweedie的论文和访谈。ext3日志式文件体系直接来自于其先人ext2文件体系。其具有彻底向后兼容的要害特性,实际上其只是是在ext2日志式文件体系上增加了日志功用。其最大的缺陷是没有现代文件体系所具有的能进步文件数据处理速度和解压的高功用。
ext3从 2.2.19开端是作为一个补丁方法存在的。假如期望对内核增加对ext3文件体系的支撑,就需求运用补丁,能够从ftp.linux.org.uk/pub/linux/sct/fs/jfs或ftp.kernel.org/pub/linux/kernel/people/sct/ext3得到补丁程序,总共需求如下文件:
* ext3-0.0.7a.tar.bz2:内核补丁
* e2fsprogs-1.21-WIP-0601.tar.bz2 支撑ext3的e2fsprogs程序套件
复制linux-2.2.19.tar.bz2和ext3-0.0.7a.tar.bz2到/usr/src目录下,进行解压:
mv linux linux-old
tar -Ixvf linux-2.2.19.tar.bz2
tar -Ixvf ext3-0.0.7a.tar.bz2
cd linux
cat ……/ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1
cat ……/ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1
首要对内核增加SGI的kdb内核调试器补丁,第二个是ext3文件体系补丁。下来就需求装备内核,对文件体系部分的Enable Second extended fs development code答复Yes.然后编译。
内核编译装置今后,需求装置e2fsprogs软件套件:
tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2
cd e2fsprogs-1.21
。/configure
make
make check
make install
下来要做的作业便是在分区上创立一个ext3文件体系,运用新内核重新启动,这时候你有两种挑选创立新的日志文件体系或许对一个已有的ext2文件体系升级到ext3日志文件体系。
关于需求创立新ext3文件体系的状况下,只需求运用装置的e2fsprogs软件包中的mke2fs指令加-f参数就能够创立新的ext3文件体系:
mke2fs -j /dev/xxx