文件系统检测程序文件系统可以因为电源的损坏的原因,内核中的软件错误,硬件故障,或者不正确的关闭了系统。
文件系统检测程序,fsck,检测一个文件系统的数据一致性,并且纠正或者修复任何被找到的不同或者故障
每次系统启动,fsck自动的预先运行一个文件系统一致性检测。Fsck在文件系统被装配之前检测和修复任何遇到的文件系统的问题。
当文件系统被装配,并且附加了ufs logging选项,就不需要运行fsck。因为logging禁止文件系统发生变化。
每次他扫描到检测下列类型的文件系统冲突,fsck命令让几个通行证通过一个文件系统。
lost found目录fsck命令放置分派文件和目录,但是不参考位于那个文件系统中的lost found目录。每个文件的inode编号当作名字分配。如果lost found目录不存在,fsck就建立他,并且如果在lost found目录中的空间不足,fsck就增加他的空间。
Superblock一致性
文件系统超级块是为了检测调用的文件系统长度的不同,空余块计数器,和空余的inode计数器。
Inode一致性
Fsck命令为每个inode检测分派状态,类型,连接计数器,复制块,错误块,inode长度和块计数器。任何未使用的inode和非0的连接计数器都链接到文件系统的lost found目录。
数据块一致性
fsck命令不能检测普通的数据块,但是可以检测目录数据块。在这个数据块中,为inode指针检测未分配的块,标记为以用的未分配的块,标记为空闲的未分配的块,“.”和“..”和目录没有链节到文件系统的错误的inode。这些目录是连接返回到文件系统的lost found目录。
柱头组块一致性
fsck命令检测已经要求inode的未分配的数据块,未分配的数据块计数器和未分配的inode计数器。
Fsck的状态
Fsck命令为每个在/etc/vfstab文件中包括设备到fsck和fsck通行条目的文件系统运行通过5个状态。这5个状态是:
Phase 1:检测块和长度,检测矛盾的inodePhase 2:检测路径名,检测目录inode一致性Phase 3:检测连通性,检测所有目录是否已经连接到文件系统Phase 4:检测参考计数器,从Phase 2和3比较连接计数器信息,校正误差。Phase 5:检测柱头组,检测空余块和已经使用inode映象的一致性
非交互式模式在一个普通系统启动期间,fsck操作在非交互式模式,经常整理查阅或者无记载的模式。
在这个过程期间,fsck仅修复可以修复的问题。
可是,如果一个较大的问题被发现,并且产生了结果,fsck程序就中断并且使系统进入但用户模式。用户必须运行交互式的fsck来继续。
交互式模式在这个过程中间,fsck列出每个遇到的问题,下列在下列的纠正建议的动作中,问题需要回答yes或者no
通过回应yes,fsck允许纠正动作并且继续。回应no,fsck将报告最初的问题,并且提出解决的方法,并且不在继续向前直到用户回应yes。
使用fsck命令下面的实例中示范root用户如何使用fsck命令来完整的检测文件系统。
。检测单独的没有装配的文件系统,执行下列命令# fsck /dev/rdsk/c0t0d0s7这是检测没有加入/etc/vfstab文件的文件系统的{wy}方法。。使用列在/etc/vfstab文件中的文件系统的装配点目录名检测文件系统,执行下列命令# fsck /opt
fsck发现并修理故障
如果文件系统中显示了问题,用户可以接到来自fsck的警告。下面描述了一些比较多需要采用交互式干涉的文件系统错误。
从新连接一个已经分配的不可引用的文件。
在这个例子中,fsck程序发现一个已经分配的inode,但是不能引用或者不能连接到其他目录。
在RECONNECT?后面回答yes,会导致fsck保存文件到lost found目录,并且以inode编号命名。
** Phase 3 – Check ConnectivityUNREF FILE I=788 OWNER=root Mode=100644SIZE=19994 MTIME=Jan 18 10:49 1999RECONNECT? Y
决定什么类型的文件被移动到lost found目录中1.列出文件系统的lost found目录的内容,比如# ls /export/home/lost found#7882.决定文件的类型,使用file命令# file /export/home/lost found/#788/export/home/lost found/#788:ascii text3.使用more或者cat命令显示ACSII文本文件的内容。使用strings命令显示二进制文件的内容。如果文件是与一个应用相关的,就必须使用该应用程序来打开这个文件# cat /export/home/lost found/#7884.如果文件是完整的并且用户知道他属于哪里,文件可以直接拷贝回他应该在的文件系统
校正连接计数器在这个实例中,fsck程序发现一个目录的inode的连接计数器的数值和实际目录的连接计数器的数值不符。
在ADJUST?后面回答yes,fsck将校正目录inode的连接计数器** Phase 4 – Check Reference CountsLINK COUNT DIR I=2 OWNER=root MODE=40755SIZE=512 MTIME=Jan 18 15:59 1999 COUNT 4 SHOULD BE 3ADJUST? y
抢救空余列表
在这个实例中,fsck程序发现未分配的块计数器和空余块编号列表中的超级块不符合。
在SALVAGE?后面回答yes,fsck将升级文件系统的超级块的信息。
** Phase 5 – Check Cyl groupsCG 0: BAD MAGIC NUMBERFREE BLK COUNT(S) WRONG IN SUPERBLKSALVAGE? y
使用备份的超级块文件系统不能被装配,超级块碎片是可能的原因。
在系统启动的时候或者手动装配文件系统的时候,显示信息“Can’t mount file system name”表示一个文件系统不可用。例如:Can’t mount /dev/dsk/c0t0d0s7
如果fsck因为超级块错误而返回一个错误信息,用户必须选择一个超级块来恢复系统。
纠正的动作是运行fsck的-o选项,并且加b标志。标志后面跟超级块号码。
每个文件系统通常有一个预备超级块在32号块上,可以利用他来修复主超级块。# fsck –o b=32 /dev/rdsk/c1t3d0s0
fsck程序在备份的超级块上提取信息,与实际的文件系统比较并且重建主超级块。
可是如果这个被破坏的块是文件系统的部分。用户必须选择其他的备份超级块使fsck继续。
要列出文件系统所有的备份超级块的位置,就运行newfs –N命令,例如# newfs –N /dev/rdsk/c#t#d#s#
用户可以使用-N选项来显示出文件系统参数到that would be used来建立即将使用的新文件系统而没有真正的建立文件系统
输出的一部分是列出所有可以被-o参数使用的备份超级块的位置
用户也可以使用任何备份块编号来列出每个备份超级块的内容。
监视文件系统的使用
系统管理员的一个重要工作就是监视普通用户的文件系统的使用。有4个可以使用命令用于这个任务,包括df,du,ff和quot
df:显示空闲磁盘块和文件的编号du:总结磁盘的使用ff:为文件系统列出文件名和统计报表quot:总结文件系统所有权
df命令
用户使用df命令来显示已经装配的文件系统使用的磁盘空间的数量。他列出的是已经使用的和可用空间的数量,并且用了多少文件系统的总容量。
命令格式
df [-k] [directory]
选项
-k显示已经使用的K字节和从可用空间的部分通过操作系统减去保留的空间。
显示文件系统的容量,使用下面的命令# df –k
在文件系统中,已用的空间加上空闲的空间是小于整个空间的。其中的一小部分空间,大约是1%到10%是保留给每个文件系统的。
当文件系统报告所有的空间都被使用的时候,容量显示{bfb}。普通用户就会接到信息“File System Full”,并且不能继续工作。而保留的空间,root仍然可以使用,root用户可以删除或者备份文件到有空闲空间的文件系统。
Df –k显示下列的部分
File system:已经装配的文件系统Kbytes:文件的长度(K为单位)Used:已经使用的空间(K为单位)Avail:空闲的空间(K为单位)Capacity:文件系统已经使用的部分的百分比Mounted on:装配点
Du命令用户使用du命令来显示每个目录或者文件已经使用的磁盘块的数量
命令格式du [-a] [-s] [-k] [directory]
选项-k以K字节为单位显示-s显示只有512字节的块。S和k一起使用,显示总共使用的K字节-a显示所有文件和目录已经使用的块的数目,可以指定目录体系
ff命令
ff文件提供文件系统中的路径名的列表和文件的inode编号。
Quot命令
Quot命令显示了每个用户使用了多少空间。(K为单位)
命令格式quot [-af] [file system …]
选项
a报告所有已经装配的文件系统f包含的文件的数目
故障解决
如果boot损坏了,修复重要的文件。
/etc/vfstab文件是一个重要的系统文件。如果出现问题或者包含了编辑上的错误,就会导致系统启动错误。
使用下面的方法从Solaris操作环境光盘中启动并且修复编辑/etc/vfstab文件1.插入Solaris 8光盘(Software 1 of 2)2.利用光盘启动到单用户模式ok boot cdrom -s3.使用fsck命令修复/(root)分区的潜在问题# fsck /dev/rdsk/c0t0d0s04.如果fsck成功完成,装配/(root)文件系统到/a目录,以允许对磁盘上的文件系统的访问。# mount /dev/dsk/c0t0d0s0 /a5.设置并且输出TERM变量允许vi编辑器进行工作# TERM=sun# export TERM6.编辑/etc/vfstab文件并且纠正问题。然后退出保存文件# vi /a/etc/vfstab:wq!7.卸载文件系统# cd /# umount /a8.重新启动系统# reboot
1、fsck fsck是可以说是使用次数{dy}的工具(系统自己使用占90%以上)。它是FS完整性 检查,包括supblk,cylgrpblk,inode.tab,data区等。检查的原理是:冗余发。修 复时按照实际情况调整记录信息。 lost found目录:在fsck的时候,将找不到父目录的那些文件拷贝到该目录中,并 以i节点号作为文件名。 当系统启动的时候会使用fsck对文件系统进行扫描,并相应的报出扫描结果。例 如:/dev/rdsk/c0t0d0s7 stable等。 后面是Fs的状态。其中,clean表示文件系统umount后无人用,stable表示文件系 统用过,但却是完整的,好的。而出一大堆的话,还有什么fragment %什么的的那 都表示文件系统上有乱的地方,那么就应该进入系统后使用fsck来整理。提起这个 来,我想说说在非法关机后(各种原因),再次启动的时候会有很多的情况,上面 说的是一种情况,再厉害一些是系统只能进入但用户状态,最厉害的是连单用户的 状态都无法进入(肯定是/和/usr区有问题。这是因为fsck对/区的扫描无法通过的 话,系统当然无法启动,而fsck调用的一些函数库又在/usr上。。。。) 当系统的状态是clean,stable和logging的状态的时候(logging??不知道的看上 一课吧)fsck不运行。
2、fsck的使用 本课讲的三个参数: -o f 对系统进行强制检查,不论系统是否在clean等状态 -o p 非交互式检查并修复文件系统,对有的问题则立即退出 -o b=xx 用来修复超级块的错误,就是将备份的超级块内容拷入超级块中。solaris对 超级块很重视,它的备份有很多,一般的b=32就可以了,如果不行可以使用命令 newfs -N /dev/rdsk/cxtxdxsx来查看超级块的位置,其中任何一个备份块都可使用
3、一些错误的情况 一、RECONNECT 表示目录丢失,可将其存入lost found中再作转移。回答yes 二、SUPERBLK坏(注意是坏,不是wrong) 修复见上面(如果是wrong就随便了,修不修都可以) 三、CLEAR 删i节点,可能会错 四、REMOVE 删文件,一般给出文件名。file=…. 五、ADJUST 调整连接数。实际数与原记录不符。回答yes 六、SALVAGE 自由列表计数不正确。回答yes (题外话:其实我使用一般都是yes过去的,而且书上说不能在正在mount的文件系统上 操作,否则有可能导致文件系统损坏。但我也没有碰到过用fsck导致发生错误的情况。 不过还是建议大家操作的时候规范一些,否则出错了不要来找我呀。尤其是考试的时候)
4、df和du命令 最长用的是 df -k看现在系统的挂接和使用情况 du -ks看一个目录的总容量。