易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 418|回复: 1
收起左侧

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

[复制链接]
发表于 2023-2-13 11:17:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
今天zabbix报警,一台服务器的disk满了,使用du -sh * 或 du -sh /* 查看目录的大小,查找占用空间大的目录/var/spool/clientmqueue….0 v/ H9 M& G* o; j
解决* N; L. n4 k3 }9 G2 N
1 d1 E0 t) ?' C
  O0 W& \, J! s, z5 t  J
解决方法:在cron的自动执行语句后加上> /dev/null 2>&1; ~" n/ M! r/ S* \( j, h4 K  z0 H
例:
  M4 O+ \& n5 E% R8 B9 M& X( p8 I* 3 * * * /usr/bin/w > /dev/null 2>&1. z5 z' n$ u, A/ [' [% x
这样就OK拉,就不会写到那个目录下了….+ I  b; h0 M/ A/ n! }
: j7 x! g6 ?+ @: F" O& [3 a
% `$ P+ `( @5 @$ M
恢复的唯一办法就是删除这些文件, 此方法仅仅用于大量的临时文件和缓存占用的inode. 如果数据不可删除, 就要想办法增加空间了。这里只讲怎么找到这些文件和删除它们.3 A  I! u; ], A. g9 O, M
  a3 V# s! x. z, [' v3 i. y

; Y3 A6 ^  h# m' |4 v% f检查inode剩余2 a  V6 t2 `+ w7 S$ o/ {
df -i4 B6 s  f8 q6 s
Filesystem                 Inodes IUsed     IFree IUse% Mounted on7 ?8 v- n% K4 e2 Q2 @: M  I: n5 S
devtmpfs                   998158   373    997785    1% /dev
. K3 A* f, U8 g0 a+ n: Ctmpfs                     1001093     1   1001092    1% /dev/shm
% a% W5 Q4 g  }4 ^: ~, E# vtmpfs                     1001093   557   1000536    1% /run
: W' f0 D/ N8 X) Q- ztmpfs                     1001093    16   1001077    1% /sys/fs/cgroup( V1 b" ?6 Y. |0 @) p) }
/dev/mapper/centos-root 286781440 67061 286714379    1% /
6 u0 v$ B/ s: i) z$ _5 j# R' f6 Z/dev/vda1                  524288   350    523938    1% /boot
' x- t/ Q9 h% htmpfs                     1001093     1   1001092    1% /run/user/1002
) `; L: S# z- _* e  z. Qtmpfs                     1001093     1   1001092    1% /run/user/0
7 N  O* `$ {3 @2 H5 Stmpfs                     1001093     1   1001092    1% /var/log/rtlog
1 ]: M# P  Q$ x( R# u  c! A3 U

2 s% Q9 ]# u/ }3 E  ]5 y) R
" N' s5 u% [# {5 u/ c
% v% h  i: ~9 I, y
5 P; F/ w; h) e3 ~4 d
/ E/ r$ O3 \9 H0 \( r: M
在这里我的inode用的就很多了。1 K- W0 o  i& O! J2 J4 ~
* e6 y# ?- v) T: v* ?- ^7 `
3 I2 Q" C/ S/ f2 N/ J
首先找到这些占用的无用文件
4 m+ }/ q  i  z6 s- g! p. ufor i in /var/* ;do echo $i ;sudo find $i |wc -l ;done
+ U* f. [# L5 E5 D9 a
8 y. S( U) B. G6 z) U1 D+ v

" z: V& k: w2 {! S* ?( {5 f6 K! W/ y1 e9 i# ]( t3 g# i, u' N' {2 `# u
% u7 ~. I) s9 k3 `. G3 `/ r
for i in /*; do echo $i; find $i |wc -l; done
) q( K' p$ d$ ]+ j7 L% e! |! d. w2 R5 H
执行上面的语句后, 会顺序从根目录的子目录循环查询, 如果有一个目录卡了很久, 就说明此目录可能存在很多文件.
( y+ c, f& J# a: O( j* _4 T0 u
* [- X" H- E- n& _

6 m0 `; e& ?1 m! `% T1 Q然后到这个目录下继续查找% ]# F4 r1 R' y* o$ _, B1 J

3 H& t9 z9 i/ C3 `# b7 N2 R

9 L* Q* V# |9 K, u$ b* A循环这个过程直到找到.% R- K' v" i" k" C$ q
; O* m/ k& V( ?, N# c

4 u- F$ E2 u( v( V2 d  D! L* E找到后酌情删除,删除后inode就会释放.
9 b2 ^  s2 H. I9 p, ]. L
. R5 l; T4 h0 Y: l: T' X. H
% S7 M9 @' `4 t' ~2 t% o% V
在这里说一点,/var/spool/clientmqueue目录文件太多,rm -rf *时候会提示:
& f+ C+ u' f5 y8 G. q$ ~3 Y; N( r- R. U. M2 I5 C
+ r4 l/ c  p8 Z! F% S
“-bash: /bin/rm: Argument list too long“.. 意思是参数太长,rm 干不了。5 l  C; b3 C$ j, j  O: T
7 D  c9 c4 m' }* ~- |3 l
) L2 ?+ E  N* S* K7 r/ Z
可以用ls | xargs rm -f这个命令将/var/spool/clientmqueue目录下所有文件删除。6 t& {8 G  t$ ^

) Q& V: o4 h7 r0 ]- L
% c! c4 p0 L/ U: T( i, J
由于使用云服务器,无法直接删除,特写删除脚本如下:
( b+ {: w. i# L7 U, ?- N& |. Q" X
# t' B4 `! i" n) i) x
1 {3 o% S( v1 O* W
#!/bin/bash+ A( k7 |  S, Y
3 X& L% c# Q. x  o2 U, I

0 R1 N) v, p" r! n, M1 o: Rcd /var/spool/clientmqueue  b4 x7 m$ X- ?* t

6 G0 h) n" S" V1 [4 s0 T

+ _7 V) U* K( C& p' A5 V; yfilelist=`ls /var/spool/clientmqueue/`
1 z3 ~$ k- X% J! O' ]) I4 u  _$ p, n. m" \4 J3 w

+ H6 ?" y  u+ T) E& sfor file in $filelist
9 o9 h- O5 j  e# Sdo
+ {3 ]. S6 K  B; P
7 x8 `6 J" w# |! u

: r: g2 S7 V; ^4 u4 `0 z; g7 G  echo $file. X/ ]0 ]  p1 i# ?( X8 G- F
  sudo chown ec2-user:ec2-user $file- s7 d* }$ r: V2 |
  sudo rm -rf  $file
( }) O7 X* K1 O# {7 t3 [  #sleep 2;- k9 n% @1 S* ~8 |' Z. O0 ~2 g
done
9 ?8 x; r3 Z9 i! Z7 ?8 s& f- W
8 p4 v7 L8 c% q5 R( V% @. W) d# l0 Z/ W
 楼主| 发表于 2023-2-13 11:18:20 | 显示全部楼层
理解inode,要从文件储存说起。
* ]8 j) N% T, Y2 m5 C, _, C8 C& @, L& r' P4 W
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
* r. N9 W1 {/ \. o- o操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
# v6 P  _* Z2 P+ C
" {& x! y3 \! T文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。
! a2 H& h$ K% }  a% M每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
& u5 E0 F' {: E2 q' v; N: S7 m
6 C5 g$ Z- G  \8 Y& n6 T所以当inode用完也会出现No space left on device, 造成磁盘的不可写入.
8 G- q  ?* u6 T& p
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:37 , Processed in 0.057387 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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