|
|
今天zabbix报警,一台服务器的disk满了,使用du -sh * 或 du -sh /* 查看目录的大小,查找占用空间大的目录/var/spool/clientmqueue….
_9 [9 \: \6 c a q0 F解决
+ I% z! H* X7 i" ]" e6 |# P, P( j7 _% k1 J9 j" f
# K) M2 [% C4 q解决方法:在cron的自动执行语句后加上> /dev/null 2>&1( X( W l& c! ]
例: b5 r6 h) p S* M
* 3 * * * /usr/bin/w > /dev/null 2>&1! I& m/ p! C* m9 n. G: U9 [! \: k
这样就OK拉,就不会写到那个目录下了….. F: R* w2 T$ Y1 [$ T z! e6 D
" e9 ^7 T3 l; C2 p6 Z l4 Z
7 I9 r$ W& k- D+ G! A恢复的唯一办法就是删除这些文件, 此方法仅仅用于大量的临时文件和缓存占用的inode. 如果数据不可删除, 就要想办法增加空间了。这里只讲怎么找到这些文件和删除它们.
- W! u1 E# V' T% b/ h! T+ n) p4 l% k6 L- Y. l) c# V3 e
; S; { P I! H" s
检查inode剩余
' U$ N; ~+ G f& r! [/ wdf -i
! O' b9 |* b# tFilesystem Inodes IUsed IFree IUse% Mounted on
5 c$ r# @* `0 Ldevtmpfs 998158 373 997785 1% /dev
* s( e% m* K, s9 E( c0 N* Jtmpfs 1001093 1 1001092 1% /dev/shm
% l; y/ \1 P# l+ l0 a. F: b+ `( ntmpfs 1001093 557 1000536 1% /run
: @4 m- O# i/ E" I% P9 Ptmpfs 1001093 16 1001077 1% /sys/fs/cgroup
/ ?! Y+ a2 a1 v3 Q/dev/mapper/centos-root 286781440 67061 286714379 1% /
7 \* z1 F, I' H1 J/dev/vda1 524288 350 523938 1% /boot
: P! N ~( d5 G$ @ ?tmpfs 1001093 1 1001092 1% /run/user/1002 i) U) c& X: Z
tmpfs 1001093 1 1001092 1% /run/user/0
* a" g" o' t+ g9 gtmpfs 1001093 1 1001092 1% /var/log/rtlog
1 }; P6 B& E. K: W S7 V. |# L% B0 l8 X O. B2 {4 E& S
9 M+ h' e6 O! w5 y; k
4 N9 ^1 X0 d4 p
; u ^- \2 {" u, g
1 R3 |3 ~8 |7 N, [( Y1 ]4 r
在这里我的inode用的就很多了。
% [+ l; f- n: P1 g- }4 ]) ?4 s
2 ]4 G" e& z) x0 f+ I8 E
8 S3 x5 q( t9 U/ a+ g% r7 L首先找到这些占用的无用文件
" A- X B# C8 |! Kfor i in /var/* ;do echo $i ;sudo find $i |wc -l ;done
/ D' m6 Q K9 `# B( q- O- Z4 v t J. I6 A+ Y
% ?/ N# k6 b7 I9 a2 Q1 H! S
\) ^+ z d) Q1 q
' \! m* b! ]! V: @8 o9 M B; a
for i in /*; do echo $i; find $i |wc -l; done2 O# @( ?# a6 S
- O4 I: @5 X; W7 U! ~. ?, ?) D- q* ]
执行上面的语句后, 会顺序从根目录的子目录循环查询, 如果有一个目录卡了很久, 就说明此目录可能存在很多文件., A! {7 g8 a9 `2 L6 J
; D* l5 j6 G: m6 W" ~4 T
1 O5 ]% `+ K4 n' H
然后到这个目录下继续查找
0 ?, N2 u! r2 s+ J: r# p7 {' x' ?3 |
7 l* G7 C3 b/ ^$ T+ I3 v. ?! A
循环这个过程直到找到.
X4 S! m q6 M+ p! J& B3 ^9 ]0 }! j; E" @* S+ {
* Q! F" [1 p2 V k. b
找到后酌情删除,删除后inode就会释放.7 a* y7 H* x" _$ x
7 ~2 D0 U' ~$ T7 M& h: K4 J$ e9 H+ q$ {# g3 _2 I! p* D: j
在这里说一点,/var/spool/clientmqueue目录文件太多,rm -rf *时候会提示:2 @: Z: [2 l4 T8 @" `
8 y* d- M* p; ^1 R0 R
. l7 K6 _; @- _“-bash: /bin/rm: Argument list too long“.. 意思是参数太长,rm 干不了。
% j; j+ P9 M4 T3 p5 w; S' j y
: j% w$ B2 [" |) m3 w A% L% V2 U
% Y+ E1 B, G3 [. n# \* n可以用ls | xargs rm -f这个命令将/var/spool/clientmqueue目录下所有文件删除。
$ g+ x6 J B( n; A. l0 C6 U" v! \! t( t
7 L8 q+ B4 H5 r- |8 c! J由于使用云服务器,无法直接删除,特写删除脚本如下:
5 v' M( P& U! {. O L
7 J/ t7 J+ ^; v3 j; J' X$ p i4 {7 I# o
#!/bin/bash9 Z: B% x' O2 |- i6 b
5 w2 V7 f% b4 |+ |* p
. Z, x$ A5 ~5 h1 ^& l. Zcd /var/spool/clientmqueue
7 N, {# Z: i7 B0 w2 r& J
* d" K' @( Q: r5 }& H5 q R1 Z, F# x4 A; e; R: d) T
filelist=`ls /var/spool/clientmqueue/`
. f7 H$ b; p; U0 O8 w; c% D; [ ?) e$ t* x% n) j: I
# Z2 `' L; ]& I9 J; Dfor file in $filelist( q+ Y8 w2 k. ?* j
do
3 C7 h! }7 r) u, R3 V+ j. i8 I0 z+ T( b' N2 {
. Y5 M. Z; ]. S8 D5 e7 a( ~ echo $file
0 s" c H9 @6 C4 y9 B) c sudo chown ec2-user:ec2-user $file! @! o7 Y. B9 k3 z2 Q0 K' `( u# z
sudo rm -rf $file
) _0 X" _: d- O8 \& k, K1 v0 w #sleep 2;/ g1 S8 a8 x" x/ ^
done
( \5 q/ d) s6 I
9 Q. F2 s. C. {( G9 m7 ?8 r2 @: u9 l3 j
|
|