|
|
今天zabbix报警,一台服务器的disk满了,使用du -sh * 或 du -sh /* 查看目录的大小,查找占用空间大的目录/var/spool/clientmqueue….9 x6 r* @3 s- m7 G' }
解决$ W! U# {. H9 |8 Y) m# j
: P; x7 j, ]3 k: S: q) O
6 B/ }2 R/ \- j9 Z0 [
解决方法:在cron的自动执行语句后加上> /dev/null 2>&1) Y. e2 O$ p' n# x! i# g
例:: H7 Z) W0 S1 n/ ]7 ^7 m
* 3 * * * /usr/bin/w > /dev/null 2>&1
# F7 z4 W! o: v! p这样就OK拉,就不会写到那个目录下了…. k( E" a& z7 P, H2 ?) u
+ G8 T: N5 }1 S2 {1 O' d
3 f1 D/ Q) l5 j5 `* u' _' x) V
恢复的唯一办法就是删除这些文件, 此方法仅仅用于大量的临时文件和缓存占用的inode. 如果数据不可删除, 就要想办法增加空间了。这里只讲怎么找到这些文件和删除它们.3 n* Z1 J- J" k1 a$ \1 d
) G, R% a+ ]6 R7 e, I9 w& }
9 K; o, E B9 P3 C% i% a检查inode剩余9 q6 ]/ T; o5 y% u* `5 }/ u
df -i
' z! ?7 i0 Q a- aFilesystem Inodes IUsed IFree IUse% Mounted on
! \( x- v' ^0 M3 }devtmpfs 998158 373 997785 1% /dev
4 H' i D2 I8 K/ u( {* D8 ?% Ftmpfs 1001093 1 1001092 1% /dev/shm
. H0 ?3 z; }1 S! u$ ^; ftmpfs 1001093 557 1000536 1% /run
3 f8 U( ^5 x2 Utmpfs 1001093 16 1001077 1% /sys/fs/cgroup
/ h0 x% @9 t$ E( T3 M/dev/mapper/centos-root 286781440 67061 286714379 1% /4 Y$ ^2 F, `+ E
/dev/vda1 524288 350 523938 1% /boot) v8 l' N' _6 c' N% R
tmpfs 1001093 1 1001092 1% /run/user/1002
) C1 s# i% e; R; ptmpfs 1001093 1 1001092 1% /run/user/04 \1 Q2 o( \8 p# S- T \7 X
tmpfs 1001093 1 1001092 1% /var/log/rtlog/ e4 ^4 i; }0 f' U) u' d
x, e5 S A0 E |% S: S5 |: l2 _! U: m6 b0 U6 v9 E9 w; b% B+ R8 z
7 T* q$ ^4 x" U1 x- C) u" ^/ W6 q" i6 P/ ?1 O
: a: u+ q: s2 B0 S. E
在这里我的inode用的就很多了。# Q( k+ r% P4 E4 y. l
7 K6 [! @& x. F, f* Z1 J7 E9 k# B
0 V& h) x; p$ a! V1 y, @首先找到这些占用的无用文件
2 j/ `2 r1 G: z" xfor i in /var/* ;do echo $i ;sudo find $i |wc -l ;done2 t* C5 H( o% C2 f) u' c4 J2 \
" e y S1 Z" }6 f3 T% n
, F/ T0 [2 x6 {+ k: }3 |+ U; d& R5 I0 D! Y
: C. V' H, j/ ~( |' K, V9 N% M A3 t
for i in /*; do echo $i; find $i |wc -l; done
4 I& G' i5 T1 n
' {3 |% ^$ U7 [. A4 d/ D执行上面的语句后, 会顺序从根目录的子目录循环查询, 如果有一个目录卡了很久, 就说明此目录可能存在很多文件.5 z& L2 P$ s: b4 \" n
; ~; p* s+ I9 A6 A2 {5 {* C6 S9 L K" t+ L
然后到这个目录下继续查找6 J- \- Z+ ^4 O3 n' ?0 \, A" G
5 L. N3 M/ O4 H2 H+ e+ C+ e
' X" l! H0 e# N. ?循环这个过程直到找到.
! m9 ?; A5 b0 `$ l: q! i; l+ e1 n4 W0 Y
. C" G4 g' X/ n9 [$ e( [找到后酌情删除,删除后inode就会释放.+ \& M+ _9 S! C7 ?% q
1 F0 ^% R6 y3 j2 }; Y
0 a. ~1 e+ z3 C! R5 v. t在这里说一点,/var/spool/clientmqueue目录文件太多,rm -rf *时候会提示:
. F! S" U3 O1 q' d# y; @1 |* [* M; U( n1 ] i) T
4 k3 ~4 X2 K8 q$ N, l6 ~“-bash: /bin/rm: Argument list too long“.. 意思是参数太长,rm 干不了。
! s& C8 ]9 s: i: T
) S Q) R4 f- d. p! U+ p$ v R0 ]; `' t" K! {; \4 g9 S
可以用ls | xargs rm -f这个命令将/var/spool/clientmqueue目录下所有文件删除。
) Z$ c* t- L( K! c0 f) D% l8 A9 g Q' d
; G( H7 f) Q" @5 L
由于使用云服务器,无法直接删除,特写删除脚本如下:0 s! \0 |) V6 v. ]' ~
& n) I" Y3 S) J& b
+ K& U- |: Q* W3 T6 B#!/bin/bash
0 v8 ]: G1 K y2 D7 E- h5 A! @3 H1 j* c- t1 X+ n
9 _$ k) e0 o0 B& ?+ v
cd /var/spool/clientmqueue! a. z) }/ p z
$ f1 `; R0 ]7 c/ i; u3 E' g
9 ]0 J2 }4 n& `5 O5 }
filelist=`ls /var/spool/clientmqueue/`
Y) ]9 w( Z0 J9 P& y; }, `9 b( B4 J. u6 }
& a4 g* J! n& P8 \% b
for file in $filelist
" u( y: V: m$ o! Sdo
3 r3 I' k/ f1 Z! k3 s6 o7 R& H3 r! h: L* A J7 i: k
& p t' ?$ b: I" ]2 E# Z echo $file- I. y% E3 [! `& Z2 w) n
sudo chown ec2-user:ec2-user $file
/ d, u0 D* a/ Z9 X sudo rm -rf $file
: W6 q" w- K4 L f #sleep 2;1 Y4 J* H5 s/ A# T1 ^# t' @4 `
done
" m1 \5 U) o3 D4 }- c: p- s6 J, X8 j G @9 g+ Z( u
9 \) O3 f7 D5 [5 [ |
|