2013-07-14 37 views
0

我正在使用BusyBox v1.1.2(2008.07.18-08:25 + 0000)。 我想創建新的文件,我使用
touch ModelInfo
,但反應
touch: ModelInfo: No space left on device
所以,我檢查自由空間:無法使用rm移除文件

/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 

,我可以在谷歌看到,有一個問題與inodes。 好吧,我跑

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,我只想創建文件...

+2

'/ proc'下的所有項目都是由Linux自動生成的。我建議不要刪除任何這些。如果你有一個i節點短缺,那麼'/ proc'不是你的問題。它們正在其他地方被吞噬,或者您的文件系統存在一些不一致之處。你嘗試過運行'fsck'嗎? – lurker

+0

'〜$的fsck -n/proc中 fsck的1.38(30君2005) 的fsck:fsck.proc:找不到 fsck的錯誤:2在執行fsck.proc爲PROC 〜$的fsck -n/SYS 的fsck 1.38(2005年6月30日) fsck:fsck.sysfs:未找到 fsck:爲sysfs執行fsck.sysfs時發生錯誤2 〜$ fsck -n/dev fsck 1。38(30君2005) 的fsck:fsck.devfs:找不到 fsck的:錯誤2在執行fsck.devfs爲devfs的 〜$的fsck -n的/ dev/PTS fsck的1.38(30君2005) e2fsck 1.38(30-Jun-2005) fsck.ext2:試圖打開/ dev/pts 這可能是一個零長度的分區嗎? fsck.ext2:警告... fsck.ext2爲設備/ dev/pts退出信號11. 〜$' –

+0

因此,我必須在重新啓動後運行fsck?我稍後再檢查一次。 –

回答

1

某些軟件可能會在關閉它們之前刪除打開的文件,對已刪除文件的打開處理程序會阻止磁盤空間被回收。如果是這種情況,重新啓動將釋放空間。老版本的MySQL用來承載這樣一個bug,在/tmp下留下數百個不死文件。

使用lsof(列表打開文件)命令來查看這些文件。

'lsof的' 是此殼未知命令[更新]

- 它是BusyBox的V1.1.2。 - Dmitriy Novichkov

首先確認重新啓動後空間是否被釋放,如果沒有,那麼你的問題不會被刪除打開文件。如果重新啓動解決了問題,請查找lsof的本地二進制文件或者爲您的平臺編譯它(您從未暗示過),以便使用打開的處理程序查找已刪除的文件,並且可能會找到導致泄漏的流程。

如果您正在運行一些打開和刪除文件的自制進程,請在刪除之前仔細檢查是否正在關閉文件。

+1

'lsof'是這個shell的未知命令 - 它是BusyBox v1.1.2。 –

+0

更新了答案 - 您可能需要找到lsof的二進制文件,或者從您的平臺的源代碼中進行編譯。 –