发现系统一个诡异事件

发布于 2022-10-15 05:23:39 字数 323 浏览 15 评论 0

发现系统一个诡异事件

[root@localhost usr]# du -sh /usr
2.0G    /usr
显示使用2G
而[root@localhost usr]# df -h |grep /usr
/dev/sda3              15G   15G     0 100% /usr
无语了!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

悲凉≈ 2022-10-22 05:23:39

本帖最后由 weichongli 于 2011-06-02 17:21 编辑

这个么……有什么好稀奇的?

进程创建的文件把磁盘写满了,随后进程把创建的文件给删掉,但是没有关闭文件,就会出现你这个现象。

下面附送一段代码用于重现此问题(有点乱,不要嫌弃,编译之前改改count的值先,对linux C不熟悉的话,不要轻易尝试,请勿在生产环境下尝试,如有意外,本人不承担连带损失):

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. int main() {
  6.         char *fn = "/dev/shm/cl.20110602.test";
  7.         FILE *fp = fopen(fn, "w");
  8.         int bufsiz = 1024*1024;
  9.         int count = 1024;
  10.         char *buf = malloc(bufsiz);
  11.         memset(buf, 'z', bufsiz);
  12.         printf("gen...., wait plz\n");
  13.         int i = 0;
  14.         for(i = 0; i< count; i++) {
  15.                 fwrite(buf,  bufsiz, 1, fp);
  16.         }
  17.         printf("\n\nBefore unlink:\n\n");
  18.         system("du -sm /dev/shm/; echo; echo; df -m /dev/shm");
  19.         printf("\n\nPress ENTER to continue ... ");
  20.         getchar();
  21.         printf("Unlink");
  22.         if(!unlink(fn)) printf("OK\n"); else { printf("Failed, exit\n"); return 1; } //注意,已经unlink(),但还没有fclose()关闭文件
  23.         printf("\n\nAfter unlink:\n\n");
  24.         system("du -sm /dev/shm/; echo; echo; df -m /dev/shm");
  25.         printf("\n\nPress ENTER to exit\n");
  26.         getchar();
  27.         fclose(fp); //
  28. }

复制代码你的问题解决起来也很容易,

  1. fuser -m /usr/

复制代码把所有在/usr/下打开文件的进程找出来,然后挨个

  1. ls -l /proc/$THE_PID/fd/

复制代码看看哪个进程打开了/usr/下面的文件并是deleted状态的,干掉以后,磁盘空间就有了。

伪装你 2022-10-22 05:23:39

是这样呀,关注一下。。

煮茶煮酒煮时光 2022-10-22 05:23:39

不知道 咋回事

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文