2021-06-07 [问题] Node.js Error: ENOSPC: no space left on device

错误描述

一个Node.js应用运行时出现了错误 , Error: ENOSPC: no space left on device
使用df查看,磁盘上的空间还很大,此时只占用了20GB空间,为什么呢?

应用场景: Linux ext4, 在某个目录下,会经常写入一个小文件,数量是很大的,百万级别。

按照网上的一些线索:

(1) 使用 docker system prune -af
这个只是去删除docker images

(2) 修改linux fs 最大user watches数量
默认为 8*1024=8192
cat /proc/sys/fs/inotify/max_user_watches

后来发现systemlog里报错,
EXT4-fs warning
index full, reach max htree level :2
Large directory feature is not enabled on this filesystem

原来问题是:

This "large directory" feature allows for exceeding the current limit of roughly 10 million entries allowed in a single directory with EXT4. The revised limit wasn't mentioned.

large_dir
This feature increases the limit on the number of files
per directory by raising the maximum size of directories
and, for hashed b-tree directories (see dir_index), the
maximum height of the hashed b-tree used to store the
directory entries.

// 查看是否打开了large directory feature
sudo tune2fs -l /dev/sdc | grep large_dir
// 打开 large directory feature , /dev/sdc为磁盘的设备名称
sudo tune2fs -O large_dir /dev/sdc

运行后,问题似乎解决了。

xfs文件系统由于是Dynamically Allocated inodes, 似乎也支持目录下的无限个文件。

你可能感兴趣的:(2021-06-07 [问题] Node.js Error: ENOSPC: no space left on device)