|
|
今天zabbix报警,一台服务器的disk满了,使用du -sh * 或 du -sh /* 查看目录的大小,查找占用空间大的目录/var/spool/clientmqueue….
2 X" w& x" d3 J+ q解决
8 ]" P- A7 ?5 q
6 r2 j! ]8 o2 ~8 q' e5 H
( D0 } _- N& {" @" o+ j解决方法:在cron的自动执行语句后加上> /dev/null 2>&1
! H9 a$ Q; G1 y% e/ T' [例:
$ b7 }- q$ ~- Y$ [* 3 * * * /usr/bin/w > /dev/null 2>&1
( w6 S* V1 Y# u4 B这样就OK拉,就不会写到那个目录下了….
8 L% a) E" s/ \& _( V
' o! D; b% K: y; s3 w% _. b- U( f1 U* Q
恢复的唯一办法就是删除这些文件, 此方法仅仅用于大量的临时文件和缓存占用的inode. 如果数据不可删除, 就要想办法增加空间了。这里只讲怎么找到这些文件和删除它们.7 h, d4 H* y" I! o% [% G: t
: \& W7 O$ |" o$ r7 j; x4 k8 o
6 d: ^4 f2 R& H' V9 R检查inode剩余
) h+ R3 [. {. l! F+ v3 @df -i
9 R4 T3 L+ g6 F9 L" qFilesystem Inodes IUsed IFree IUse% Mounted on
2 b+ o& P- y4 `; ]% t' cdevtmpfs 998158 373 997785 1% /dev; v! t, v0 z1 {3 \7 e& |% x$ r, Y
tmpfs 1001093 1 1001092 1% /dev/shm4 L5 y; G% I% ], V4 ^; @% v
tmpfs 1001093 557 1000536 1% /run
" I! k* C% D8 ? h/ @tmpfs 1001093 16 1001077 1% /sys/fs/cgroup8 k/ f. q" t% ~6 L9 R8 x1 n$ q6 v! V
/dev/mapper/centos-root 286781440 67061 286714379 1% /1 k/ @* p$ o) _ _0 J: {! ^
/dev/vda1 524288 350 523938 1% /boot* j" g, M5 v3 u
tmpfs 1001093 1 1001092 1% /run/user/1002$ R c- o, A+ n# s8 r# S
tmpfs 1001093 1 1001092 1% /run/user/0
5 l+ i+ U! K6 R; {' \2 htmpfs 1001093 1 1001092 1% /var/log/rtlog9 K$ O9 a7 \% f
9 d$ W1 |5 S: F, l; u+ ^: a' d$ m0 b2 ]" {+ r7 N f! B* R8 i6 R
3 Y2 c" k$ a& Y0 O4 t) \
& _( }; E3 p4 n, N# Q( ~) G
) M7 y0 a$ ?' r4 G7 l% i; X在这里我的inode用的就很多了。
1 K- ]7 g9 t0 M) {. Z7 y
1 k$ _+ X2 Y5 `1 m2 r
. l7 }% a" Q0 @& y首先找到这些占用的无用文件$ U. ~" I4 N" c0 F1 v7 h9 z
for i in /var/* ;do echo $i ;sudo find $i |wc -l ;done
. F/ B6 H, w' u, c
6 {: Q5 R$ h; e: [# H g
7 ]" V! w, R2 E& _! P
. b& Y) |5 C/ e7 f
/ o- _# ]3 d, q' g$ L: o) j5 k for i in /*; do echo $i; find $i |wc -l; done9 [: ~0 h/ h9 X2 b, `& v2 _
* {0 _+ U0 I. E+ Y( R执行上面的语句后, 会顺序从根目录的子目录循环查询, 如果有一个目录卡了很久, 就说明此目录可能存在很多文件.
" r2 ?5 Y F1 F" y
5 t P1 n# [, _# J
% A, ~, V/ Z8 S5 B. f' t- o" V, T然后到这个目录下继续查找. H/ f6 n/ v6 [+ [# y* m" w* X/ X
+ c* G1 N" B. Y! ^. t$ w+ [- L/ A
# {) f" ]4 K1 l
循环这个过程直到找到.
' b+ }) `) \& @* Y/ a' w# v3 ~4 }# B# s( X/ Y# p
* J; a( l5 A! x+ i
找到后酌情删除,删除后inode就会释放.
# S: I/ y7 ?$ T: \8 \% Q2 q) k/ F) W# j& F( @( ?* `5 K. z
1 _* T; ]' v" l$ B在这里说一点,/var/spool/clientmqueue目录文件太多,rm -rf *时候会提示:
|% U* m0 s, _4 H* T
: p$ y9 d" c( r8 H$ O( l+ I Z7 N# J3 O8 C" }: u3 Q5 h
“-bash: /bin/rm: Argument list too long“.. 意思是参数太长,rm 干不了。
' G1 A O. }8 F; j
0 r8 I1 k1 A* ]8 K( M. N# S3 v7 o p$ o! a! J) K7 \: f+ E
可以用ls | xargs rm -f这个命令将/var/spool/clientmqueue目录下所有文件删除。& r1 Q ^8 a/ T* A4 a" H
( U( q* h" e5 q. g$ q3 u
7 o% J' Y" d1 v1 t+ z7 {由于使用云服务器,无法直接删除,特写删除脚本如下:& I4 l- u& s9 {# a) w) j5 H* w
# z8 i) W- C$ R" Y1 h+ }! N5 w2 o t) t; _: \4 q
#!/bin/bash$ C' w: c6 t5 r2 b
Z3 `. u- s# O: U
1 L @7 s# k! N
cd /var/spool/clientmqueue
3 b. h% K, w' W9 V5 p0 H8 J8 K* \- v, i
7 j; ]3 l. I1 C# m& p
filelist=`ls /var/spool/clientmqueue/`* P/ N1 V& n0 v' O
+ |7 O6 W1 T+ i5 k2 q- J5 r
3 t* ~5 A* U. E, b7 nfor file in $filelist
+ x% K4 e0 t6 W# r1 udo
; m% m P4 r0 F8 I6 `7 c# U6 @( W4 E) p0 g4 @2 P& m7 R. d/ I M% @
( @/ _ C" D$ G: k, S8 v' J echo $file
$ v0 G0 W3 ~( ?* R( Z sudo chown ec2-user:ec2-user $file
/ m% r- }6 m( i sudo rm -rf $file* W! F" z" z% L% p J7 U' R: c
#sleep 2;
5 w3 s5 U: ^$ \done X' ^1 f1 r4 E; A' P
) {* [1 f3 Y3 g. B, Z* y
1 r1 g% F" r6 D! B |
|