第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
阅读(1017) | 评论(0) | 转发(0) |