如果Linux中USB设备中的文件系统有任何更改或如何递归使用inotify,如何获得通知

Posted

技术标签:

【中文标题】如果Linux中USB设备中的文件系统有任何更改或如何递归使用inotify,如何获得通知【英文标题】:How to get notified if there is any changes in file system in USB device in linux or how to use recursively inotify 【发布时间】:2018-04-02 06:04:11 【问题描述】:

谁能告诉我是否有任何实用程序可以检测连接的 USB 的文件系统是否有任何变化? 或者 谁能提供递归inotify的示例代码。

【问题讨论】:

“大小变化”是什么意思? AFAIK USB 设备具有固定大小。或者您是否关心某些 USB 存储设备上的某些文件系统?请编辑您的问题以改进它。 大小变化意味着,假设您的 USB 上有 2 GB 数据并且您删除了 1GB 或添加了 1 GB。那么有什么方法可以收到有关这种大小变化的通知。跨度> 这应该进入你的问题。不要评论您自己的问题,而是对其进行编辑以改进它。 USB 存储上没有任何文件系统,您的问题没有任何意义。并且您需要告诉密钥上使用了哪个文件系统。 另外,我真的不明白“将通知我”在您的问题中意味着什么以及这对您意味着什么。我猜你想要incron,但目前还不清楚。你很困惑,需要更多地了解文件系统。您的问题仍不清楚。 为什么要使用CC++ 标签?为什么是linux kernel 标签?请阅读What topics can I ask about here?和How to Ask?并提供一些minimal reproducible example 【参考方案1】:

USB 存储设备不包含抽象的“文件”。

但它通常有一些file system(通常是VFAT,但这可能是别的东西;我有时会用ext4 FS 格式化USB 密钥,而且我确实有一个带有VFAT 和ext4 的USB 磁盘文件系统)。该文件系统应该是mounted,以便您在其上读取或写入文件。

我想要一个实用程序,如果文件系统也有任何变化,它会通知我。

也许你想在这样一个挂载的文件系统上使用inotify(7) 工具;那么问题与USB设备无关,SATA磁盘和它们上的文件系统也是如此;一些文件系统——尤其是像 NFS 这样的远程文件系统——不能很好地与 inotify 一起工作。

请注意,USB 存储可以用作raw disk 和block device(即使通常不以这种方式使用)。在这种情况下,你的问题没有任何意义。此外,USB 存储可能有几个 partitions,因此几个 文件系统。您可能需要确定要处理的文件系统和分区。

您可能希望首先确定从您的 USB 存储挂载的文件系统(例如,使用 proc(5),也许是 /proc/mounts...),然后使用 inotify 来查看其中的更改。

如果我要从中添加或删除 1 GB,是否有任何实用程序可以得到通知?

您将文件(通过inode(7)-s)添加到您的 VFAT 文件系统中(您不能在没有文件的情况下添加 1Gb)。您可以使用df(1) 来衡量其职业(并且您可以使用watch(1) 或crontab(5) 来重复该衡量)。你也可以使用inotifyincron command。你甚至可以用 ext4 文件系统格式化你的 U 盘,然后在上面使用disk quota 工具。

您可能想了解更多关于一般操作系统的信息。我强烈推荐Operating Systems: Three Easy Pieces。如果您对 Linux 上的 C 或 C++ 系统编程感兴趣,请阅读相关书籍(可能是旧的 ALP 或更新的书籍),然后阅读 intro(2) 和 syscalls(2)。

【讨论】:

假设我的 USB src 和 dest 中有两个文件夹。如果我将任何数据从 src 复制到 dest 文件夹,我会收到通知吗?或者如果我从 src 文件夹中删除任何数据,我会收到通知。 再一次,不要在这里发表评论。但是大大改善你的问题(你可能需要在其中添加几个段落)。我们甚至不明白你为什么要问它。你在编写一些程序吗?你要剧本吗?您希望如何收到通知?注销后会发生什么?顺便说一句,Linux 有directories -不是文件夹-。与 C 或 C++ 有什么关系?为什么不能使用inotify(7)?

以上是关于如果Linux中USB设备中的文件系统有任何更改或如何递归使用inotify,如何获得通知的主要内容,如果未能解决你的问题,请参考以下文章

检查 USB 内容

怎样写linux下的USB设备驱动程序

如何解决Linux下USB设备节点名不固定问题

Linux上的串口和USB设备有什么区别?

Linux系统下查看USB设备名及使用USB设备

Linux USB 驱动开发—— USB设备基础概念