Не могу удалить файл с помощью rm

Я работаю с 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

Как я вижу в гугле, есть проблема с инодами. Хорошо, я бегу

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, и я хотел бы создать только файл...


person Dmitriy Novichkov    schedule 14.07.2013    source источник
comment
Все элементы под /proc генерируются Linux автоматически. Я рекомендую не удалять ни один из них. Если у вас нехватка i-узлов, то /proc не ваша проблема. Они поглощаются где-то еще или в вашей файловой системе есть какие-то несоответствия. Вы пытались запустить fsck?   -  person lurker    schedule 14.07.2013
comment
Итак, я должен запускать fsck после перезагрузки? Я проверю это позже.   -  person Dmitriy Novichkov    schedule 14.07.2013
comment
Вы не запускаете fsck на /proc. Вы запускаете его в файловой системе. Как выглядит вывод вашей команды mount?   -  person lurker    schedule 14.07.2013
comment
Можете ли вы запустить df -i, это даст вам больше информации о нехватке инодов.   -  person Konstantin Weitz    schedule 14.07.2013
comment
'/ $ mount /dev/root on / type jffs2 (rw,noatime) proc on /proc type proc (rw,nodiratime) sysfs on /sys type sysfs (rw) devfs on /dev type devfs (rw) none on /syslog тип tmpfs (rw) нет в /tmp тип tmpfs (rw) имя в /onvif тип tmpfs (rw) нет в /mempic тип tmpfs (rw) нет в /memrec тип tmpfs (rw)'   -  person Dmitriy Novichkov    schedule 14.07.2013
comment
'df -i' - неизвестные варианты, потому что это BusyBox: 'BusyBox v1.1.2 (2008.07.18-08:25+0000) Встроенная оболочка (ash)' Итак, есть 3 варианта df: -i, - м, -к.   -  person Dmitriy Novichkov    schedule 14.07.2013
comment
Вы уверены, что -i не существует? В руководстве говорится, что да   -  person Konstantin Weitz    schedule 14.07.2013
comment
~ $ df -i df: illegal option -- i BusyBox v1.1.2 (2008.07.18-08:25+0000) multi-call binary Usage: df [-hmk] [FILESYSTEM ...] Print the filesystem space used and space available. Options: -h print sizes in human readable format (e.g., 1K 243M 2G ) -m print sizes in megabytes -k print sizes in kilobytes(default) К сожалению, есть 3 варианта.   -  person Dmitriy Novichkov    schedule 15.07.2013


Ответы (1)


Некоторое программное обеспечение может удалять открытые файлы перед их закрытием, обработчик открытия удаленного файла предотвращает освобождение дискового пространства. В этом случае перезагрузка освободит место. Раньше в старых версиях MySQL была такая ошибка, из-за которой сотни файлов-нежити оставались под /tmp.

Используйте команду lsof (список открытых файлов), чтобы увидеть эти файлы.

[Обновить]

'lsof' - неизвестная команда для этой оболочки - это BusyBox v1.1.2. – Дмитрий Новичков

Сначала подтвердите, освободилось ли место после перезагрузки, если нет, то ваша проблема не в удалении открытых файлов. Если перезагрузка устранит проблему, поищите собственный бинарник lsof или скомпилируйте его для своей платформы (на что вы никогда не намекали), чтобы найти удаленные файлы с открытыми обработчиками, и, возможно, вы сможете найти процесс, ответственный за утечку. .

Если вы запускаете какой-то самодельный процесс, который открывает и удаляет файлы, дважды проверьте, не закрываете ли вы файлы перед удалением.

person Paulo Scardine    schedule 14.07.2013
comment
'lsof' - неизвестная команда для этой оболочки - это BusyBox v1.1.2. - person Dmitriy Novichkov; 14.07.2013
comment
Обновил ответ - вам может понадобиться найти двоичный файл lsof или скомпилировать его из исходников для вашей платформы. - person Paulo Scardine; 15.07.2013