Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1798810
  • 博文数量: 600
  • 博客积分: 10581
  • 博客等级: 上将
  • 技术积分: 6205
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 10:13
文章分类
文章存档

2016年(2)

2015年(9)

2014年(8)

2013年(5)

2012年(8)

2011年(36)

2010年(34)

2009年(451)

2008年(47)

分类:

2009-10-13 14:34:01

            第8章: 修复文件系统
            目标
            完成这一章,你将能做以下事情:
            ※理解文件系统是如何进行更新操作的
            ※理解sync是如何预防文件系统错误
            ※列出文件系统错误的三个原因
            ※使用fsck检查和修补文件系统
            文件系统的维护
            日常的维护
            -检查文件系统的一致性
            -执行文件系统备份
            -监控磁盘的使用情况
            系统管理员的一个主要的职责就是保护用户的数据的安全。由于UNIX对数据存储是通过文件系统的方式,系统会强制性检查文件系统的存储环境是否出现问题。文件系统的完整性十分重要。系统管理员能够做许多工作来保护文件系统的完整性。
            这一章,我们会学习如何使用fsck工具来检查和维护文件系统的完整性。在开始之前,我们先来了解一下文件系统的更新是如何发生的。
            文件系统的更新
            当一个文件系统装载后,它的超级块被拷贝到内存中。当拷贝完成之后,文件系统的标记被置为“dirty脏的”。所有的对超级块的更改首先要去更改这个拷贝。当一个SYNC的系统调用使用的时候,磁盘上的拷贝才会被更新。当一个文件系统被卸载的时候,所有的在内存中的数据会被写回到磁盘上,文件系统的标记被置为“clearn"。
            所有的对metadata进行的修改,首先是修改内存中的拷贝,然后才会被写到磁盘上去。一些metadata的修改是立即写到磁盘上,其它的则是在调用sync的时候才会被写到磁盘上。
            举一个例子:rm myfile命令会引起以下的一些改变:
            1.myfile的目录的条目被清除。
            2.用来描述myfile的inode被释放
            3.用来索引剩余数据块和剩余inode的映射图被更新
            4.超级块中的剩余数据块的数量和inode的数量必须被更新
            不幸的是,不是所有的metadata数据都是连续地存储在磁盘上的,所以它会进行一些写操作来完成这些处理过程。如果系统在进行这些过程中崩溃,就会使metadata数据产生不一致。例如如果myfile的目录条目已经被清除,但是inode还没有被释放,结果就是一个inode有一个链接,但是并没有目录结构指向这个inode。这就是不一致的metadata。
            内存缓冲区
            当需要写用户数据的时候,实际上并不立即发生写磁盘的动作,数据会被拷贝到一个内存的缓冲区里。这个操作非常的快。。数据,同inode信息一起,会在以后的一些时间被写到磁盘上。通常是在缓冲区满的时候和新需要清除一下颚缓冲空间的时候。如果系统在还没有将缓冲区中的信息写到磁盘上去,系统关闭。文件系统就会被破坏。如果你察觉文件系统已经被破坏,你应该停止当前的工作。
            使用缓冲区的优点和缺点:
            使用缓冲区可以对磁盘进行均匀的存取,因为内核不需要知道磁盘I/O的产生的原因。内核只会将缓冲区写到磁盘,而不用去关心缓冲区数据的组成。从磁盘I/O的观点来看,使用缓冲区,系统的设计会更简单。
            通过使用缓冲区,应用程序会很容易地移植到其它的UNIX系统上去,因为不同的UNIX机器的磁盘I/O也许会不同,但是程序不需要了解这些。它们只是写到缓冲区,而不用去考虑磁盘的设置方式。
            使用缓冲区可以减少对磁盘的读写,这会提高整个系统的相应时间。换句话说,系统运行更快了。
            重复利用缓冲区中的数据文件也能够加速系统。
            刷新缓冲区
                  sync
                  ※将缓冲区的内容写到磁盘
                  ※保持文件系统为最新
                  ※通常是通过syncer守护进程来激活
                  syncer
                  ※syncer是在系统启动的过程中自动启动。
                  ※syncer程序的语法为:
                  ??syncer[seconds]

            数据在写磁盘上之前,会写到一个缓冲区里。而缓冲区写到磁盘会有一个延迟,直到:
            ※系统需要缓冲区进行其它的操作
            ※最后的块被修改
            ※文件系统被卸载
            ※sync命令被执行
            ※系统关闭或者重启动
            syncer
            syncer通常是在系统启动的时候,在/sbin/init.d/syncer脚本文件中启动的,它的职责就是定时刷新缓冲区。你不需要直接执行syncer命令,它会在系统启动的时候,自动通过/sbin/init.d/syncer脚本执行。
            sync
            sync执行sync这个系统调用。执行这个命令会刷新还没有写到磁盘上的系统缓冲区数据,包括修改的超级块,修改过的inode,和延迟的块I/O,这会确保在执行一个关键的操作如系统关闭之前,所有的文件修改都会被写到磁盘上去。你可以在任何时候手工执行这个命令,因为sync会自动执行syncer守护进程周期执行的所有操作。
            介绍fsck
            为什么要运行fsck?,
            ※检查文件系统metadata的完整性
            ※在需要的时候修补metadata数据的损坏
            什么时候执行fsck?
            ※在系统异常关闭的时候,会自动运行这个命令。
            ※在怀疑文件系统被破坏的时候,可以手工运行这个命令。
            当操作系统非正常关闭的时候,文件系统的更改可能会丢失或者未完成。
            fsck工具在系统崩溃或者未正常关闭的时候会自动运行,它会验证你的文件系统的完整性。这个工具会试图修改任何能够识别的数据错误。
            fsck在系统非正常关闭时会自动运行,但是你也可以在怀疑文件系统有错误的时候手工运行这个命令。
            运行fsck
                  例子:在/dev/vg01/myfs2下运行fsck
                  1.mount -v
                  2.umount /dev/vg01/myfs2
                  3.fsck -F hfs /dev/vg01/rmyfs2
                  4 mount /dev/vg01/myfs2
                  5. 恢复任何被破坏的文件:
                  ※fsck删除任何文件吗?
                  ※fsck重新连接任何文件吗?
            运行fsck要进行的步骤:
            1.mount -v
            使用这个命令来判断每一个一个文件系统装载的目标。和文件系统的类型,因为你在运行fsck的时候必须要知道文件类型。
            2.?umount /dev/vg01/myfs1
            ??umount /dev/vg01/myfs2
            fsck必须在一个静态的文件系统上运行,因此在执行命令之前要卸载文件系统.
            3.?fsck -F vxfs /dev/vg01/rmyfs1
            ??fsck -F hfs /dev/vg01/rmyfs2
            在运行fsck的时候,你必须要指明你要检查的文件系统的类型。为了达到最优的性能,可以指明包含文件系统的地逻辑卷或者磁盘的裸设备文件名。
            当fsck检查到一个文件系统不完整,它会报告这个问题,然后询问是否对其进行修复。
            如果你回答”yes”,fsck会试图修正这个问题。如果你回答“no”,fsck会忽略这个问题,继续进行检查。一般都要选择"yes",让系统自动修复发现的问题。
            4.?mount /dev/vg01/myfs1
            ??mount /dev/vg01/myfs2
            在fsck完成之后,重新装载这个文件系统。
            5.恢复任何被破坏的文件
            为了修正文件系统的错误,fsck会删除一个或者多个文件,观察fsck输出的”REMOVE"的信息,确保从磁带上恢复受影响的文件。
            fsck会重新链接孤儿文件。如果和看到任何重链接的信息,检查文件系统的lost+found目录。下一章会讨论lost+found目录的细节。
            检查lost+found
            ※存在每一个文件系统中
            ※fsck会拷贝孤儿文件到这些目录下去。
            ※在每一次fsck完成之后应该检查这个文件
            在每一个文件系统的root目录下,都应该有一个lost+found目录。这个目录是newfs命令创建的。在使用fsck命令检查这个文件系统的时候,你应该检查这个目录是否存在,如果不存在,你可以通过/usr/sbin/mklost_found命令来重新创建这个目录。
            fsck将所有检查有问题的文件放在lost+found目录下。在fsck完成之后,你应该检查这个目录的内容。这个目录中的文件可以被移动回它们原始的目录。文件名是以inode号来命名,所以判断文件实际上是属于那个文件,这十分困难。但是你应该试图找到文件的属主。对这个文件运行file命令。如果这个文件包含文本,查看文本的内容来确定文件的属主。如果文件包含可执行代码,你可检查是否有SCCS确认字符串,如果有,使用what命令可以列出SCCS信息。如果这个文件没有SCCS字符串,你可以使用strings命令来查看文件的字符。这些字符能帮助确认文件属主。不要试图通过执行在lost+found目录中的可执行文件来找出这个文件是什么文件,因为它可能是破坏这个磁盘的文件。
            例子:
            # cd /myfs2/lost+found
            # ls -l \#1743
            # file /#1743
            # strings \#1743
            # move \#1743 new_file_name
 
阅读(1049) | 评论(0) | 转发(0) |
0

上一篇:创建文件系统

下一篇:文件系统维护

给主人留下些什么吧!~~