如何判断 Linux 机器上的目录是否在 Java 中安装了外部文件系统?
How to tell if a directory on a Linux machine has an external file system mounted to it in Java?
我有三个独立的 Linux 服务器,它们在名为 /efs
的目录下安装和共享同一个文件系统
我有一个使用此文件系统的 Java 应用程序,需要能够验证文件系统是否已正确挂载(否则,它只会写入本地计算机上的 /efs而不是在不知道的情况下共享存储)-我如何在 运行 时间从我的应用程序检测到文件系统已安装到目录?
抱歉,如果这是一个重复的问题。我确实试图找到这方面的信息,但找不到明确的答案。
回答我自己的问题 - 我刚刚想到在挂载的文件系统中创建一个文件并简单地检查文件是否存在,避免任何 OS 依赖代码。
我看到了一些解决这个问题的方法:
- 如果 /efs 中挂载的文件系统与根文件系统不同,您可以使用
Files.getFileStore(path).type()
进行比较。 / 的文件系统相同将是 /efs 挂载丢失的明确指示。这假设 JDK >= 7.
- 阅读并解析
/proc/mounts
以查看安装了哪些文件系统以及使用哪些选项。这是相同的数据源 Java 的 FileStore API 在幕后使用,因此您可以直接从 JDK 源获取解析逻辑。这将独立于 Java 版本。
- 在挂载的文件系统上有一个文件,它永远不会在根文件系统上,然后可以通过
Files.exists(path)
或 new File(path).exists()
简单地检查它。这将独立于 Java 版本,甚至独立于 Linux.
我有三个独立的 Linux 服务器,它们在名为 /efs
的目录下安装和共享同一个文件系统我有一个使用此文件系统的 Java 应用程序,需要能够验证文件系统是否已正确挂载(否则,它只会写入本地计算机上的 /efs而不是在不知道的情况下共享存储)-我如何在 运行 时间从我的应用程序检测到文件系统已安装到目录?
抱歉,如果这是一个重复的问题。我确实试图找到这方面的信息,但找不到明确的答案。
回答我自己的问题 - 我刚刚想到在挂载的文件系统中创建一个文件并简单地检查文件是否存在,避免任何 OS 依赖代码。
我看到了一些解决这个问题的方法:
- 如果 /efs 中挂载的文件系统与根文件系统不同,您可以使用
Files.getFileStore(path).type()
进行比较。 / 的文件系统相同将是 /efs 挂载丢失的明确指示。这假设 JDK >= 7. - 阅读并解析
/proc/mounts
以查看安装了哪些文件系统以及使用哪些选项。这是相同的数据源 Java 的 FileStore API 在幕后使用,因此您可以直接从 JDK 源获取解析逻辑。这将独立于 Java 版本。 - 在挂载的文件系统上有一个文件,它永远不会在根文件系统上,然后可以通过
Files.exists(path)
或new File(path).exists()
简单地检查它。这将独立于 Java 版本,甚至独立于 Linux.