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/fstab
和 mount | 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中的挂载系统上写入的主要内容,如果未能解决你的问题,请参考以下文章