Linux故障记录(持续更新...)

在维护Linux服务器中,难免会存在问题和故障,其实学习就是一个发现问题与解决问题的过程。只要我们掌握了解决问题的基本套路,那么一切问题应该都不是问题。这里记录自己以及他人遇到Linux服务器故障的出现的现象,以及解决思路和方案。

umount : /www/data: device is busy

1.故障描述

卸载一个磁盘,提示无法卸载,可能是这个磁盘的文件对应的程序正在运行

1.解决思路

1
2
fuser -m -v /mnt/test
# 查看对应的运行的程序,然后关闭或者kill掉重新卸载即可,重要程序请慎重处理

1.扩展-fuser命令

fuser 可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息
必要参数:
1
2
3
-m: 表明指定的路径是一个挂载点
-v: 给出详细的输出
-k: 自动把霸占着 /media/USB/ 的程序杀死

Read-only file system

2.故障描述

出现这个问题的原因有很多种,可能是文件系统数据块出现不一致导致的,也可能是磁盘故障造成的,主流ext3/ext4文件系统都有很强的自我修复机制,对于简单的错误,文件系统一般都可以自行修复,当遇到致命错误无法修复的时候,文件系统为了保证数据一致性和安全,会暂时屏蔽文件系统的写操作。

2.解决思路

手工修复文件系统错误的命令式fsck,在修复文件系统前,卸载文件系统所在的磁盘分区
1
fsck –V –a /dev/sdb1

2.扩展-fsck命令

fsck不仅可以对文件系统进行扫描,还能修正文件系统的一些问题。
注意的是fsck扫描文件系统时一定要在单用户模式、修复模式或把设备umount后进行。建议在单用户模式下运行。如果扫描正常运行中的系统,会造成系统文件损坏。
文件系统扫描工具有fsck、fsck.ext2、fsck.ext3、fsck.ext4、fsck.msdos、fsck.cramfs、fsck.ext4dev、fsck.vfat。最好是根据不同的文件系统来调用不同的扫描工具,比如ext3的文件系统使用fsck.ext3,ext4文件系统使用fsck.ext4等。
必要参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-a:非互交模式,自动修复
-c: 检查是否存在有损坏的区块
-C: 会把全部的执行过程,都交由其逆向叙述,便于监控程序
-d: 详细显示命令执行过程
-f: 强制进行检查
-F: 检查文件系统之前,先清理该保存设备块区内的数据
-l: 把文件中所列出的损坏区块,加入标记
-L: 清除所有损坏标志,重新标记
-n: 非交互模式,把欲检查的文件系统设成只读
-r:交互模式
-t: 显示fsck.ext2命令的时序信息。
-v: 显示详细的处理过程
-y: 关闭互动模式 选择参数
-b: 指定分区的第一个磁区的起始地址/Super Block
-B: 设置该分区每个区块的大小
-I: 设置欲检查的文件系统,其inode缓冲区的区块数目
-V: 显示版本信息

no space left on device

3.故障描述

磁盘空间满了,准备检查磁盘空间

3.解决思路

1
2
df -hT
# 查看到是哪一个磁盘分区空间已经达到100%

1
2
3
du –sh *
# 接着通过命令du –sh * 命令检查目录下面的所有文件或者目录的大小
# 确定是那些文件太大造成的,rm即可,删除前请确定文件的关键性

3.扩展1-df命令

df命令用于显示磁盘分区上的可使用的磁盘空间
必要参数:
1
2
3
4
5
6
7
8
9
10
11
12
-h或--human-readable:以可读性较高的方式来显示信息
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息
-k或--kilobytes:指定区块大小为1024字节
-l或--local:仅显示本地端的文件系统
-m或--megabytes:指定区块大小为1048576字节
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值
-P或--portability:使用POSIX的输出格式
--sync:在取得磁盘使用信息前,先执行sync指令
-t<文件系统类型>或--type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息
-T或--print-type:显示文件系统的类型;
-x<文件系统类型>或--exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息

3.扩展2-du命令

du命令也是查看使用空间的,但是与df命令不同的是du命令是对文件和目录磁盘使用的空间的查看
必要参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-a或-all: 显示目录中个别文件的大小
-b或-bytes: 显示目录或文件大小时,以byte为单位
-c或--total: 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和
-k或--kilobytes: 以KB(1024bytes)为单位输出
-m或--megabytes: 以MB为单位输出
-s或--summarize: 仅显示总计,只列出最后加总的值
-h或--human-readable: 以K,M,G为单位,提高信息的可读性
-x或--one-file-xystem: 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小
-S或--separate-dirs: 显示个别目录的大小时,并不含其子目录的大小
--exclude=<目录或文件>: 略过指定的目录或文件
-D或--dereference-args: 显示指定符号链接的源文件大小
-H或--si: 与-h参数相同,但是K,M,G是以1000为换算单位
-l或--count-links: 重复计算硬件链接的文件

文件已删除,空间没有释放

4.故障现象

服务器上的日志文件太大导致磁盘满了,通知开发,确认无用后开始删除
1
2
3
4
find / -size +1G | xargs ls -lh
# 使用find 查找到大文件
find / -size +1G | xargs rm -rf
# 确定好数据无用之后删除

删除完成之后,通过df命令查看发现空间并没有被释放

1
2
3
4
5
6
7
8
df -hT
文件系统 类型 容量 已用 可用 已用%% 挂载点
/dev/mapper/vg_weiwang1-lv_root
ext4 50G 50G 0 100% /
tmpfs tmpfs 5.3G 0 5.3G 0% /dev/shm
/dev/vda1 ext4 485M 32M 428M 7% /boot
/dev/mapper/vg_weiwang1-lv_home
ext4 44G 44G 0 100% /home

在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。

4.解决思路

1
2
3
lsof | grep deleted
# 使用 lsof 找到被删除但是fd没释放的文件
# 然后就是关闭或者重启对应进程,当然重启操作系统也可以

以后如果遇到磁盘空间占满,切勿直接删除文件,可以通过在线清空的方式解决此类问题

1
2
> /data/test.log
# 通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志,这种方法经常用于在线清理各种服务所产生的日志文件

4.扩展1-文件存储机制

一个文件在文件系统中存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,在将数据删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中。在将数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除access_log文件后,空间还没有释放,就是因为httpd进程还在一直向这个文件写入内容,导致虽然删除了access_Ilog文件,但是由于进程锁定,文件对应的指针部分并未从meta-data中清除,而由于指针并未删除,系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放。

4.扩展2-lsof命令

lsof命令的原始功能是列出打开的文件的进程
必要参数:
1
2
3
4
5
6
7
8
9
10
lsof abc.txt 显示开启文件abc.txt的进程
lsof -i :22 知道22端口现在运行什么程序
lsof -c abc 显示abc进程现在打开的文件
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -u username 以UID,列出打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
lsof -p 12 看进程号为12的进程打开了哪些文件

本文标题:Linux故障记录(持续更新...)

文章作者:火柴

发布时间:2017年07月24日 - 11:07

最后更新:2017年07月24日 - 17:07

原始链接:http://www.chen-hao.com.cn/posts/4519/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

火柴 wechat
扫描上方二维码关注我的博客!
0%