磁盘空间不足的另一种情况(实践篇)

前续文章:
情景linux–如何解决单日志文件过大导致的磁盘空间不足?
情景linux–如何解决单日志文件过大导致的磁盘空间不足?(实践篇)
情景linux–如何快速生成大文件?
情景linux–磁盘空间不足的另一种情况

从文章情景linux–磁盘空间不足的另一种情况中可知:

磁盘空间不足至少有三种情况:
磁盘block区用尽了;
磁盘inode区用尽了;
磁盘block区用尽后,删除文件但文件句柄未释放;
而情况3其实是情况1的特殊情况。

大多数情况下,磁盘空间不足应是情况1。特殊情况下,会遇到情况3,这也是文章情景linux–如何解决单日志文件过大导致的磁盘空间不足?中提到的场景。情况2我们在文章情景linux–磁盘空间不足的另一种情况中也做了理论介绍,本文则针对情况2进行实践。

在开始之前我们先使用命令查看磁盘情况(注意观察-i参数的统计列)。

$ df -ihl
Filesystem                   Inodes IUsed IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root   431K   54K  377K   13% /
tmpfs                          235K     1  235K    1% /dev/shm
/dev/sda1                      126K    39  125K    1% /boot
$ df -hl
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  6.7G  2.0G  4.4G  31% /
tmpfs                         939M     0  939M   0% /dev/shm
/dev/sda1                     485M   39M  421M   9% /boot

为了使得block区磁盘空间充足,而inode区空间不足,可以直接生成大量的空文件。新开一个终端窗口执行如下命令:

$ for i in `seq 1 1000000`;do touch $i.txt;done  
  

在产生大量空文件的过程中,可以不断用df -ihl命令了解inode区的占用情况:

find ./ | wc -l 
268738
 $ df -ihl
Filesystem                   Inodes IUsed IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root   431K  351K   80K   82% /
tmpfs                          235K     1  235K    1% /dev/shm
/dev/sda1                      126K    39  125K    1% /boot
$ df -hl
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  6.7G  2.0G  4.4G  31% /
tmpfs                         939M     0  939M   0% /dev/shm
/dev/sda1                     485M   39M  421M   9% /boot

即,产生了26w多个文件时,磁盘的inode区已经用掉了82%的空间,因而循环创建空文件的命令很快就会是inode区空间耗尽。

当创建了30多万个文件后,循环开始报错:

touch: cannot touch `386787.txt': No space left on device
touch: cannot touch `386788.txt': No space left on device
touch: cannot touch `386789.txt': No space left on device
...(省略)...
$ df -ihl

Filesystem                   Inodes IUsed IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root   431K  431K     0  100% /
tmpfs                          235K     1  235K    1% /dev/shm
/dev/sda1                      126K    39  125K    1% /boot
$ df -hl
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root  6.7G  2.0G  4.4G  31% /
tmpfs                         939M     0  939M   0% /dev/shm
/dev/sda1                     485M   39M  421M   9% /boot

总结

学习了磁盘相关的知识和这几篇文章的内容后,当遇到linux系统磁盘空间不足时,应区分是哪种情景:

  • 使用df -hl命令查看磁盘block区使用情况,并结合du命令进一步确认是哪些文件占用空间比较大,或者是删除了文件但空间没有释放;
  • 使用df -ihl命令查看磁盘inode区使用情况;

相关文章

情景linux–如何解决单日志文件过大导致的磁盘空间不足?
情景linux–如何解决单日志文件过大导致的磁盘空间不足?(实践篇)
情景linux–如何快速生成大文件?
情景linux–磁盘空间不足的另一种情况

    原文作者:软件测试技能栈
    原文地址: https://www.jianshu.com/p/ceaf21043812
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞