Linux 下查看磁盘命令之 df 及磁盘 inodes 耗尽问题排查

文章
林里克斯

Linux 下查看磁盘命令之 df 及磁盘 inodes 耗尽问题排查


实验平台:CentOS Linux release 7.6.1810 (Core)

df Version:df (GNU coreutils) 8.22


一、命令详解


1.参数详解

$ df --help
  -a, --all             #显示磁盘所有信息:包括伪的、重复的、不可访问的文件系统
  -B, --block-size=SIZE #指定单位显示,(K, M, G, T, P, E, Z, Y) e.g.,
      --direct          #显示文件的统计数据而不是挂载点
      --total           #合计出总数
  -h, --human-readable  #以人类可见的形式显示,优化单位 (e.g., 1K 234M 2G)
  -H, --si              #换算不一样,按 1000 换算而不是 1024
  -i, --inodes          #不显示磁盘使用量,显示 inodes 的使用情况
  -k                    #以KB的容量显示各文件系统,类似: --block-size=1K
  -l, --local           #只显示本地文件系统
      --no-sync         #在获取使用信息之前不要调用 sync 同步(默认)
      --output[=FIELD_LIST]  #使用 FIELD_LIST 定义的输出格式,如果省略 FIELD_LIST 则打印所有字段
  -P, --portability     #使用 POSIX output format
      --sync            #在获取使用信息之前调用 sync 同步
  -t, --type=TYPE       #显示指定类型的文件系统(ext3,ext4)
  -T, --print-type      #显示文件系统的类型
  -x, --exclude-type=TYPE   #不显示指定类型的文件系统
  -v                    (ignored)
      --help     #打印帮助信息
      --version  #打印版本信息

2.使用详解

$ df -lh
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        40G  9.1G   29G  25% /
devtmpfs        980M     0  980M   0% /dev
tmpfs           991M     0  991M   0% /dev/shm
tmpfs           991M   98M  893M  10% /run
tmpfs           991M     0  991M   0% /sys/fs/cgroup
/dev/sdb1       9.8G  2.9G  6.4G  31% /data
tmpfs           199M     0  199M   0% /run/user/1000

#Filesystem:代表该文件系统时哪个分区,所以列出的是设备名称
#Size:分配磁盘的容量
#Used:已使用的容量大小
#Avail:剩余容量的大小
#Use%:磁盘使用率百分比
#Mounted on:挂载点

二、使用示例


1.显示一个总量统计

$ df --total -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        40G  9.1G   29G  25% /
devtmpfs        980M     0  980M   0% /dev
tmpfs           991M     0  991M   0% /dev/shm
tmpfs           991M   98M  893M  10% /run
tmpfs           991M     0  991M   0% /sys/fs/cgroup
/dev/sdb1       9.8G  2.9G  6.4G  31% /data
tmpfs           199M     0  199M   0% /run/user/1000
total            54G   12G   39G  24% -

2.查看磁盘 inodes 使用率

$ df -ih
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sda1        2.5M  158K  2.4M    7% /
devtmpfs         245K   331  245K    1% /dev
tmpfs            248K     1  248K    1% /dev/shm
tmpfs            248K   747  247K    1% /run
tmpfs            248K    16  248K    1% /sys/fs/cgroup
/dev/sdb1        640K   36K  605K    6% /data
tmpfs            248K     1  248K    1% /run/user/1000

3.只查看类型为 ext4 的文件系统

$ df -ht ext4
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        40G  9.1G   29G  25% /
/dev/sdb1       9.8G  2.9G  6.4G  31% /data

#可以先用 -T 查看磁盘的文件系统类型
$ df -T
Filesystem     Type     1K-blocks    Used Available Use% Mounted on
/dev/sda1      ext4      41149664 9457940  29578396  25% /
devtmpfs       devtmpfs   1003488       0   1003488   0% /dev
tmpfs          tmpfs      1014056       0   1014056   0% /dev/shm
tmpfs          tmpfs      1014056   99948    914108  10% /run
tmpfs          tmpfs      1014056       0   1014056   0% /sys/fs/cgroup
/dev/sdb1      ext4      10189076 2960188   6688268  31% /data
tmpfs          tmpfs       202812       0    202812   0% /run/user/1000

三、问题排查


1.inodes 耗尽异常

$ df -ih
Filesystem              Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root   568K  568K   438  100% /
devtmpfs                  225K   385  225K    1% /dev
tmpfs                     228K     1  228K    1% /dev/shm
tmpfs                     228K   725  227K    1% /run
tmpfs                     228K    16  228K    1% /sys/fs/cgroup
/dev/sda1                 256K   327  256K    1% /boot
tmpfs                     228K     1  228K    1% /run/user/0
tmpfs                     228K     1  228K    1% /run/user/1000

2.查看文件最多的目录

# for i in /*; do echo $i; find $i | wc -l; done
/bin
1
/boot
325
/data
34
/dev
390
/etc
2350
/home
63
/lib
1
/lib64
1
/media
1
/mnt
1
/opt
1
/proc
56091
/root
49
/run
735
/sbin
1
/srv
1
/sys
43866
/tmp
7
/usr
72158
/var
510407
# /var 下有 51 万多个,继续查

# for i in /var/*; do echo $i; find $i | wc -l; done
/var/adm
1
/var/cache
177
/var/crash
1
/var/db
5
/var/empty
2
/var/games
1
/var/gopher
1
/var/kerberos
3
/var/lib
4210
/var/local
1
/var/lock
1
/var/log
61
/var/mail
1
/var/nis
1
/var/opt
1
/var/preserve
1
/var/run
1
/var/spool
505900
/var/tmp
35
/var/yp
1

# for i in /var/spool/*; do echo $i; find $i | wc -l; done
/var/spool/anacron
4
/var/spool/cron
2
/var/spool/lpd
1
/var/spool/mail
4
/var/spool/plymouth
1
/var/spool/postfix
505887

# for i in /var/spool/postfix/maildrop*; do echo $i; find $i | wc -l; done
/var/spool/postfix/maildrop
505847
#最后核实下来是 /var/spool/postfix/maildrop* 是这个目录里文件最多

3.删除文件

$ find /var/spool/postfix/maildrop/ -type f -exec rm {} \;
或
$ cd /var/spool/postfix/maildrop/
$ ls | xargs -n 1000 rm -rf
#如果都是文件建议使用 find 删除,耗时最慢

可以参考这篇 -> Linux 下删除大量文件效率对比

4.原因总结

由于 linux 在执行 cron 定时任务时,会将 cron 执行脚本中的 outputwarning 信息,都会以邮件的形式发送给 cron 所有者。由于客户环境中的 sendmailpostfix 没有正常运行,邮件发送不成功,导致全部小文件都堆积在 maildrop 目录下,再由于缺乏自动清理的机制,故此目录下堆积了大量的文件.

5.优化

1.设置 crontab -e 第一行增加MAILTO="" ,就没有文件产生
2.将输出文件定一只 /dev/null 
    00 22 * * * /usr/local/bin/python3 /root/wether/wether.py > /dev/null 2>&1

Over~

版权协议须知!

本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意

1271 0 2021-01-04


分享:
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
博主卡片
林里克斯 博主大人
一个致力于Linux的运维平台
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。

现在时间 2024-12-28

今日天气
站点统计
  • 文章总数:241篇
  • 分类总数:29个
  • 评论总数:12条
  • 本站总访问量 353090 次

@奥奥

@Wong arrhenius 牛比

@MakerFace 厉害了!