How to access mounted network drive on Windows Linux Subsystem?

72

32

I have a samba drive which is mounted on my local windows computer.

I have a /mnt/c drive in WLS (Windows 10 Bash), but no /mnt/z.

Is there a way to access it somehow? Can I remount it in WSL?

Charles Shiller

Posted 2016-09-27T04:14:24.423

Reputation: 851

Answers

25

[Update -- apparently this feature is available in build 16176. I haven't tried it yet.]

No, though there may be some trick I haven't discovered. Windows Subsystem for Linux does not mount network drives. A Microsoft employee says here (in a comment):

We only “mount” fixed drives at this time. USB/removable/network drives are not handled at this time. This capability is on our backlog, but it’s not on the cards anytime soon.

So don't hold your breath.

I attempted to work around it by using a symbolic link, like this:

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

The link works just fine in "normal" Windows (cmd.exe, PowerShell, file explorer, etc.), but is invisible to WSL:

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

For my own use, this limitation is a show-stopper. I have things on network drives that I'm not willing to move. There are alternatives; I'm using Cygwin.

Joseph Thvedt

Posted 2016-09-27T04:14:24.423

Reputation: 493

Agreed, this is a showstopper for me too - I just installed msys2 for this. – Ela782 – 2017-04-07T17:55:02.723

131

from the link bleater posted

Mounting DrvFs

In order to mount a Windows drive using DrvFs, you can use the regular Linux mount command. For example, to mount a removable drive D: as /mnt/d directory, run the following commands:

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

Now, you will be able to access the files of your D: drive under /mnt/d. When you wish to unmount the drive, for example so you can safely remove it, run the following command:

$ sudo umount /mnt/d

Mounting network locations

When you wish to mount a network location, you can of course create a mapped network drive in Windows and mount that as indicated above. However, it's also possible to mount them directly using a UNC path:

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

Note the single quotes around the UNC path; these are necessary to prevent the need to escape the backslashes. If you don't surround the UNC path with single quotes, you need to escape the backslashes by doubling them (e.g. \\\\server\\share).

WSL does not have any way to specify which credentials to use to connect to a network share. If you need to use different credentials to connect to the server, specify them in Windows by navigating to the share in File Explorer, using the Windows Credential Manager, or the net use command. The net use command can be invoked from inside WSL (using net.exe use) via interop. Type net.exe help use for more information on how to use this command.

gman

Posted 2016-09-27T04:14:24.423

Reputation: 2 303

4totally worked for my "bash for windows 10"! Thank you so much! – Ying Zhang – 2018-01-26T00:55:57.757

8The correct answer should be changed to this one as it directly answers the question. – Tomek – 2018-01-31T02:43:10.990

You need "Windows Insider build" to get DrvFs. -1 (not actually down voting) – FractalSpace – 2018-02-27T21:39:53.783

7I don't have windows insider build and it's working for me – gman – 2018-02-28T01:14:32.383

That is completely awesome. – Erik – 2018-03-24T02:41:46.980

Yes, this is a better answer. I believe mine was correct at the time, but features since added to WSL have rendered it out-of-date. – Joseph Thvedt – 2018-09-12T16:52:54.173

3This mounts the share, but everything is owned by root, and some files are unreadable (even with sudo, and even if the permissions inside WSL are 777). I can read the files from windows file explorer. Adding any mount options (-o) gives me "wrong fs type, bad option, bad superblock" error. – Jay K – 2018-11-13T17:46:44.433

Works flawlessly; this answer should be accepted – Youssef Moawad – 2019-07-02T14:16:59.787

mounting works, cd works, however "ls" fails with "reading directory '.': Invalid argument" and all file operations (cp) fail, complaining that can't stat file. unmounting doesn't work (have to exit bash and start new shell, at which point is not anymore mounted) – Gnudiff – 2020-02-21T13:19:08.123

2

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

Here is a way to mount GFS in WSL based on Getting `sshfs` working on WSL or finding an alternative The trick is to use https://www.nsoftware.com/sftp/netdrive/ to ssh to GFS from Windows and convert it to a filesystem that can be mounted under WSL.

  1. Install OpenSSH Server under Win10 Win10 Settings -> Apps -> Manage optional features -> Add feature -> OpenSSH Server restart if necessary open Services -> OpenSSH -> Properties -> Startup Type -> Automatic (delayed)

  2. Install and run SFTPNetDrive, right click on icon in hidden icons -> Main window (or maybe already open) -> Profile -> new profile ( server: localhost, user: * pwd:* Drive Letter: F (or another) Advanced -> ( Protocol -> uncheck compression; Specified folder: G:\ ) )

  3. in Bash (wsl): sudo mkdir /mnt/f; sudo mount -t drvfs F: /mnt/f

I'm not sure how stable it is, but I was able to open files in WSL.

Christopher Crawford

Posted 2016-09-27T04:14:24.423

Reputation: 71

2

I just ran across this issue recently where I have a Mac host running a vmware fusion with windows 10 installed as a guest OS. I installed WSL (ubuntu) in the windows 10. I am sharing a folder on my Mac (~/Public) with all my fusion guest O/S, and it works seemlessly with any linux/bsd guest OSes. On Windows 10, the network drive for the shared folder is \vmware-host\Shared Folder\Public\ and is accessible from the windows 10, and is also mounted on Z: drive as well.

The problem is when you are using bash in WSL. The suggested method is to (adjust actual drive letter and folder names as needed)

sudo mkdir /mnt/z

sudo mount -t drvfs Z: /mnt/z

or, more directly

sudo mount -t drvfs '\vmware-host\Shared Folder\Public' /mnt/z

The mount command is successful, but in fact the mount "failed". You can't see the content of the folder /mnt/z. The mount works well with other network drives AS LONG AS the filesystem is a windows (NTFS, FAT32, etc) filesystem. Since the file system I'm trying to use is apple file system (apfs), the drvfs cannot use it. It will likewise fail if the underlying filesystem you are trying to mount is linux (ext2, ext3, ...) or network nfs/samba type. This drvfs will only understand windows native drvie format.

Its funny how you can use none-windows filesystem drives in windows, but in wsl/linux, you can only see windows filesystem drives....

So, the short answer is

sudo mount -t drvfs { \network\drive\folder | X:\folder } /mnt/folder

as long as the network drive is using native windows filesystem (ntfs, fat*).

Marcus Yoo

Posted 2016-09-27T04:14:24.423

Reputation: 51

0

There are (at least) two ways to use Bash in Windows:

  1. The Bash that comes with WLS (when installing Linux on Windows 10 from Windows Store or other sources)
  2. Git-Bash on Windows

Git-Bash has access to network folders (install git-bash > go to the network folder > right-click > "Git Bash Here" > run pwd to see the path).

If you have to use the WLS version of bash, then you can call Git-Bash from WLS bash as follows:

WLS_Bash_Shell:$ /mnt/c/Program\ Files/Git/bin/bash.exe ScriptThatUsesNetworkFolders.sh

LoMaPh

Posted 2016-09-27T04:14:24.423

Reputation: 135

WSL non-windows net drives don't work, this git-bash answer is the only answer that did. Question shouldn't be negative, please vote up. – Gringo Suave – 2019-12-11T21:09:01.273