Отсутствие свободного места на устройстве обычно означает, что у нас закончилось место на диске. Но в редких случаях, когда мы получаем эту ошибку, у нас еще есть свободное место. Люди приходят в замешательство, когда получают эту ошибку. Вот процесс устранения этой ошибки.
"No space left on device", хотя место есть.
1 | df -h |
Пример
1 2 3 4 | Filesystem Size Used Avail Use% Mounted on /dev/sda3 56G 26G 27G 50% / /dev/sda1 99M 25M 70M 26% /boot /dev/sdx1 50G 40G 7.3G 85% /mountpoint |
1 | cp /path/to/sourcefile.tar.gz /mountpoint/directory/ |
Ошибка
1 | cp: overwrite `/mountpoint/directory/file.tar.gz’? y cp: writing `/mountpoint/directory/file.tar.gz’: No space left on device |
Корневая причина "На устройстве не осталось свободного места"
Было обнаружено, что каталоги содержат миллионы файлов, с которыми драйвер файловой системы ext не может эффективно справиться, и вообще файловые системы ext3 и ext4 не могут эффективно справиться. В файловой системе также имеется достаточное количество inode. Таким образом, дисковое пространство и inode не являются первопричиной этой проблемы.
1 | df -i |
1 2 3 4 | Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 14942208 309407 14632801 3% / /dev/sda1 26104 39 26065 1% /boot /dev/sdx1 6553600 307 6553293 1% /mountpoint |
Первопричиной является неожиданный размер каталога.
В этом каталоге уже выделено много блоков, но в нем не так много файлов. Файловые системы ext3 имеют ограничение на количество файлов, которые могут быть созданы в одном каталоге, после чего вы увидите ошибки ENOSPC. На каком-то этапе в этом каталоге действительно было много файлов, затем количество файлов было уменьшено. Это могло привести к образованию дыр в карте каталогов. В результате этот новый файл или любой другой достаточно большой файл больше не может быть добавлен.