我经常收到以下Dropbox错误。错误消息的提议修复了错误,但我试图弄清楚它对我的系统做了什么,也许是否存在根本原因。
无法监控整个Dropbox文件夹层次结构。请运行
echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p`
并重新启动Dropbox以解决问题。
答案 0 :(得分:18)
注意:如果您想了解Linux,我强烈建议您实际做步骤,而不仅仅是读取它们!
如果我在shell中输入apropos inotify
以查看哪个联机帮助页是关于“inotify”的,我会得到以下结果:
$ apropos inotify
inotify (7) - monitoring filesystem events
inotify_add_watch (2) - add a watch to an initialized inotify instance
inotify_init (2) - initialize an inotify instance
inotify_init1 (2) - initialize an inotify instance
inotify_rm_watch (2) - remove an existing watch from an inotify instance
upstart-file-bridge (8) - Bridge between Upstart and inotify
apropos
找到联机帮助页。 apropos
是你的朋友。请记住apropos
。
第一个看起来很有希望,所以让我们尝试用man inotify
打开它。您现在应该获得ifnotify
的文档。它说:
NAME
inotify - monitoring filesystem events
DESCRIPTION
The inotify API provides a mechanism for monitoring filesystem events.
Inotify can be used to monitor individual files, or to monitor directo‐
ries. When a directory is monitored, inotify will return events for
the directory itself, and for files inside the directory.
所以现在我们已经了解了inotify
大致的做法。让我们看看它是否也有用处
说出你的错误。
我们可以通过按/<term><enter>
来搜索联机帮助页。所以让我们试试:/max_user_watches<enter>
这将我们带到这一部分:
/proc/sys/fs/inotify/max_user_watches
This specifies an upper limit on the number of watches that can
be created per real user ID.
/proc/sys/fs/inotify/max_user_watches
文件与fs.inotify.max_user_watches
中的/etc/sysctl.conf
设置相同。它们只是访问相同Linux内核参数的两种不同方式。
您可以按q
退出。
我可以通过以下方式查看当前值:
$ cat /proc/sys/fs/inotify/max_user_watches
524288
或:
$ sysctl fs.inotify.max_user_watches
fs.inotify.max_user_watches = 524288
它们都在Linux内核中使用相同的底层值。
请注意,此值实际上是Dropbox推荐的大的五倍!这是在我的Ubuntu 15.10系统上。
所以现在我们已经了解到:
inotify
是一个用于监控文件和目录更改的Linux系统。根据这些信息,似乎Dropbox无法查看足够的文件和目录以进行更改,因为fs.inotify.max_user_watches
太低了。
我建议的是:
/etc/sysctl.conf
。确保此处没有fs.inotify.max_user_watches=100000
行。如果有,请删除它们。 fs.inotify.max_user_watches
的值是如上所述。sudo echo 'fs.inotify.max_user_watches=XXX' >> /etc/sysctl.conf && sudo sysctl -p /etc/sysctl.conf
加倍。此更改后您无需重新启动。 注意:较新版本的systemd不再加载/etc/sysctl.conf
文件,它只会加载/etc/sysctl.d/
目录中的文件。使用/etc/sysctl.d
目录中的文件应该已经被大多数Linux发行版支持了,所以我建议您使用它来进行面向未来的验证。
如果你想知道“为什么首先有限制?”然后考虑如果一个程序会观看一百万个文件会发生什么。那还能用吗?十亿呢? 100亿? 10万亿?等
在某些时候,您的系统将耗尽资源并崩溃。 See here以一些“有趣”的方式来做到这一点; - )