Назад | Перейти на главную страницу

Слишком длинное имя файла 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, чтобы он мог принимать файлы большего размера?

FreeBSD ограничивает длину имен точек монтирования до 88 символов. Причины этого несколько эзотерические, но они связаны с выравниванием структуры памяти по границам страницы [1].

Вы можете исправить бинарный файл монтирования, чтобы использовать больший предел или удалить его все вместе [2], но это может вызвать сбои. Я успешно удалил проверку (также для vagrant с nfs), и она работала без проблем, но делайте это на свой страх и риск. Я не делал полный buildworld, а пересобирал только двоичный файл mount_nfs с патчем из второй ссылки.

В заключение я решил, что vagrant с nfs слишком глючит, и переключился на использование общих папок rsync.

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

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