Linux 暂时认为磁盘已满

Linux 暂时认为磁盘已满

我在一台装有 CentOS 6.5 和 QDR Infiniband 网络上的 NAS NFS 的 Linux 服务器上工作。我正在运行一个bash脚本,该脚本基本上会创建一个目录,在其中创建符号链接,并将cat一个小文件放到每个目录中。它对几百个目录执行此操作。

我在输出日志中注意到,其中一个符号链接和后续符号链接cat无法运行,并声称磁盘已满。但事实显然并非如此。对几千个目录运行同一个脚本后,我开始收到大量此类消息。我检查后发现磁盘似乎已满,因此我立即终止了脚本,但几分钟后,磁盘又恢复正常。

下面是df我看到的顺序命令,第一个命令是在脚本运行时执行的,第二个命令是在脚本终止之后执行的,第三个命令是在几秒后/home3(NAS)执行的,这就是我正在处理的命令:

[swfl 07:40:56 JPM]$ df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_misisss6-lv_root  135G   25G  104G  19% /
tmpfs                             12G     0   12G   0% /dev/shm
/dev/sda1                        485M   69M  392M  15% /boot
misisss-nasib3:/home              26T   26T  1.0M 100% /home3
misisss-nas1:/shared              77G  437M   73G   1% /shared
misisss-nasib2:/home              15T   15T   95G 100% /home2
You have new mail in /var/spool/mail/swfl

[swfl 07:41:39 JPM]$ df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_misisss6-lv_root  135G   25G  104G  19% /
tmpfs                             12G     0   12G   0% /dev/shm
/dev/sda1                        485M   69M  392M  15% /boot
misisss-nasib3:/home              26T   26T  1.0M 100% /home3
misisss-nas1:/shared              77G  437M   73G   1% /shared
misisss-nasib2:/home              15T   15T   94G 100% /home2

[swfl 07:41:58 JPM]$ df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_misisss6-lv_root  135G   25G  104G  19% /
tmpfs                             12G     0   12G   0% /dev/shm
/dev/sda1                        485M   69M  392M  15% /boot
misisss-nasib3:/home              26T   21T  4.2T  84% /home3
misisss-nas1:/shared              77G  437M   73G   1% /shared
misisss-nasib2:/home              15T   15T   93G 100% /home2

当时,大多数核心的 CPU 使用率相对较低,磁盘使用率也处于低到中等水平。我没有运行监控软件,因此无法提供 IOps 数据或任何类似数据,但我做过类似但强度高得多的工作,没有出现问题。

简而言之,很难相信我所做的工作会压倒系统的任何部分。面包屑在哪里搜索问题?

更新 1运行watch 'df -h; df -i'跟踪 inode 和磁盘使用情况时,我可以看到磁盘空间急剧下降(大约 5 秒内一切正常,然后几 TB 在 10-20 秒内消失),直到我开始出现错误,但 odes 并没有下降那么多。

不过,我可以看到 odes 的利用率确实相当高(30-70%)。我有大约 160 亿个 inode,正在创建大约 40000 个文件/目录。在我终止该进程后,磁盘空间将开始缓慢攀升(几 GB),持续 10-20 秒,然后又会回升几 TB,回到原来的水平。

答案1

通过观察磁盘空间在 5 分钟的周期内释放的情况,我们能够识别问题所在。这可能是我们使用的文件系统所特有的行为,XFS 文件系统

XFS 允许您指定预分配的文件大小。我们使用 挂载了文件系统allocsize=1G,因为这个文件系统是为大文件构建的,我们希望避免碎片化。您还可以为文件系统指定更新频率,然后返回并根据预分配的值修改利用率。默认值为 5 分钟,这就是我们看到这种周期性行为的原因。可以找到有关此行为的一些相关信息这里

因此,当我创建一个文件,然后对它执行操作时cat,对该文件的第二个操作足以触发系统为该文件预分配 1 GB。以极高的速度循环处理数千个这样的文件,导致在存储单元调整这些分配之前,所有磁盘空间似乎都已耗尽。

我们已经删除了该挂载选项,以允许文件系统采用动态预分配,这对于较小的文件和文件系统可用容量更加智能。

相关内容