0

我正在使用 BusyBox v1.1.2 (2008.07.18-08:25+0000)。我想创建新文件,我使用
touch ModelInfo
但响应是
touch: ModelInfo: No space left on device
所以,我检查可用空间:

/web/en $ df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                14.0M     13.8M    236.0k  98% /
none                    256.0k     68.0k    188.0k  27% /syslog
none                      1.0M         0      1.0M   0% /tmp
nome                      7.0M      6.3M    728.0k  90% /onvif
none                      1.0M         0      1.0M   0% /mempic
none                      6.0M         0      6.0M   0% /memrec

正如我在 Google 中看到的,inode 存在问题。好的,我跑

for i in /*; do echo $i; find $i | wc -l; done

输出是下一个:

/arm
      14
/bin
      81
/boot
      1
/capture
      2
/dev
    310
/disk
      9
/etc
     57
/hisi-pci
     13
/hisi-pci-wifi
     12
/home
      1
/komod
     72
/lib
     52
/lib64
      1
/linuxrc
      1
/lost+found
      1
/mempic
      5
/memrec
      5
/mm.sh
      1
/mnt
      1
/nfsroot
      1
/onvif
      2
/opt
      1
/param
     10
/proc
find: /proc/598/task/598/fd/56: No such file or directory
  16957
/root
      2
/sbin
     56
/share
      1
/sys
   1350
/syslog
      6
/tmp
      1
/usr
    171
/var
     17
/web
    522

因此,在 proc 目录中,我可以看到很多目录 42、443、454、548 等 - 只有数字。如果我转到这些目录中的任何一个,我可以在那里看到相同的内容:

/proc/580 $ ls -l
-r--------    1 root     root            0 Jul 14 17:51 auxv
-r--r--r--    1 root     root            0 Jul 14 17:48 cmdline
lrwxrwxrwx    1 root     root            0 Jul 14 17:51 cwd -> /usr
-r--------    1 root     root            0 Jul 14 17:51 environ
lrwxrwxrwx    1 root     root            0 Jul 14 17:51 exe -> /usr/hh580
dr-x------    2 root     root            0 Jul 14 17:51 fd
-r--r--r--    1 root     root            0 Jul 14 17:51 maps
-rw-------    1 root     root            0 Jul 14 17:51 mem
-r--r--r--    1 root     root            0 Jul 14 17:51 mounts
-rw-r--r--    1 root     root            0 Jul 14 17:51 oom_adj
-r--r--r--    1 root     root            0 Jul 14 17:51 oom_score
lrwxrwxrwx    1 root     root            0 Jul 14 17:51 root -> /
-r--r--r--    1 root     root            0 Jul 14 17:51 smaps
-r--r--r--    1 root     root            0 Jul 14 17:48 stat
-r--r--r--    1 root     root            0 Jul 14 17:51 statm
-r--r--r--    1 root     root            0 Jul 14 17:51 status
dr-xr-xr-x    3 root     root            0 Jul 14 17:51 task
-r--r--r--    1 root     root            0 Jul 14 17:51 wchan

例如,有一个“任务”目录的内容:

/proc/580/task $ ls
580
/proc/580/task $ cd 580
/proc/580/task/580 $ ls
auxv       environ    maps       oom_adj    smaps      status
cmdline    exe        mem        oom_score  stat       wchan
cwd        fd         mounts     root       statm
/proc/580/task/580 $ ls -l
-r--------    1 root     root            0 Jul 14 17:51 auxv
-r--r--r--    1 root     root            0 Jul 14 17:51 cmdline
lrwxrwxrwx    1 root     root            0 Jul 14 17:51 cwd -> /usr
-r--------    1 root     root            0 Jul 14 17:51 environ
lrwxrwxrwx    1 root     root            0 Jul 14 17:51 exe -> /usr/hh5800
dr-x------    2 root     root            0 Jul 14 17:51 fd
-r--r--r--    1 root     root            0 Jul 14 17:51 maps
-rw-------    1 root     root            0 Jul 14 17:51 mem
-r--r--r--    1 root     root            0 Jul 14 17:51 mounts
-rw-r--r--    1 root     root            0 Jul 14 17:51 oom_adj
-r--r--r--    1 root     root            0 Jul 14 17:51 oom_score
lrwxrwxrwx    1 root     root            0 Jul 14 17:51 root -> /
-r--r--r--    1 root     root            0 Jul 14 17:51 smaps
-r--r--r--    1 root     root            0 Jul 14 17:51 stat
-r--r--r--    1 root     root            0 Jul 14 17:51 statm
-r--r--r--    1 root     root            0 Jul 14 17:51 status
-r--r--r--    1 root     root            0 Jul 14 17:51 wchan

是否可以删除这些文件(或链接)中的任何一个以让系统创建新文件?我真的不知道Linux,我只想创建文件......

4

1 回答 1

1

某些软件可以在关闭打开文件之前删除它们,已删除文件的打开处理程序可防止回收磁盘空间。如果是这种情况,重新启动将释放空间。旧版本的 MySQL 曾经带有这样的错误,在/tmp.

使用lsof(list open files) 命令查看这些文件。

[更新]

'lsof' 是这个 shell 的未知命令 - 它是 BusyBox v1.1.2。——德米特里·诺维奇科夫

首先确认重启后空间是否被释放,如果没有,那么你的问题不是删除打开的文件。如果重新启动解决了问题,请查找 lsof 的本机二进制文件或为您的平台编译它(您从未暗示过),以便使用打开的处理程序找到已删除的文件,并且您可能能够找到负责泄漏的进程.

如果您正在运行一些打开和删除文件的自制进程,请在删除之前仔细检查您是否正在关闭文件。

于 2013-07-14T17:53:21.320 回答