Невозможно записать на диск, но диск не заполнен

36

Я использую Ubuntu 12.04 и не могу записать в любой файл, даже в качестве пользователя root, или выполнить любую другую операцию, требующую записи. Ни один из них не может написать процесс, поэтому все они терпят неудачу. dfговорит, что у меня много места:

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       30G   14G   15G  48% /
udev            984M  4.0K  984M   1% /dev
tmpfs           399M  668K  399M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            997M     0  997M   0% /run/shm

Все результаты, которые я нахожу для "не могу записать на диск", касаются законно заполненных дисков. Я даже не знаю, с чего начать. Проблема появилась из ниоткуда этим утром.

Последняя запись в журнале PHP:

Ошибка: на устройстве не осталось места (28)

Вим говорит:

Невозможно открыть (файл) для записи

Другие приложения дают похожие ошибки.

После удаления ~ 1gb просто чтобы быть уверенным, проблема остается. Я тоже перезагрузился.

df -i говорит

Filesystem      Inodes   IUsed  IFree IUse% Mounted on
/dev/xvda1     1966080 1966080      0  100% /
udev            251890     378 251512    1% /dev
tmpfs           255153     296 254857    1% /run
none            255153       4 255149    1% /run/lock
none            255153       1 255152    1% /run/shm
felwithe
источник
14
Пожалуйста, опубликуйте вывод "df -i".
EEAA
1
@EEAA отредактировано в. Вы правы, df -i говорит 100%. Что это значит? Почему это было бы иначе?
felwithe
3
IIRC, слишком много файлов в одном каталоге будут иметь похожие, если не идентичные симптомы. То, что «слишком много», будет зависеть от файловых систем.
MSalters

Ответы:

59

У вас нет инодов. Вероятно, у вас где-то есть каталог с множеством очень маленьких файлов.

EEAA
источник
9
Просто хотел добавить, что я даже не знал, что rm может потерпеть неудачу. Это было образование.
felwithe
2
@ Я чувствую, что find . -name sess\* -exec rm {} +это сработало бы.
Карстен С
3
@felwithe Что другие предложили. rm Возможно, все работало нормально, но оболочка расширила *глобус до слишком большого количества данных и смутилась до того, как достигла точки вызова rm.
CVn
8
@CarstenS: Или то, find . -name sess\* -deleteчто мне легче запомнить, и, как правило, более эффективно.
MSalters
2
@ Каслай лимит там не ОЗУ, а системный предел ARG_MAX. Стандарт POSIX, к сожалению, точно не определяет, как аргументы командной строки сравниваются с ARG_MAX. Некоторые реализации не имеют ограничений и поэтому не определяют ARG_MAX, но это не популярный вариант, так как слишком много программ не могут быть скомпилированы.
Джеймс Янгман
7

По-видимому, у ОП есть ответ на их конкретную проблему. Тем не менее, для полноты, признаки OP могут также возникнуть, если файловая система была перемонтирована только для чтения. Это случилось со мной, используя виртуальную машину Linux, чье хранилище находилось на кластерной дисковой системе, где происходили редкие периодические сбои. Иногда из-за сбоев файловая система (системы) перемонтируется только для чтения. В конечном итоге наблюдаемым внешним симптомом было то, что различные сервисы перестали отвечать на запросы по мере заполнения ОЗУ (с записью на диск без возможности восстановления).

В то время единственное решение состояло в том, чтобы перезагрузить систему (теряя все неписаные журналы). Попытки перемонтировать RW не увенчались успехом. (К сожалению, я не помню сообщений об ошибках, возвращаемых при попытке перемонтирования.)

Итак, ... не проблема ОП, но кто-то другой, попадающий на эту страницу, может извлечь пользу из этой информации.

Эрик Тауэрс
источник
5
На самом деле, нет; когда файловая система перемонтирована только для чтения, вы получите сообщение об ошибке, в котором говорится, что файловая система доступна только для чтения, а не из свободного места.
Псуси
1
@psusi: я не сделал. Я получил различные ошибки, в том числе «файловая система заполнена». Если бы это изменилось за последние два или три года, это было бы хорошо.
Эрик Тауэрс,
1
Я пытался переместить файл в файловую систему ZFS только для чтения в Linux на днях. В ошибке довольно четко сказано «файловая система только для чтения».
CVn
Нет; так было 30 с лишним лет. Запись только для чтения fs возвращает -EROFS; запись в полный фс возвращает -ENOSPC.
Псуси
4
@psusi: я вижу, что вы живете во фэнтезийной вселенной, где программисты всегда делают правильные вещи, а не создают свои собственные сообщения об ошибках. Кажется, я там не живу.
Эрик Тауэрс