今天一个系统的文件系统/home满了,让我看
我先用du -sk看,半天没出结果,晕,下面还挂了个oracle的home目录
解决办法,加个-x,只看驻留在系统设备上的文件 du -sxk
结果大概为5.7G
接着用df -k分析,该文件系统大小为10G,使用100%
这种情况,一般就是文件系统满了后,维护人员删除了部分大的日志,但是并没有停进程,进程还持有文件inode操作的句柄,其实文件还没有真实删除掉
最常见的情况是对ORACLE trc目录的处理,经常有人为我问什么日志清了,空间还没释放出来
下面确认这个文件
fuser -d /home 任何与文件系统(自父目录删除的)无链接的打开文件的报告,主要显示那些进程
fuser -dV /home 提供详细输出,查看相关的inode信息
发现大量进程,并且-dV显示出有个接近5G的文件
用istat inode_number /dev/hd1可以看看这个文件,确实有那么大
接下来的工作,是找到持有句柄的进程,将其KILL掉
下面是我写的一个SHELL,作用是找到存在的使用/home目录的句柄,并过滤掉FD为cwd(当前工作目录)的以及挂到了/home/oracle下面的另一个文件系统
然后用awk,sed拼一个其在/proc下的文件名,具体这部分的知识,请google。我用sed过滤掉了fd列全部的字母,其实只应该过滤掉w和u。
然后使用ls -l得到文件大小并排序
ls -l `lsof |grep /home|grep -v cwd|grep -v /home/oracle|awk '{print "/proc/"$2"/fd/"$4}'|sed 's/[a-z]$//g'`|sort +4n -r|head -n 20
下面的是我做的一个例子,但是处理问题的时候没记录:
etl_1/home#k '{print "/proc/"$2"/fd/"$4}'|sed 's/[a-z]$//g'`|sort +4n -r|head -n 20 <
--w------- 0 sctbas staff 465907331 Nov 25 12:21 /proc/4096158/fd/1
--w------- 0 sctbas staff 465907331 Nov 25 12:21 /proc/4096158/fd/2
--w------- 0 sctbas staff 189402543 Nov 25 12:21 /proc/1327254/fd/1
--w------- 0 sctbas staff 189402543 Nov 25 12:21 /proc/1327254/fd/2
-rw------- 0 perfana perfana 41659286 May 26 2009 /proc/2613500/fd/63
-rw------- 0 perfana perfana 41659286 May 26 2009 /proc/958694/fd/63
-rw------- 0 perfana perfana 35317654 Jul 06 10:23 /proc/3612722/fd/63
-rw------- 0 perfana perfana 35317654 Jul 06 10:23 /proc/5046336/fd/63
-rw------- 0 perfana perfana 35317654 Jul 06 10:23 /proc/7876640/fd/63
-rw------- 0 perfana perfana 33642982 Aug 07 15:52 /proc/2285712/fd/63
-rw------- 0 perfana perfana 33642982 Aug 07 15:52 /proc/3305516/fd/63
-rw------- 0 perfana perfana 12932624 Aug 13 16:46 /proc/6184966/fd/63
-rw------- 0 perfana perfana 12932624 Aug 13 16:46 /proc/6504692/fd/63
-rw------- 0 perfana perfana 12664762 Jul 14 09:59 /proc/2601066/fd/63
-rw------- 0 perfana perfana 12664762 Jul 14 09:59 /proc/6578256/fd/63
-rw------- 0 perfana perfana 12664762 Jul 14 09:59 /proc/8601702/fd/63
-rw------- 0 perfana perfana 9461552 Jul 22 17:49 /proc/6049922/fd/63
-rw------- 0 perfana perfana 7897820 Jun 16 15:43 /proc/2334766/fd/63
-rw------- 0 perfana perfana 7897820 Jun 16 15:43 /proc/6574124/fd/63
-rw------- 0 perfana perfana 7897820 Jun 16 15:43 /proc/8188074/fd/63
etl_1/home#istat /proc/4096158/fd/1
Inode 950374 on device 10/9 Unallocated Inode
Owner: 210(sctbas) Group: 1(staff)
Link count: 0 Length 465912813 bytes
Last updated: Wed Nov 25 12:24:00 2009
Last modified: Wed Nov 25 12:24:00 2009
Last accessed: Thu Jul 16 18:23:18 2009
etl_1/home#fuser -dV /home
/home:
inode=119567 size=331280 fd=0 389298
inode=119588 size=42586 fd=0 479318
inode=119541 size=41659286 fd=0 958694
inode=119609 size=1611650 fd=0 991462
inode=119636 size=6050450 fd=0 1003592
inode=119594 size=65448 fd=0 1007704
inode=119577 size=2427958 fd=0 1110120
inode=119592 size=47544 fd=0 1122430
inode=119559 size=5732484 fd=0 1171602
inode=119605 size=529988 fd=0 1306846
inode=950376 size=189403509 fd=0 1327254
inode=119606 size=1379796 fd=0 1421428
inode=32831 size=26680 fd=0 1691848
inode=32970 size=27790 fd=0 1888480
inode=119572 size=323626 fd=0 1933326
inode=119603 size=38000 fd=0 1937646
inode=119590 size=34762 fd=0 2011360
inode=119579 size=2341738 fd=0 2019368
inode=119608 size=4377230 fd=0 2191578
inode=119604 size=137470 fd=0 2281518
inode=119569 size=33642982 fd=0 2285712
inode=119544 size=7897820 fd=0 2334766
inode=119563 size=1454234 fd=0 2375706
inode=119565 size=12664762 fd=0 2601066
inode=119541 size=41659286 fd=0 2613500
inode=119604 size=137470 fd=0 2895922
inode=32830 size=24710 fd=0 3010624
inode=119569 size=33642982 fd=0 3305516
inode=119602 size=279516 fd=0 3535020
inode=119558 size=35317654 fd=0 3612722
inode=119601 size=73680 fd=0 3629158
inode=119614 size=71660 fd=0 3645658
inode=119587 size=29788 fd=0 3809416
inode=950374 size=465909361 fd=0 4096158
inode=119577 size=2427958 fd=0 4440252
inode=119577 size=2427958 fd=0 4599916
inode=32970 size=27790 fd=0 4677708
inode=119643 size=202270 fd=0 5038326
inode=119558 size=35317654 fd=0 5046336
inode=119593 size=93828 fd=0 5136588
inode=119597 size=92418 fd=0 5202084
inode=119586 size=665136 fd=0 5541940
inode=119599 size=165500 fd=0 5722276
inode=119589 size=114688 fd=0 5730526
inode=119608 size=4377230 fd=0 5984458
inode=119568 size=9461552 fd=0 6049922
inode=119576 size=12932624 fd=0 6184966
inode=119596 size=104854 fd=0 6267018
inode=119576 size=12932624 fd=0 6504692
inode=119544 size=7897820 fd=0 6574124
inode=119565 size=12664762 fd=0 6578256
inode=119610 size=3555838 fd=0 6828074
inode=119608 size=4377230 fd=0 6848660
inode=119555 size=237330 fd=0 6922432
inode=32970 size=27790 fd=0 7082050
inode=119595 size=140268 fd=0 7102684
inode=119605 size=529988 fd=0 7143544
inode=119591 size=415352 fd=0 7241918
inode=119566 size=244322 fd=0 7336134
inode=119558 size=35317654 fd=0 7876640
inode=119591 size=415352 fd=0 8110100
inode=119600 size=21328 fd=0 8171656
inode=119544 size=7897820 fd=0 8188074
inode=119598 size=168380 fd=0 8564962
inode=119565 size=12664762 fd=0 8601702
inode=119607 size=256176 fd=0 8777740
inode=66849 size=65536 fd=0 8786012
inode=119544 size=7897820 fd=0 9416762
inode=32970 size=27790 fd=0 10227756
这里就可以看到,最大的文件为/proc/4096158/fd/1,该文件对应的inode为950374,该inode在fuser -dV的输出中存在,是个打开着而又被删除的文件
这里的文件名/proc/4096158/fd/1,第2位4096158就是其进程ID,将其KILL掉,磁盘空间就可以释放
另外,如果文件没有删除掉,可以用ncheck来查看inode和文件名的对应,但是删除的情况下,好像还没办法找到inode和原文件的对应关系