找回密码
 注册
查看: 426|回复: 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 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 [

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-2-13 11:18:20 | 显示全部楼层
理解inode,要从文件储存说起。
, _9 d3 n! \/ ^
8 k8 S* ^# Z) F6 c; L" K文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
% Z3 _9 m6 C3 [0 M) ^- ?操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
& {) X- l! ], T3 e' [# q; ~) x* T3 Y: G
文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。
' u4 f: U1 n" c7 G  p' v每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
; v0 d( \6 t2 c; c' c- R9 L
1 ]+ X2 x* O5 ^2 y所以当inode用完也会出现No space left on device, 造成磁盘的不可写入.
; j: \2 d! W; {* N
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 04:32 , Processed in 0.017379 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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