错误:仅在启动/停止服务时设备上没有剩余空间

Opt*_*ime 7 filesystems debian tmp

我知道已经有多个这样的问题,但他们的答案都不适用于我的问题。

所以我尝试从 Debian 7.7 升级到 Debian 8.1。每个工作正常,但某些操作报告Error: No space left on device

df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       443G   28G  393G   7% /
udev             10M     0   10M   0% /dev
tmpfs           1.6G  8.7M  1.6G   1% /run
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
tmpfs           795M     0  795M   0% /run/user/0
Run Code Online (Sandbox Code Playgroud)

df -i

Filesystem       Inodes  IUsed    IFree IUse% Mounted on
/dev/sda1      29450240 419083 29031157    2% /
udev            1015256    338  1014918    1% /dev
tmpfs           1017372    502  1016870    1% /run
tmpfs           1017372      1  1017371    1% /dev/shm
tmpfs           1017372      7  1017365    1% /run/lock
tmpfs           1017372     13  1017359    1% /sys/fs/cgroup
tmpfs           1017372      4  1017368    1% /run/user/0
Run Code Online (Sandbox Code Playgroud)

错误消息示例:

$: service apache2 restart
Error: No space left on device

$: /etc/init.d/mysql restart
[....] Restarting mysql (via systemctl): mysql.serviceError: No space left on device
Run Code Online (Sandbox Code Playgroud)

我还可以触摸和添加/删除/tmp. ls -al

drwxrwxrwt   8 root root  4096 Jul 23 18:47 tmp
Run Code Online (Sandbox Code Playgroud)

我该如何继续尝试调试或弄清楚这里发生了什么?我怀疑/tmp目录有问题,但我不知道是什么。

Opt*_*ime 18

经过大量调试后,我在unix.SE 的另一个 SE 答案中找到了答案。

原来是因为inotify的watchers太少触发了这个错误。就我而言,此问题未记录在系统中任何位置的任何错误日志中。

只需编辑文件/etc/sysctl.conf添加:

fs.inotify.max_user_watches = 262144
Run Code Online (Sandbox Code Playgroud)

...然后运行sysctl -p解决了这个问题。