linux下根文件系得统制作工具。内带shell命令
源代码在线查看: unix系统管理-第九章:修复文件系统.txt
UNIX系统管理-第九章:修复文件系统
目标
完成这一章,你将能做以下事情:
理解文件系统是如何进行更新操作的
理解sync是如何预防文件系统错误
列出文件系统错误的三个原因
使用fsck检查和修补文件系统
文件系统的维护
日常的维护
-检查文件系统的一致性
-执行文件系统备份
-监控磁盘的使用情况
系统管理员的一个主要的职责就是保护用户的数据的安全。由于UNIX中数据通过文件系统的方式存储,系统会强制性检查文件系统的存储环境是否出现问题。文件系统的完整性十分重要,系统管理员可以做许多工作来保护文件系统的完整性。
这一章,我们会学习如何使用fsck工具来检查和维护文件系统的完整性。在开始之前,我们需要了解文件系统的更新是如何发生的。
文件系统的更新
当一个文件系统装载后,它的超级块被拷贝到内存中。当拷贝完成之后,文件系统的标记被置为"dirty"。所有的对超级块的更改首先要去更改这个拷贝。当一个SYNC的系统调用使用的时候,磁盘上的拷贝才会被更新。当一个文件系统被卸载的时候,所有的在内存中的数据会被写回到磁盘上,文件系统的标记被置为"clean"。
所有的对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程序的语法为: