pyinotify--设备上没有剩余空间

pyinotify--设备上没有剩余空间

蟒蛇3.7 / Ubuntu 18.10

使用 pyinotify 设置手表时出现此错误。我尝试过的任何目录都会发生这种情况。

这是在我安装 pcloud 之后开始的,但 pcloud 没有触及这个目录。

 pyinotify ERROR] add_watch: cannot watch 
/home/stephen/<watchtarget> WD=-1, Errno=No space left on 
device (ENOSPC)

df -h显示没有安装接近满。

 Filesystem      Size  Used Avail Use% Mounted on
 udev            7.8G     0  7.8G   0% /dev
 tmpfs           1.6G  1.6M  1.6G   1% /run
 /dev/sda2       219G  113G   95G  55% /
 tmpfs           7.8G   40M  7.8G   1% /dev/shm
 tmpfs           5.0M  4.0K  5.0M   1% /run/lock
 tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
 /dev/sda1       511M  7.3M  504M   2% /boot/efi
 /dev/sdd1       458G   87G  348G  20% /mnt/usb500
 /dev/sdb1       1.8T  144G  1.6T   9% /mnt/usb2T
 /dev/sdc1       293G  132G  147G  48% /mnt/usb250
 tmpfs           1.6G   52K  1.6G   1% /run/user/1000
 pCloud.fs       2.0T  106G  1.9T   6% /home/stephen/pCloudDrive

df -i按照评论中的要求输出:

Filesystem        Inodes  IUsed     IFree IUse% Mounted on
udev             2029639    583   2029056    1% /dev
tmpfs            2037540    965   2036575    1% /run
/dev/sda2       14622720 537713  14085007    4% /
tmpfs            2037540    211   2037329    1% /dev/shm
tmpfs            2037540      5   2037535    1% /run/lock
tmpfs            2037540     18   2037522    1% /sys/fs/cgroup
/dev/sda1              0      0         0     - /boot/efi
/dev/sdd1       30531584  84224  30447360    1% /mnt/usb500
/dev/sdb1      122101760 205683 121896077    1% /mnt/usb2T
/dev/sdc1       19537920    547  19537373    1% /mnt/usb250
tmpfs            2037540     35   2037505    1% /run/user/1000
pCloud.fs              0      0         0     - /home/stephen/pCloudDrive

允许的最大手表数量:

sysctl -n fs.inotify.max_user_watches
8192

pgrep -f notify仅显示一只手表。

答案1

本期的两点纯粹基于实验和观察。这是不是基于对 pCloud 代码的熟悉或对 pCloud 文档的广泛探索,但似乎:

  1. pCloud不支持inotify(pyinotify是linux inotify应用程序的包装器),在这种情况下,通知进程的目标目录曾经被放入pCloudDrive中。

  2. 行为表明pCloud 保留对曾经包含在其驱动器中的文件的引用,并且要释放这些文件,必须终止所有 pCloud 进程。重新启动不起作用,因为 pCloud 通过系统重置保留其引用。

有必要终止所有 pCloud 进程,对我来说,完整的清理需要根帐户的干预。请注意,pCloud 进程运行为pcloudpCloud(不同情况)

所以使用:

pgrep -fi pcloud | xargs kill 

一旦 pCloud 进程被清除,您就可以启动手表了。然后您可以重新启动 pCloud,但它不会恢复其引用。

相关内容