有时候维护Linux服务器时会面临这样一种错误,即显示文件系统变成(Read Only System),即文件系统变成只读的方式,产生这一问题的原因可能有两种:
(1)多机写入时同步机制出现问题
(2)单机写入时出现服务器掉电的情况
(1)修改/etc/fstab,将受损的文件系统先注释掉,如果无法读写该文件则采用mount -o remount rw , / 将文件系统改成读写模式。
(2)针对受损的文件系统,执行fsck命令,如:fsck /dev/sda1等。
*运行fsck后,该命令会分6个阶段对文件系统
进行检查,这六个阶段分别是:
阶段1: 检查块和块的大小
阶段2: 检查路径名
阶段3: 检查连接性
阶段4: 检查参考记数
阶段5: 检查自由块列表
阶段6: 补救自由块列表
对每个阶段进行检查,常见的一些错误:
1) 移去一个没有相关文件的目录入口
这时用户可以回答Yes或Y来删除该目录入口。
2) 重连接一个已分配但不能访问的文件:
fsck找到了一个已分配的I节点,但却不可访问(该节点没与任何目录连接),这时一般对fsck的"RECONNECT?"回答Yes,即把该I节点连接到lost+found目录下,文件名即是I节点号,之后管理员应检查该文件类型,判明该文件用途,再将该文件拷贝到相应目录下。
3) 连接数调整ADJUST
在交互方式下,fsck若发现连接数(与原记录)不一致,将询问用户采取何种行动,本例发现一目录的I节点连接数与该目录的真实连接数不一致。
这时用户应该回答Yes或Y来改正连接数。
4) 自由块表不一致
fsck查出未分配块数与超级块中所给出的自由块表不一致。
这时用户应该回答Yes或Y来修正超级块。
从上面的出错信息和处理方法可以发现,对于fsck询问的问题大多数情况下都可以用Yes来回答,所以在实际应用时,可以用" -y"选项来执行该命令对硬盘进行检查和修复。
这里:
RECONNECT
表示目录丢失,可将其存入lost+found中再作转移。回答yes
SUPERBLK坏(注意是坏,不是wrong)
修复见上面(如果是wrong就随便了,修不修都可以)
CLEAR
删i节点,可能会错
REMOVE
删文件,一般给出文件名。file=....
ADJUST
调整连接数。实际数与原记录不符。回答yes
使用一般都是yes过去的,不能在正在mount的文件系统上操作,否则有可能导致文件系统损坏。但也没有碰到过用fsck导致发生错误的情况,不过还是建议操作的时候规范一些。
对于一个已经安装好了的文件系统,fsck 命令不会做出矫正。
fsck 命令出于某些原因可以在一个已经安装好了的文件系统中运行,但不是进行修复。但是当文件系统安装完毕之后,也许会返回不准确的错误消息。
fsck 命令检查并以交互方式修复不连贯的文件系统。在安装文件系统之前,应该运行这个命令。您必须能够读设备文件,在这个设备上驻留着文件系统(例如/dev/sda1)安装一个不连贯的文件系统也许会导致系统的崩溃。
磁盘检测原理:
一致性的检查分为两种:块的一致性检查和文件的一致性检查。在检查块的一致性时,fsck程序构造两张表,每张表为块设立一个计数器,都初始化为0。第一张表中的计数器跟踪该块在文件中出现的次数,第二张表中的计数器跟踪空闲表中的出现次数。接着fsck程序使用原始设备读取全部的i节点,忽略文件的结构,只返回所有的磁盘块,从0节点开始,可以建立相应文件的全部块的块号表。每当读到一个块号时,该块在第一个表中的计数器加1,然后程序读取空闲表或位图,查找全部未使用的块,当在空闲表中找到一个块时,第二张表相应的计数器加1。那么如何判断文件系统一致呢?哈哈,如果我们的文件系统一致,每一个块要么在第一张表中计数为1,要么在第二张表中技术为1。那要是不是这样呢?
1. 两张表中都不存在,则块丢失, 解决办法:fsck程序,将其加入到空闲表中
2. 在空闲表中出现两次, 解决办法: fsck程序重新建立空闲表
3. 同时处于使用和空闲表中,fsck程序分配一个空闲块,将其内容拷贝到该空闲块中,然后把它插入到文件中。