|
|
今天zabbix报警,一台服务器的disk满了,使用du -sh * 或 du -sh /* 查看目录的大小,查找占用空间大的目录/var/spool/clientmqueue….9 R' g- p6 [, |& A' a$ U8 i0 D
解决 l b$ J4 ^( S% n1 o' ?& I
s- b( b& ^7 |! O
( ]/ j% R' s/ n; d6 h解决方法:在cron的自动执行语句后加上> /dev/null 2>&17 @5 _, m3 g1 g3 Z$ E9 [: u0 R
例:8 l# |0 M, p4 R4 Q
* 3 * * * /usr/bin/w > /dev/null 2>&1
' v; c: C0 J. b' R2 L这样就OK拉,就不会写到那个目录下了….
6 v" Y4 K" S6 q% x: |: Y. w* N% j
6 j2 h0 k# l7 T1 F1 \恢复的唯一办法就是删除这些文件, 此方法仅仅用于大量的临时文件和缓存占用的inode. 如果数据不可删除, 就要想办法增加空间了。这里只讲怎么找到这些文件和删除它们.% R, u8 q- _5 ^3 |0 O0 K
7 A' C; x6 c; M+ w/ |
E0 p+ V# m: p4 Y1 G9 Z: h3 Q检查inode剩余
6 Q; a3 _6 _3 n% b+ ~) adf -i
, o6 O3 u2 c- v2 y( J( lFilesystem Inodes IUsed IFree IUse% Mounted on
L: m+ D( W7 x( X0 a( X5 `devtmpfs 998158 373 997785 1% /dev
) j; I) F5 p% B' E1 v, O( w" btmpfs 1001093 1 1001092 1% /dev/shm- L+ J8 C6 I0 [# b
tmpfs 1001093 557 1000536 1% /run$ X% X p& }) b: C0 @
tmpfs 1001093 16 1001077 1% /sys/fs/cgroup
* O& B9 |5 \/ l6 H; |4 f( s7 R! g/dev/mapper/centos-root 286781440 67061 286714379 1% /$ V" A7 t3 A( L
/dev/vda1 524288 350 523938 1% /boot" X& Z" s/ p6 t
tmpfs 1001093 1 1001092 1% /run/user/10026 H7 J5 n9 G+ x0 R: z5 F
tmpfs 1001093 1 1001092 1% /run/user/08 p$ {( c$ ?1 G2 B+ ], n
tmpfs 1001093 1 1001092 1% /var/log/rtlog
' Y0 c- f* I \# K& \# l8 h9 h. }) {6 u' R% c0 _
- P( C# k3 ?* Q" e } J8 t1 j. h1 Q! |0 V' ]" U
% m5 F; ?; S* F( y" v' j- j
& [0 R& ^4 F" k* v3 k1 e3 R在这里我的inode用的就很多了。
9 S7 N9 l4 t: u0 b3 ?/ w+ M4 H% q+ b
8 z, k6 w% C% O* ?5 t" f# p/ C首先找到这些占用的无用文件 d/ b+ m( {( `2 T" q6 d
for i in /var/* ;do echo $i ;sudo find $i |wc -l ;done0 l( Q' y& r7 D3 b! {7 I6 N# Q
) k, n1 u* g7 Q) k
+ S; q9 S1 U0 m& J" Z& j- V- l0 L. R# k" ?" F
4 u, d0 V( _0 S5 B8 C+ _ for i in /*; do echo $i; find $i |wc -l; done# S6 j5 n# `/ C* [2 M& u
) _% t: O- B4 A& u5 H" m: t9 \: O7 @0 F' g
执行上面的语句后, 会顺序从根目录的子目录循环查询, 如果有一个目录卡了很久, 就说明此目录可能存在很多文件.
7 R6 p6 J: v7 @) r* u' n
% m# O2 S+ F5 c) O) w
% J' D, s: \$ r$ j; e0 C) Z9 q5 H7 A然后到这个目录下继续查找5 `1 I3 g+ f' O7 o- k8 Z7 R: m; \
% t1 i, G/ }0 }- h$ d1 ^5 @, D- j1 S" m Y# R
循环这个过程直到找到.
; Y& ~$ ?2 ]" j1 t) S& J
. a, t! G: K4 M! u; s- V7 f7 x9 l8 \. H+ w$ x
找到后酌情删除,删除后inode就会释放.
# U8 j. y3 B7 y9 L9 Z
- G" d. J! ]" k8 M E! B9 a% V- ~5 J3 @3 S4 K9 ]* ~% N
在这里说一点,/var/spool/clientmqueue目录文件太多,rm -rf *时候会提示:
/ B- Z4 d# A, E, N2 O, S9 P
4 S) r! a# r h& y6 Z) ^' L) p8 o2 @+ [5 u
“-bash: /bin/rm: Argument list too long“.. 意思是参数太长,rm 干不了。
) p3 T9 O; _1 {# u% ]* ?- F
. p. L, k J1 d; y: ~+ d* }9 d# D/ O0 v/ ^, G
可以用ls | xargs rm -f这个命令将/var/spool/clientmqueue目录下所有文件删除。0 r V1 l! A" A0 N- R) c
6 E0 y9 ^1 r! G. h
- v H% A1 a, r* A. X由于使用云服务器,无法直接删除,特写删除脚本如下:
8 j! f9 M* n4 L( E8 x2 \9 `
) d4 ^/ d+ T- v% }( ` x' Q! h$ n4 Z% K: C# T" Y
#!/bin/bash
# O$ D! i+ }2 j. a) |: {
1 M! U# @4 J0 m* u* r m7 P7 t B4 Q9 ^$ n
cd /var/spool/clientmqueue
- M' t: O* h0 X6 t2 ]/ a3 R# _! |. w8 ]; Q/ M
* x4 n0 \6 t U1 F
filelist=`ls /var/spool/clientmqueue/`! K6 v5 ]. ], p h4 ]" p
. y/ O8 o& H1 v/ B) e: T' s. Z3 n" ]5 n4 y& c
for file in $filelist
2 I+ I C: Z8 A) B% c! w' }: O! i& Xdo
6 x% c$ `2 m+ F8 U! p+ ~, Y, h
6 e, U' ]( |( t. D8 t
echo $file8 l1 s; t) t' y/ Z- f+ a) y
sudo chown ec2-user:ec2-user $file
3 E$ i" B/ g2 ~4 x/ T K- ` sudo rm -rf $file( G! [5 L& p8 G* `% x& x
#sleep 2;
) E8 p* m% z' S4 k! mdone
7 Q7 P; T( p6 K' r0 c# q% b( v' f9 s5 T: L
% a$ L' k# K4 g( ?. E3 J- r Z3 v |
|