找回密码
 注册
查看: 424|回复: 1

inodes过载问题解决 :Free inodes is less than 10% on volume /

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-2-13 11:17:11 | 显示全部楼层 |阅读模式
今天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 f
7 x9 l8 \. H+ w$ x
找到后酌情删除,删除后inode就会释放.
# U8 j. y3 B7 y9 L9 Z
- G" d. J! ]" k8 M  E! B
9 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  m
7 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

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-2-13 11:18:20 | 显示全部楼层
理解inode,要从文件储存说起。
5 ?7 V. t, t. f& C8 t. t9 j
! y. f" R& v  ]8 B5 Q# ?文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
) I1 {. s+ t% ?2 n6 G6 ^* w2 T2 K操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
7 J7 C, T# T5 S6 ?2 W0 }& O
  E" f$ f% `2 R文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。; p: w6 L2 k! M' N5 n0 y5 p
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
6 y+ \# g* Q$ Z! D
) k/ l: f( @' W% v所以当inode用完也会出现No space left on device, 造成磁盘的不可写入., v) q7 ~& c. L2 X& v7 e
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 03:21 , Processed in 0.017045 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表