Назад | Перейти на главную страницу

Errno :: ENOSPC: на устройстве не осталось места в Ruby on Rails

Я размещаю приложение Ruby on Rails на Linode с хранилищем 96 ГБ. Все изображения моего приложения хранятся на Amazon, и они получены от Amazon. Таким образом, у моего линода должно быть как минимум 80 ГБ свободного места.

Но когда лог-файлы приложения превышает 200 Мб, я получаю сообщение об ошибке:

Errno::ENOSPC: No space left on device

и мой сайт не работает.

Я включил ротацию журналов для своего приложения ежедневно с помощью следующего кода в файле /etc/logrotate.conf:

path/to/application/log/*.log {
  daily
  missingok
  rotate 1
  compress
  delaycompress
  notifempty
  copytruncate
}

Но теперь я начал получать одни и те же ошибки в день, поэтому я изменил настройки конфигурации в зависимости от размера следующим образом:

path/to/application/log/*.log {
  size 1M
  missingok
  rotate 1
  compress
  delaycompress
  notifempty
  copytruncate
}

Я также переместил файл logrotate из /etc/cron.daily в /etc/cron.hourly, чтобы cronjob logrotate запускался каждый час и поворачивал журнал, если он превышает 1M. Я перезапустил апач.

Но когда я проверил через час, мои файлы размером больше 1M. Таким образом logrotate cronjob не работал каждый час. Когда я с силой поворачиваю журнал, используя команду:

 sudo /usr/sbin/logrotate -f /etc/logrotate.conf

затем файлы журнала поворачиваются, и размер файлов уменьшается.

Я не могу понять, почему эта конфигурация не работает. Более того, когда пространство на линоде составляет 80 ГБ, как это влияет, если файлы журнала превышают 200 МБ?. Как можно выделить больше места для каталога журналов?

Как и предполагалось, я побежал df -ih чтобы проверить, заканчивается ли у меня inodes. Я получаю следующий результат:

Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/xvda               2.2M    263K    2.0M   12% /
devtmpfs                174K    2.0K    172K    2% /dev
none                    174K       1    174K    1% /dev/shm
none                    174K      33    174K    1% /var/run
none                    174K       2    174K    1% /var/lock
none                    174K       1    174K    1% /lib/init/rw

Таким образом, мои inodes почти бесплатны. У меня не заканчиваются inodes.

Выход df -h как есть:

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda             9.5G  8.7G  325M  97% /
devtmpfs             1010M  112K 1010M   1% /dev
none                 1010M     0 1010M   0% /dev/shm
none                 1010M   52K 1010M   1% /var/run
none                 1010M     0 1010M   0% /var/lock
none                 1010M     0 1010M   0% /lib/init/rw

У меня на диске действительно меньше места. Как мне продолжить?

Пожалуйста, помогите. Большое спасибо!

У меня было такое же сообщение об ошибке при попытке запустить npm install.

npm ERR! nospc ENOSPC: no space left on device, open /{dir}/...

Исправление для меня было следующим:

  • sudo rm -rf node_modules - Удалить node_modules
  • df -hi - Проверьте доступное место на диске
  • sudo apt-get update - Обновить пакеты
  • sudo apt-get autoremove - Используйте autoremove для удаления пакетов, которые больше не нужны
  • sudo apt-get -f install - Исправить сломанные зависимости

Это правда, у вас осталось очень мало места.

Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda             9.5G  8.7G  325M  97% /

Всего несколько сотен мегабайт, и ваш диск снова будет заполнен.

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

мои 2 цента здесь:

Я обнаружил, что вывод lsof | grep -i deleted несколько лет назад у меня был production.log. Который перезапуск службы освободил все пространство. Я получил идею от: Диск полный, ду говорит разное. Как дальше расследовать?