Java程序无法在linux中的挂载系统上写入

Posted

技术标签:

【中文标题】Java程序无法在linux中的挂载系统上写入【英文标题】:Java program is unable to write on mounted system in linux 【发布时间】:2018-09-30 12:27:33 【问题描述】:

我目前正在处理一个场景,我们必须在 Linux 和 Windows 的共享目录中创建一个文件。 我已经通过以下链接来实现它:

https://www.journaldev.com/878/java-write-to-file

https://it.toolbox.com/question/how-to-write-a-file-in-a-network-folder-without-using-ftp-031208

我能够在 Windows 网络中实现它,例如将文件名指定为 (\\198.168.1.1\data\files)

但对于 Linux,我首先使用 NFS 通过以下链接共享特定目录:

https://alvinsim.wordpress.com/2012/06/21/mounting-nfs-from-linux-to-aix/

https://www.tecmint.com/how-to-setup-nfs-server-in-linux/

但出现以下异常:

java.io.FileNotFoundException: /data/files(只读文件系统)

我在以下线程中发现以下问题已解决,但我无法成功:

https://askubuntu.com/questions/197459/how-to-fix-sudo-unable-to-open-read-only-file-system

感谢任何建议。

【问题讨论】:

我认为修复链接与在某些故障后恢复 rw 文件系统更相关。在您的情况下,您正在安装的文件系统可能是 ro。我记不太清楚了,但你可以在 fstab 中看到这个。 为了获得更好的答案,您应该提供 fstab 或 mount 条目 - 使用 grep '/data/files' /etc/fstabmount | grep '/data/files' 另外,试试touch /data/files/justatest.txt——只要失败,问题就不是java相关的 您是否尝试过使用 SMB 而不是 NFS 【参考方案1】:

所以我终于能够弄清楚问题所在了。

我根据 /etc/exports 文件中的链接创建的条目是不够的。 我们需要使用一些选项以及(同步、rw 等)来允许使用任何 java 程序进行任何手动修改或修改。 就我而言,我应该使用选项 (rw,no_root_squash)。 它奏效了。 正如在中很好解释的那样:

https://serverfault.com/questions/611007/unable-to-write-to-mount-point-nfs-server-getting-permission-denied/611013#611013?newreg=ce76e9417ca645da9487a5d9ccbf0371

来自文档: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/deployment_guide/s1-nfs-server-config-exports

root_squash — 防止远程连接的 root 用户拥有 root 权限,并为他们分配用户 nfsnobody 的用户 ID。这有效地将远程 root 用户的权力“压制”到最低的本地用户,防止未经授权更改远程服务器上的文件。或者, no_root_squash 选项关闭根压缩。要压缩每个远程用户,包括 root,请使用 all_squash 选项。

【讨论】:

以上是关于Java程序无法在linux中的挂载系统上写入的主要内容,如果未能解决你的问题,请参考以下文章

linux挂载aixnfs没有写权限

linux挂载HFS格式的U盘,只能读不能写,如何增加写权限

PHP 无法将上传的文件移动(写入)到挂载的网络驱动器

深度 deepin linux如何自动挂载磁盘

8.29_Linux磁盘管理

使用 Java 重命名文件后,一些文件在 linux 系统上或通过 Java 无法访问