我有一个 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 共享文件夹。