USB 驱动器已被拔出(未卸载),但我仍然可以访问其上的文件。如何以编程方式检测这种情况?

USB 驱动器已被拔出(未卸载),但我仍然可以访问其上的文件。如何以编程方式检测这种情况?

我在 cubie 板上(一种单板计算机,如 Raspberry Pi)运行名为 cubian 的 Debian 衍生产品

Linux Cubian 3.4.79-sun4i #1 PREEMPT Wed Feb 25 08:50:31 UTC 2015 armv7l GNU/Linux

USB 驱动器会自动通过 挂载到 /media 的子目录udevil

我正在尝试将其作为信息亭进行管理(用户无法访问窗口系统等),因此我需要以编程方式响应情况。最近在测试过程中,我的代码抛出了一个错误,表明 /media 中有多个目录。我通过 ssh 登录,确实,那里有两个目录。我对自己说“是的,但其中一个只是未正确卸载的驱动器的陈旧剩余部分,因此该目录将为空[我以前见过这种情况],我只需要添加代码来检查这一点” 。

令我惊讶的是,该目录不是空的,我不仅能够获得列表,还能够打开并读取文件的内容。这个问题描述了类似的情况。

我认为这是我正在访问的某种缓存。 有没有一种方法可以以编程方式检测这种情况?

我并不担心清理目录,因为我知道哪个目录实际上对应于物理安装的驱动器。

另外,不幸的是,我不知道如何重现这一点——我尝试杀死 udevil 并手动安装它,mount然后将其拉出,文件消失了。

如果有可靠的方法来重现它,我可以测试一些东西(例如查看命令是否touch失败但不会挂起,也许?),所以这也将是一个有用的答案。

答案1

发生这种情况的唯一方法是在卸载驱动器时向文件写入了某些内容。如果没有安装任何内容,Linux 系统会将 /media 中的文件夹视为常规文件夹,其中包含常规文件。

在 Linux 中,完全可以使用一个目录作为普通目录以及磁盘或网络驱动器的安装点,一次一个。

编辑:

另一篇文章中提到的缓存副作用可以通过在$ sync卸载之前执行来解决。他们描述的是卸载后刷新缓存,其效果是将文件写入普通文件夹,就像我之前描述的那样。

请不要在没有解释原因的情况下投反对票。

相关内容