Это странная ошибка, с которой я столкнулся, мой скрипт php периодически выдает ошибку не удалось открыть поток: на устройстве не осталось места всякий раз, когда я пытаюсь сгенерировать текстовый файл и записать в него некоторый пользовательский контент. Но на моем диске достаточно места.
Код, который я использую ниже:
$fp=fopen('../user1/dataProduct.txt','w');
fwrite($fp, 'Demo Text of Products');
fclose($fp);
Если я сделаю: df -H
Ошибка:
PHP Warning: fopen(../user1/dataProduct.txt): failed to open stream: No space left on device in /home/goashopping/public_html/sell/userprod.php on line 192
PHP Warning: fwrite() expects parameter 1 to be resource, boolean given in /home/goashopping/public_html/sell/userprod.php on line 195
Пожалуйста, помогите мне в решении этой проблемы.
Проверьте бесплатные иноды с df -i
you@yourbox:~$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 532480 46391 486089 9% /
Файловые системы с большим количеством маленьких файлов обычно исчерпывают inode, прежде чем заканчиваются места. Если это ваш случай, вам нужно перестроить файловую систему и использовать mkfs -i
увеличить доступные на нем иноды.
Возможно, на диске недостаточно свободных инодов, проверьте это:
df -i
А также прочитайте это Не осталось свободного места на устройстве
Я согласен с тем, что, похоже, это проблема inode, но я тоже периодически сталкивался с этой проблемой. Это произошло в только один каталог.
file_put_contents (/archive/ETG/content/original/173530/event/173530_unplanned_outage_rd_20150107_fd_20150107_152715_6.pdf): не удалось открыть поток: на устройстве не осталось места
$php --version
PHP 5.3.28 (cli) (built: Jun 27 2014 15:36:16)
$uname -ior
2.6.18-238.19.1.el5 x86_64 GNU/Linux
$df -ih /archive
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg03--archive-archive
669M 57M 613M 9% /archive
$df -h /archive
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg03--archive-archive
5.2T 3.9T 1.1T 79% /archive
$mount |grep archive
/dev/mapper/vg03--archive-archive on /archive type ext3 (rw)
$find /archive/ETG/content/original/173530/event -type d -prune -ls
21610738 779840 drwxrwxrwx 3 gasconcoll gasconcoll 797769728 Jan 7 10:28 /archive /ETG/content/original/173530/event
$ls -altr /archive/ETG/content/original/173530/event/ |wc -l
8000842
$du -sh /archive/ETG/content/original/173530/event
49G
Я решил проблему, выполнив следующие действия:
$mkdir /archive/ETG/content/original/173530/event_new
$chmod ugo+rwX /archive/ETG/content/original/173530/event_new
$mv /archive/ETG/content/original/173530/event /archive/ETG/content/original/173530/event_old
$mv /archive/ETG/content/original/173530/event_new /archive/ETG/content/original/173530/event
$rsync -av /archive/ETG/content/original/173530/event_old/ /archive/ETG/content/original/173530/event
Я больше не испытываю эту ошибку. У меня нет достаточно времени, чтобы копать дальше, но подумал, что вы, возможно, захотите узнать, что сработало для меня.