Dropbox fs.inotify错误

时间:2016-02-29 23:33:17

标签: dropbox

我经常收到以下Dropbox错误。错误消息的提议修复了错误,但我试图弄清楚它对我的系统做了什么,也许是否存在根本原因。

  

无法监控整个Dropbox文件夹层次结构。请运行

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p` 
     

并重新启动Dropbox以解决问题。

1 个答案:

答案 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系统上。

所以现在我们已经了解到:

  1. inotify是一个用于监控文件和目录更改的Linux系统。
  2. 我们可以设置允许用户同时观看的文件或目录的数量。
  3. Dropbox提供错误“无法监控整个Dropbox文件夹层次结构”。
  4. 根据这些信息,似乎Dropbox无法查看足够的文件和目录以进行更改,因为fs.inotify.max_user_watches太低了。

    我建议的是:

    1. 以root身份使用任何文本编辑器检查/etc/sysctl.conf。确保此处没有fs.inotify.max_user_watches=100000行。如果有,请删除它们。
    2. 重新启动系统以恢复默认值。
    3. 检查fs.inotify.max_user_watches的值是如上所述。
    4. 通过运行sudo echo 'fs.inotify.max_user_watches=XXX' >> /etc/sysctl.conf && sudo sysctl -p /etc/sysctl.conf加倍。此更改后您无需重新启动。
    5. 希望此错误现已修复。时间会证明。如果没有,请尝试再次加倍。
      • 如果这不能解决问题,可能是另一个问题,或者你只需​​要增加甚至更多。它取决于系统的默认值。
    6. 注意:较新版本的systemd不再加载/etc/sysctl.conf文件,它只会加载/etc/sysctl.d/目录中的文件。使用/etc/sysctl.d目录中的文件应该已经被大多数Linux发行版支持了,所以我建议您使用它来进行面向未来的验证。

      如果你想知道“为什么首先有限制?”然后考虑如果一个程序会观看一百万个文件会发生什么。那还能用吗?十亿呢? 100亿? 10万亿?等

      在某些时候,您的系统将耗尽资源并崩溃。 See here以一些“有趣”的方式来做到这一点; - )