Vagrant SSH не может получить доступ к общей папке

У меня есть настройка vagrant vm с структурой проекта на моей главной машине, например:

PlayApps --> App1 -----------> all application/project files
             App2 -----------> ""
             App3 -----------> ""
             (etc..)
             .VagrantFiles --> VagrantFile
                               bootstrap.sh
                               (etc...)

I cd в мой каталог .VagrantFiles, а затем запустите виртуальную машину. В моем VagrantFile для этой виртуальной машины я делюсь этим каталогом:

config.vm.synced_folder "../", "/Shared"

с целью совместного использования всего в каталоге PlayApps (несколько проектов) с виртуальной машиной. Когда я запускаю VM и ssh, я вижу каталог /Shared и могу cd в него, но когда я пытаюсь перечислить содержимое с помощью ls -al, я получаю следующую ошибку:

ls: cannot open directory .: Operation not permitted.

Когда я делаю ls -al в каталоге, содержащем /Shared, это то, что я вижу (среди других каталогов):

d?????????  ? ?    ?        ?            ? Shared/ and 
d?????????  ? ?    ?        ?            ? vagrant/

Я попытался sudo chmod 666 каталог /Shared, считая, что это ошибка разрешений, но получил следующую ошибку:

 chmod: cannot access '/Shared': Protocol error

Vagrant, ssh и "ops" в целом для меня довольно новы, поэтому любые указатели, предложения и ответы были бы высоко оценены.

Ответ 1

Вы перемещали/переименовали любой родительский каталог вашего бродячего бокса во время его приостановки?

Если это так, запустите vagrant halt, отмените любые переименования, затем vagrant up и вы запустите проект dir.

Я столкнулся с такой же проблемой после переименования родительского каталога, где находятся файлы проекта Vagrantfile +.

Добавьте дополнительные сценарии, которые подтверждают, что переименование родительского каталога бродячего проекта во время приостановления виртуальной машины вызывает эту проблему с разрешениями; однако , если вы полностью отключите виртуальную машину с помощью vagrant halt, вы можете свободно переименовать.

Вчера у нас был совершенно функциональный RoR env на ящике Ubuntu exact32. Вышел из оболочки, запустил vagrant suspend и выключил рабочую станцию.

Сегодня я загрузил свою рабочую станцию ​​(хост-компьютер) и переименовал родительский каталог моего бродячего проекта, например:

└── ORIGINAL_DIR_NAME
    ├── Vagrantfile
    └── PROJECT

└── NEW_DIR_NAME
    ├── Vagrantfile
    └── PROJECT

После этого я запустил vagrant up, vagrant ssh. Однажды в раковине VM я не мог войти в/бродягу.

ls -alh / из возвращенной оболочки:

ls: cannot access /vagrant: Protocol error
[...]
drwxrwxrwt  2 root root 4.0K Aug  4 21:17 tmp
drwxr-xr-x 10 root root 4.0K Sep 14  2012 usr
d?????????  ? ?    ?       ?            ? vagrant
drwxr-xr-x 11 root root 4.0K Aug  4 19:23 var
[...]

также пробовал chmod на /vagrant и получил следующее:

chmod: cannot access `/vagrant': Protocol error

В первой попытке исправления был запущен vagrant suspend, переименовал родительский каталог обратно в исходное значение, а затем запустил vagrant up. К сожалению, это уничтожило всю бродячую ВМ, и она застряла в бродячем священнике - не будет полностью загружаться или закрываться.

Итак, исправленное исправление заключается в выходе из всех брандмаутных ssh-оболочек, запустите vagrant halt (не приостанавливать), чтобы убедиться, что он ВЫКЛ (не спит) и возвращается любые последние переименования в родительские каталоги. Затем vagrant up и посмотрим, можете ли вы попасть в /vagrant! После этого, если вы хотите переименовать свои папки только vagrant halt, переименовать и vagrant up.

Ответ 2

После подробного ответа @musophob я понял, что если вы просто хотите переместить свой VagrantFile в другую папку проекта, вы всегда должны перезагрузить виртуальную машину, чтобы исправить доступ к /vagrant.

Так как я делаю это достаточно часто, я использую ярлык vagrant reload command - это просто vagrant halt, за которым следует vagrant up и VM готов.

Ответ 3

Я уже несколько раз сталкивался с той же проблемой, но не при переименовании родительского каталога или перемещении Vagrantfile, а при простом создании или переименовании файлов на хосте. Поскольку это происходит очень редко по неизвестным причинам, я не смог воспроизвести это намеренно.

Тем не менее, простая vagrant reload исправляет проблему.