Linux日志式文件系统面面观
作者:kkkkkkkkkkkk1982_799 | 来源:互联网 | 2017-10-07 08:50
文章标题:Linux日志式文件系统面面观。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
文件系统是用来管理和组织保存在磁盘驱动器上的数据的系统软件,其实现了数据完整性的保 证,也就是保证写入磁盘的数据和随后读出的内容的一致性。除了保存以文件方式存储的数据以外,一个文件系统同样存储和管理关于文件和文件系统自身的一些重要信息(例如:日期时间、属主、访问权限、文件大小和存储位置等等)。这些信息通常被称为元数据(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/jf或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 这里/dev/xxx是希望创建ext3文件系统的新分区。-j参数表示创建ext3而不是ext2文件系统。可以使用参数"-Jsize="来指定希望的日志区大小(n单位为M)。 升级一个已有的ext2,使用tune2fs就可以了: tune2fs -j /dev/xxx 你可以对正在加载的文件系统和没有加载的文件系统进行升级操作。如果当前文件系统正在被加载,则文件.journal会在文件系统加载点的所在目录被创建。如果是升级一个当时没有加载的文件系统,则使用隐含的系统inode来记录日志,这时候文件系统的所有内容都会被保留不被破坏。 你可以使用下面的命令加载ext3文件系统: mount -t ext3 /dev/xxx /mount_dir 由于ext3实际上是带有日志功能的ext2文件系统 ,因此一个ext3文件系统可以以ext2的方式被加载。 安装XFS文件系统 如果需要从技术方面了解XFS文件系统,请参考SGI的XFS文件系统和SGI信息页面。也可以参考FAQ。 XFS是一个SGI开发的linux环境下的日志文件系统,它是一个成熟的技术,最初是使用在IRIX系统上的文件系统。XFS遵循GPL版权申明。目前xfs文件系统最新版本是1.02。可以http://linux-xfs.sgi.com/projects/xfs/102_release.html从下载得到对内核xfs文件系统支持补丁或者直接下载RPM包方式的内核,下面我们就以补丁方式说明如何对2.4.14内核使用xfs。首先下载如下内容 patch-2.4.14-xfs-1.0.2.bz2 patch-2.4.14-xfs-1.0.2-kdb.bz2 拷贝Linux内核linux-2.4.2.tar.bz2到 /usr/src目录下,修改老的内核目录名,然后解压新内核: mv linux linux-old tar -Ixf inux-2.4.2.tar.bz2 拷贝每个每个补丁到内核源码目录下(例如:/usr/src/linux),并打补丁: zcat patch-2.4.14-xfs-1.0.2.bz2 | patch -p1 zcat patch-2.4.14-xfs-1.0.2-kdb.bz2 | patch -p1 然后配置内核,打开文件系统部分的内核选项:"XFS filesystem support" (CONFIG_XFS_FS)和"Page Buffer support" (CONFIG_PAGE_BUF)。同时需要升级下面这些系统工具到下面或更高的版本: modutils-2.4.0 autoconf-2.13 e2fsprogs-devel-1.18 安装新内核并重启服务器。 然后下载xfs工具。这个软件包包括下面的命令来处理文件系统,使用下面的命令来安装该软件包:: tar -zxf xfsprogs-1.2.0.src.tar.gz cd xfsprogs-1.2.0 make configure make make install 安装这些命令以后,就可以创建新的XFS文件系统: mkfs -t xfs /dev/xxx 如果xxx是一个已经存在的文件系统,那么就需要使用"-f"参数来创建新分区,但是记得这将会破坏该分区的所有数据。 mkfs -t xfs -f /dev/xxx 创建以后就可以使用基于下面的命令加载新文件系统: mount -t xfs /dev/xxx /mount_dir 安装ReiserFS文件系统 如果希望更多地从技术方面了解reiserFS文件系统,请参考NAMESYS和FAQ。 ReiserFS文件系统从2.4.1-pre4开始就是Linux内核的正式支持的文件系统了。为了使用reiserFS文件系统那你首先需要在系统上安装文件系统支持工具(如:创建ReiserFS文件系统的mkr
推荐阅读
本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ...
[详细]
蜡笔小新 2024-11-21 09:45:56
本文详细介绍了Linux系统中信号量的相关函数,包括sem_init、sem_wait、sem_post和sem_destroy,解释了它们的功能和使用方法,并提供了示例代码。 ...
[详细]
蜡笔小新 2024-11-21 21:21:16
本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ...
[详细]
蜡笔小新 2024-11-21 20:16:59
在使用 Nginx 作为服务器时,发现 Chrome 能正确从缓存中读取 CSS 和 JS 文件,而 Firefox 却无法有效利用缓存,导致加载速度显著变慢。 ...
[详细]
蜡笔小新 2024-11-21 19:57:43
本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ...
[详细]
蜡笔小新 2024-11-21 19:01:54
本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ...
[详细]
蜡笔小新 2024-11-21 17:42:08
本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ...
[详细]
蜡笔小新 2024-11-21 17:32:44
对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ...
[详细]
蜡笔小新 2024-11-21 17:01:54
publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ...
[详细]
蜡笔小新 2024-11-21 16:25:41
nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ...
[详细]
蜡笔小新 2024-11-21 16:03:49
我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ...
[详细]
蜡笔小新 2024-11-21 13:01:23
Web动态服务器Python基本实现 ...
[详细]
蜡笔小新 2024-11-21 08:01:30
本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ...
[详细]
蜡笔小新 2024-11-20 19:57:35
本文详细介绍了腾讯云服务器的续费方法,包括单台资源续费、批量资源续费以及自动续费设置,帮助用户高效管理云资源。 ...
[详细]
蜡笔小新 2024-11-20 18:44:36
本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ...
[详细]
蜡笔小新 2024-11-20 17:58:54
kkkkkkkkkkkk1982_799
这个家伙很懒,什么也没留下!