Как получить доступ к сетевому диску в подсистеме Windows Linux?

62

У меня есть диск Samba, который установлен на моем локальном компьютере с Windows.

У меня есть диск "/ mnt / c" в WLS ("Windows 10 bash"), но нет "/ mnt / z".

Есть ли способ как-то получить к нему доступ? Могу ли я перемонтировать его в WLS?

Чарльз Шиллер
источник
3
Об этой функции есть обсуждение в Microsoft Developer Feedback. Wpdev.uservoice.com/forums/…
Нельсон,

Ответы:

23

[Обновление - по- видимому, эта функция доступна в сборке 16176 . Я еще не пробовал.]

Нет, хотя может быть какой-то трюк, который я не обнаружил. Подсистема Windows для Linux не монтирует сетевые диски. Сотрудник Microsoft говорит здесь (в комментарии):

В настоящее время мы только «монтируем» фиксированные диски. В настоящее время USB / съемные / сетевые диски не обрабатываются. Эта возможность находится в нашем бэклоге, но в ближайшее время ее нет.

Так что не задерживай дыхание.

Я попытался обойти это, используя символическую ссылку, например так:

c:> mklink /d c:\some\directory \\some_server\some_share

Ссылка прекрасно работает в «обычной» Windows (cmd.exe, PowerShell, проводник и т. Д.), Но невидима для WSL:

$ ls -ld /mnt/c/some/directory
/mnt/c/some/directory not found

Для моего собственного использования это ограничение - ограничитель шоу. У меня есть вещи на сетевых дисках, которые я не хочу переносить. Есть альтернативы; Я использую Cygwin.

Джозеф Тведт
источник
Согласитесь, это для меня тоже showtopper - я только что установил msys2 для этого.
Ela782
6
Подробности: blogs.msdn.microsoft.com/wsl/2017/04/18/…
блайтер
порядок ваших аргументов mklink неправильно - это должно быть linkname target, а неtarget linkname
masterxilo
Да, masterxilo, вы правы - у меня здесь неправильная команда mklink. Исправлена. Когда я действительно попробовал это, я сделал это правильно, и это не сработало в сравнении с WSL. Сейчас это спорный вопрос, поскольку WSL теперь может подключаться к сетевым ресурсам. Но спасибо за исправление. Даже если почти никто не смотрит на этот ответ, я не хочу оставлять такую ​​ошибку.
Джозеф Тведт
109

от ссылка Бяшка размещена

Монтаж DrvFs

Чтобы смонтировать диск Windows с помощью DrvFs, вы можете использовать обычную команду монтирования Linux. Например, чтобы подключить съемный диск D: как каталог / mnt / d, выполните следующие команды:

$ sudo mkdir /mnt/d
$ sudo mount -t drvfs D: /mnt/d

Теперь вы сможете получить доступ к файлам вашего диска D: в / mnt / d. Если вы хотите отключить диск, например, чтобы вы могли безопасно удалить его, выполните следующую команду:

$ sudo umount /mnt/d

Монтаж сетевых локаций

Если вы хотите подключить сетевое расположение, вы, конечно, можете создать подключенный сетевой диск в Windows и смонтировать его, как указано выше. Однако их также можно монтировать напрямую, используя путь UNC:

$ sudo mkdir /mnt/share
$ sudo mount -t drvfs '\\server\share' /mnt/share

Обратите внимание на одинарные кавычки вокруг пути UNC; они необходимы, чтобы избежать необходимости избегать обратной косой черты. Если вы не окружаете путь UNC одинарными кавычками, вам нужно избежать обратной косой черты, удвоив их (например \\\\server\\share).

WSL не имеет никакого способа указать, какие учетные данные использовать для подключения к общему сетевому ресурсу. Если вам необходимо использовать разные учетные данные для подключения к серверу, укажите их в Windows, перейдя к общему ресурсу в проводнике, с помощью диспетчера учетных данных Windows или команды net use. Команда net use может быть вызвана изнутри WSL (используя net.exe) через interop. Введите net.exe help use для получения дополнительной информации о том, как использовать эту команду.

GMan
источник
2
полностью работал для моего "Баш для Windows 10"! Спасибо большое!
Ин Чжан
6
Правильный ответ должен быть изменен на этот, так как он прямо отвечает на вопрос.
Томек
Вам нужна сборка Windows Insider для получения DrvFs. -1 (на самом деле нет голосования)
FractalSpace
5
У меня нет инсайдерской сборки Windows, и он работает на меня
gman
2
Это монтирует общий ресурс, но все принадлежит root, и некоторые файлы не читаются (даже с sudo и даже если разрешения внутри WSL равны 777). Я могу читать файлы из проводника Windows. Добавление любых параметров монтирования ( -o) приводит к ошибке «неверный тип fs, неверный параметр, плохой суперблок».
Джей К
2

см. https://github.com/Microsoft/WSL/issues/2999#issuecomment-455835951

Вот способ монтировать GFS в WSL, основанный на получении `sshfs`, работающем на WSL или поиске альтернативы . Хитрость заключается в том, чтобы использовать https://www.nsoftware.com/sftp/netdrive/ для ssh в GFS из Windows и преобразовать его к файловой системе, которая может быть смонтирована под WSL.

  1. Установите OpenSSH Server в Win10 Настройки Win10 -> Приложения -> Управление дополнительными функциями -> Добавить функцию -> Перезапустите сервер OpenSSH, если необходимо, откройте Службы -> OpenSSH -> Свойства -> Тип запуска -> Автоматически (с задержкой)

  2. Установите и запустите SFTPNetDrive, щелкните правой кнопкой мыши значок в скрытых значках -> Главное окно (или, возможно, уже открыто) -> Профиль -> новый профиль (сервер: localhost, пользователь: * pwd: * Буква диска: F (или другое) Дополнительно - > (Протокол -> снять флажок сжатия; указанная папка: G: \))

  3. в баш (wsl): sudo mkdir / mnt / f; sudo mount -t drvfs F: / mnt / f

Я не уверен, насколько он стабилен, но я смог открыть файлы в WSL.

Кристофер Кроуфорд
источник
-2

Есть (по крайней мере) два способа использования Bash в Windows:

  1. Bash, поставляемый с WLS (при установке Linux на Windows 10 из Магазина Windows или других источников)
  2. Git-Bash на Windows

Git-Bash имеет доступ к сетевым папкам (установите git-bash> перейдите в сетевую папку> щелкните правой кнопкой мыши> «Git Bash Here»> запустите, pwdчтобы увидеть путь).

Если вам нужно использовать версию bash для WLS, то вы можете вызвать Git-Bash из bash WLS следующим образом:

WLS_Bash_Shell:$ /mnt/c/Program\ Files/Git/bin/bash.exe ScriptThatUsesNetworkFolders.sh
LoMaPh
источник