文件名太长 mount_nfs

文件名太长 mount_nfs

我有一个 FreeBSD Vagrant 盒子,看起来像这样:

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "chef/freebsd-10.0"

  config.vm.network "private_network", ip: "10.0.1.10"
  config.vm.synced_folder '.', '/vagrant', :nfs => true, id: "vagrant-root"

end

但是,如果它尝试在名称太长的目录路径中运行,则会失败:

==> default: Mounting NFS shared folders...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mount -t nfs '10.0.1.1:/Users/petersouter/projects/reallylongpathnameover88characterssothatmountfswillfail12345678910111213141516' '/vagrant'

Stdout from the command:



Stderr from the command:

mount_nfs: 10.0.1.1:/Users/petersouter/projects/reallylongpathnameover88characterssothatmountfswillfail12345678910111213141516: File name too long

除了将目录复制到名称较短的目录之外,还有其他方法可以解决此问题吗?我可以更新 FreeBSD 内容以使其可以接受更大的文件名吗?

答案1

FreeBSD 将挂载点名称的长度限制为 88 个字符。这样做的原因有些深奥,但与在页面边界上对齐内存结构有关[1]。

您可以修补 mount 二进制文件以使用更大的限制或将其全部删除[2],但这可能会导致崩溃。我已成功删除检查(对于带有 nfs 的 vagrant 也是如此),并且它运行正常,但这样做风险自负。我没有进行完整的构建世界,而是仅使用第二个链接中的补丁重建了 mount_nfs 二进制文件。

最后要说的是,我最终认为带有 nfs 的 vagrant 有太多错误,因此改用 rsync 共享文件夹。

[1]http://www.secnetix.de/olli/FreeBSD/mnamelen.hawk

[2]https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=167105

相关内容