易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 420|回复: 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….% s3 {; q, y7 I# Z4 z6 H* [1 y
解决
: L2 x5 |* D6 a; {( o4 W% P
" g. H3 @0 t; c5 ?+ p- |3 k/ c

3 t' |; \2 O2 ~解决方法:在cron的自动执行语句后加上> /dev/null 2>&1+ i, B* j1 H! G9 N- B4 {7 u7 p& D
例:' T" F, i+ T8 z
* 3 * * * /usr/bin/w > /dev/null 2>&1
# n6 t# h; j2 P- j3 M" z2 S# h5 n# ~这样就OK拉,就不会写到那个目录下了….3 H: f, y5 K4 |
' [2 X+ v5 E) [% V% p

6 F2 x3 P7 C9 d恢复的唯一办法就是删除这些文件, 此方法仅仅用于大量的临时文件和缓存占用的inode. 如果数据不可删除, 就要想办法增加空间了。这里只讲怎么找到这些文件和删除它们.
. }$ [/ o) u; y4 w3 ], ^! }- m  @
" a$ y4 |, P6 l* V" T
检查inode剩余
  X; R1 P( t/ g, @2 A, I. Vdf -i6 K' p/ F; C$ Y2 y/ {5 m- \" b1 m
Filesystem                 Inodes IUsed     IFree IUse% Mounted on( N/ a: Y( }4 k
devtmpfs                   998158   373    997785    1% /dev
  r( b2 F$ t* B* ytmpfs                     1001093     1   1001092    1% /dev/shm
/ z! p/ ]9 D. V# `$ p) itmpfs                     1001093   557   1000536    1% /run
) c( t4 L  R  {4 F( }tmpfs                     1001093    16   1001077    1% /sys/fs/cgroup1 {5 l9 U7 V: K2 ~+ t6 t* ^
/dev/mapper/centos-root 286781440 67061 286714379    1% /! j% ^; V4 J: w+ b
/dev/vda1                  524288   350    523938    1% /boot
* A4 f7 H& a: p/ @( @$ }tmpfs                     1001093     1   1001092    1% /run/user/1002
6 v6 l. C& c0 G, n( q, D$ _tmpfs                     1001093     1   1001092    1% /run/user/0: ]9 K9 G, O/ T# B. z  {' y
tmpfs                     1001093     1   1001092    1% /var/log/rtlog: E4 I4 Y- b% a! h/ x( v
! a6 i/ Y) v% D% t% Q7 d

% ?% @9 q5 f/ n) T( T* I6 i& r9 w2 e
8 ~, [0 T; f/ b/ J1 Q

" L) s4 m) P$ b' T

5 |5 I% V  H  f在这里我的inode用的就很多了。( k4 S& u+ s# B

  q) y7 J9 u/ e. V2 D2 e* g( ]
0 `8 s$ [' ?2 T& O' h) t( c
首先找到这些占用的无用文件/ z9 U; T2 K) `+ ~# _
for i in /var/* ;do echo $i ;sudo find $i |wc -l ;done
( X0 b3 Y3 q; [9 \" X3 ]; }! G
4 @8 m5 o4 Y. O0 `- x$ i2 d

: B. H; k, S- `7 c
  e/ B/ M6 E' C  R: J6 D4 o$ M
6 b$ ^, C2 t1 D; A. ?
for i in /*; do echo $i; find $i |wc -l; done
" U( O4 N4 R" j0 v: d  I
" d/ p1 N( W- J执行上面的语句后, 会顺序从根目录的子目录循环查询, 如果有一个目录卡了很久, 就说明此目录可能存在很多文件.
; y8 P  R0 J9 b
+ z" {& H% i% G6 n1 [/ l
; j& W% S1 @, O
然后到这个目录下继续查找2 c% [, O+ ^1 r, o/ J4 |  R
- t3 Q. H7 t1 [: q% M; D. V" R

; a6 q. Z. q6 k2 `循环这个过程直到找到.5 x, Y6 t5 b0 e( E4 e

1 K1 H( y% T$ |0 N

: M/ v3 p. z& C找到后酌情删除,删除后inode就会释放.) W+ w4 s3 k$ O3 O( T  o+ K2 W
2 H0 i. \, r3 I" a3 a" h0 e/ p

: b1 h9 Z4 `% j$ J* h在这里说一点,/var/spool/clientmqueue目录文件太多,rm -rf *时候会提示:
+ Z& J8 f; `( X5 i# d
- t& v$ b/ a& b5 Z0 v

- K$ z- {" w4 g% G“-bash: /bin/rm: Argument list too long“.. 意思是参数太长,rm 干不了。
7 E, Q) M% w+ o+ t% |! }
+ G2 R, Z8 w$ B% P( l

4 \1 w' w6 P4 w& j; h可以用ls | xargs rm -f这个命令将/var/spool/clientmqueue目录下所有文件删除。, V* z3 a4 h; B4 k; m5 ^8 D
: D% \4 Z/ g4 o1 b+ d- f, a7 ^

" n# k0 }5 C: u" j8 g- D. {% L# T由于使用云服务器,无法直接删除,特写删除脚本如下:4 r# i! g: f: T/ T
% f% j- L" }9 ~6 w  [/ F7 L$ ]6 s
3 G# O$ C0 g7 }3 e) `
#!/bin/bash
7 [/ ^/ L0 h/ N; g! W
1 b  _9 r/ A  f2 _, z
/ ~3 ?& @8 p- q9 L
cd /var/spool/clientmqueue. V) Y- v' [+ }
( ^1 I0 `7 H9 [2 e8 m) t% K( ^

: F5 b# o) ?% _2 V5 I* Wfilelist=`ls /var/spool/clientmqueue/`5 k! l1 D0 {% G
3 M5 I0 ]: T8 s+ Y: z

. V6 @# S, B: j- ~# d1 ~for file in $filelist- k, k7 o5 d; U: p" p% ~
do % `& o  D3 U$ Z+ M7 l3 }

, C2 I4 N% q8 @8 a# ]' t

( N, X6 M+ k; T* S. g8 K  echo $file* v2 i7 ?; f! O0 f! ]8 ]7 H! `
  sudo chown ec2-user:ec2-user $file* O% L! n; H! L+ D( `. s! W4 q
  sudo rm -rf  $file# `- u. R' {* ^) ~0 j
  #sleep 2;0 `. {& k/ w1 |4 J; _
done
; j/ T( z: L& g# w" Y6 g
( a3 V( Q8 O- D6 ?0 m& t2 @+ A7 E/ A. }1 H: _. E5 b
 楼主| 发表于 2023-2-13 11:18:20 | 显示全部楼层
理解inode,要从文件储存说起。
- J6 P& l7 L& b9 q/ R3 l
8 R: x+ F7 g7 U& k8 _$ h% K文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
* U4 E8 A& i6 Z' d操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
( B, ]" Z) }* E* @3 y  V0 i, s* i1 h( N) X* k# d5 {
文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。
) O# b& `: g/ `7 c& F" T; p4 B每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
; U( c- ?: R0 D% Z# v4 a! c0 j9 q6 K: Z
所以当inode用完也会出现No space left on device, 造成磁盘的不可写入.
4 ]: u$ H) G7 X$ D$ c" n# Z
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

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

GMT+8, 2026-4-9 01:04 , Processed in 0.059586 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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