找回密码
 注册
查看: 421|回复: 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 [9 \: \6 c  a  q0 F解决
+ I% z! H* X7 i" ]" e6 |# P, P( j7 _% k1 J9 j" f

# K) M2 [% C4 q解决方法:在cron的自动执行语句后加上> /dev/null 2>&1( X( W  l& c! ]
例:  b5 r6 h) p  S* M
* 3 * * * /usr/bin/w > /dev/null 2>&1! I& m/ p! C* m9 n. G: U9 [! \: k
这样就OK拉,就不会写到那个目录下了….. F: R* w2 T$ Y1 [$ T  z! e6 D
" e9 ^7 T3 l; C2 p6 Z  l4 Z

7 I9 r$ W& k- D+ G! A恢复的唯一办法就是删除这些文件, 此方法仅仅用于大量的临时文件和缓存占用的inode. 如果数据不可删除, 就要想办法增加空间了。这里只讲怎么找到这些文件和删除它们.
- W! u1 E# V' T% b/ h! T+ n) p4 l% k6 L- Y. l) c# V3 e
; S; {  P  I! H" s
检查inode剩余
' U$ N; ~+ G  f& r! [/ wdf -i
! O' b9 |* b# tFilesystem                 Inodes IUsed     IFree IUse% Mounted on
5 c$ r# @* `0 Ldevtmpfs                   998158   373    997785    1% /dev
* s( e% m* K, s9 E( c0 N* Jtmpfs                     1001093     1   1001092    1% /dev/shm
% l; y/ \1 P# l+ l0 a. F: b+ `( ntmpfs                     1001093   557   1000536    1% /run
: @4 m- O# i/ E" I% P9 Ptmpfs                     1001093    16   1001077    1% /sys/fs/cgroup
/ ?! Y+ a2 a1 v3 Q/dev/mapper/centos-root 286781440 67061 286714379    1% /
7 \* z1 F, I' H1 J/dev/vda1                  524288   350    523938    1% /boot
: P! N  ~( d5 G$ @  ?tmpfs                     1001093     1   1001092    1% /run/user/1002  i) U) c& X: Z
tmpfs                     1001093     1   1001092    1% /run/user/0
* a" g" o' t+ g9 gtmpfs                     1001093     1   1001092    1% /var/log/rtlog
1 }; P6 B& E. K: W  S7 V. |
# L% B0 l8 X  O. B2 {4 E& S
9 M+ h' e6 O! w5 y; k
4 N9 ^1 X0 d4 p
; u  ^- \2 {" u, g
1 R3 |3 ~8 |7 N, [( Y1 ]4 r
在这里我的inode用的就很多了。
% [+ l; f- n: P1 g- }4 ]) ?4 s
2 ]4 G" e& z) x0 f+ I8 E

8 S3 x5 q( t9 U/ a+ g% r7 L首先找到这些占用的无用文件
" A- X  B# C8 |! Kfor i in /var/* ;do echo $i ;sudo find $i |wc -l ;done
/ D' m6 Q  K9 `# B( q- O- Z4 v  t  J. I6 A+ Y
% ?/ N# k6 b7 I9 a2 Q1 H! S
  \) ^+ z  d) Q1 q
' \! m* b! ]! V: @8 o9 M  B; a
for i in /*; do echo $i; find $i |wc -l; done2 O# @( ?# a6 S
- O4 I: @5 X; W7 U! ~. ?, ?) D- q* ]
执行上面的语句后, 会顺序从根目录的子目录循环查询, 如果有一个目录卡了很久, 就说明此目录可能存在很多文件., A! {7 g8 a9 `2 L6 J
; D* l5 j6 G: m6 W" ~4 T
1 O5 ]% `+ K4 n' H
然后到这个目录下继续查找
0 ?, N2 u! r2 s+ J: r# p7 {' x' ?3 |
7 l* G7 C3 b/ ^$ T+ I3 v. ?! A
循环这个过程直到找到.
  X4 S! m  q6 M+ p! J& B3 ^9 ]0 }! j; E" @* S+ {
* Q! F" [1 p2 V  k. b
找到后酌情删除,删除后inode就会释放.7 a* y7 H* x" _$ x

7 ~2 D0 U' ~$ T7 M& h: K4 J$ e
9 H+ q$ {# g3 _2 I! p* D: j
在这里说一点,/var/spool/clientmqueue目录文件太多,rm -rf *时候会提示:2 @: Z: [2 l4 T8 @" `

8 y* d- M* p; ^1 R0 R

. l7 K6 _; @- _“-bash: /bin/rm: Argument list too long“.. 意思是参数太长,rm 干不了。
% j; j+ P9 M4 T3 p5 w; S' j  y
: j% w$ B2 [" |) m3 w  A% L% V2 U

% Y+ E1 B, G3 [. n# \* n可以用ls | xargs rm -f这个命令将/var/spool/clientmqueue目录下所有文件删除。
$ g+ x6 J  B( n; A. l0 C6 U" v! \! t( t

7 L8 q+ B4 H5 r- |8 c! J由于使用云服务器,无法直接删除,特写删除脚本如下:
5 v' M( P& U! {. O  L
7 J/ t7 J+ ^; v3 j; J' X
$ p  i4 {7 I# o
#!/bin/bash9 Z: B% x' O2 |- i6 b

5 w2 V7 f% b4 |+ |* p

. Z, x$ A5 ~5 h1 ^& l. Zcd /var/spool/clientmqueue
7 N, {# Z: i7 B0 w2 r& J
* d" K' @( Q: r5 }& H5 q
  R1 Z, F# x4 A; e; R: d) T
filelist=`ls /var/spool/clientmqueue/`
. f7 H$ b; p; U0 O8 w; c% D; [  ?) e$ t* x% n) j: I

# Z2 `' L; ]& I9 J; Dfor file in $filelist( q+ Y8 w2 k. ?* j
do
3 C7 h! }7 r) u, R3 V+ j. i8 I0 z+ T( b' N2 {

. Y5 M. Z; ]. S8 D5 e7 a( ~  echo $file
0 s" c  H9 @6 C4 y9 B) c  sudo chown ec2-user:ec2-user $file! @! o7 Y. B9 k3 z2 Q0 K' `( u# z
  sudo rm -rf  $file
) _0 X" _: d- O8 \& k, K1 v0 w  #sleep 2;/ g1 S8 a8 x" x/ ^
done
( \5 q/ d) s6 I
9 Q. F2 s. C. {( G9 m7 ?8 r2 @: u9 l3 j

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-2-13 11:18:20 | 显示全部楼层
理解inode,要从文件储存说起。  S$ J& y# @1 d4 |

3 Y$ D$ N9 c9 y文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。  F# Y) F- A- U% E" W/ m
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
: U( A- |. `# x$ T: O
7 S: W9 f* U) |8 ?( v文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。4 `) I$ J/ M6 D# E. B% J
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。, N' l1 F4 P+ z7 B/ f
5 I% |. b) z# Q3 Q& q* o  Z8 a# v
所以当inode用完也会出现No space left on device, 造成磁盘的不可写入.4 H) w, u5 Q) Z- W7 z) w4 n3 G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 02:06 , Processed in 0.016107 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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