Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Still Unable to Use NFS/Fuse? #1962

Closed
MrObvious opened this issue Apr 20, 2017 · 18 comments
Closed

Still Unable to Use NFS/Fuse? #1962

MrObvious opened this issue Apr 20, 2017 · 18 comments

Comments

@MrObvious
Copy link

MrObvious commented Apr 20, 2017

This bug-tracker is monitored by developers and other technical types. We like detail! So please use this form and tell us, concisely but precisely, what's up. Please fill out ALL THE FIELDS!

If you have a feature request, please post to the UserVoice. If you're reporting a BSOD, don't post here! Instead, e-mail "secure@microsoft.com", and if possible attach the minidump from "C:\Windows\minidump".

  • Your Windows build number: (Type ver at a Windows Command Prompt)
    16176
  • What you're doing and what's happening: (Copy&paste specific commands and their output, or include screen shots)
    Either sudo apt-get install nfs-common then mount -t nfs... or fuse the same way.

I tried even using the Windows NFS fuse port and it didn't seem to want to work. See https://github.com/sahlberg/fuse-nfs for more info. I'm actually using https://github.com/Daniel-Abrecht here and what I get:
user@PC:~$ cd /mnt/c/Temp/
user@PC:/mnt/c/Temp$ ./fuse-nfs.exe -D -n nfs://some/server/path -m 'X:'
Dokan: debug mode on
Dokan: use stderr
AllocationUnitSize: 512 SectorSize: 512
device opened
mounted: X: -> \Volume{d6cc17c5-1736-4085-bce7-964f1e9f5de9}
...

Then on another bash window:
user@PC:/mnt/x$ sudo mount -t drvfs 'X:' /mnt/x
mount: wrong fs type, bad option, bad superblock on X:,
missing codepage or helper program, or other error

   In some cases useful info is found in syslog - try
   dmesg | tail or so.
  • What's wrong / what should be happening instead: It should mount. Either support it natively (which would in theory get rid of the need for the NFS client that is not very well supported in Windows) or allow fuse to work. Personally I'd like to see both native fuse and NFS from the Ubuntu stack work.

  • Strace of the failing command, if applicable: (If <cmd> is failing, then run strace -o strace.txt -ff <cmd>, and post the strace.txt output here)
    user@PC:/mnt/x$ sudo strace mount -t drvfs 'X:' /mnt/x
    execve("/bin/mount", ["mount", "-t", "drvfs", "X:", "/mnt/x"], [/* 15 vars /]) = 0
    brk(NULL) = 0x1f71000
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdd7afa0000
    access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
    open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
    fstat(3, {st_mode=S_IFREG|0644, st_size=87622, ...}) = 0
    mmap(NULL, 87622, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdd7af8a000
    close(3) = 0
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/lib/x86_64-linux-gnu/libmount.so.1", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\225\0\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0644, st_size=286824, ...}) = 0
    mmap(NULL, 2385984, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdd7a9b0000
    mprotect(0x7fdd7a9f4000, 2097152, PROT_NONE) = 0
    mmap(0x7fdd7abf4000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x44000) = 0x7fdd7abf4000
    mmap(0x7fdd7abf6000, 2112, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdd7abf6000
    close(3) = 0
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\t\2\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0755, st_size=1864888, ...}) = 0
    mmap(NULL, 3967392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdd7a5e0000
    mprotect(0x7fdd7a79f000, 2097152, PROT_NONE) = 0
    mmap(0x7fdd7a99f000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1bf000) = 0x7fdd7a99f000
    mmap(0x7fdd7a9a5000, 14752, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdd7a9a5000
    close(3) = 0
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/lib/x86_64-linux-gnu/libblkid.so.1", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\201\0\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0644, st_size=262408, ...}) = 0
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdd7af80000
    mmap(NULL, 2361576, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdd7a390000
    mprotect(0x7fdd7a3cc000, 2093056, PROT_NONE) = 0
    mmap(0x7fdd7a5cb000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3b000) = 0x7fdd7a5cb000
    mmap(0x7fdd7a5d0000, 2280, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdd7a5d0000
    close(3) = 0
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260Z\0\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0644, st_size=130224, ...}) = 0
    mmap(NULL, 2234080, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdd7a160000
    mprotect(0x7fdd7a17f000, 2093056, PROT_NONE) = 0
    mmap(0x7fdd7a37e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e000) = 0x7fdd7a37e000
    mmap(0x7fdd7a380000, 5856, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdd7a380000
    close(3) = 0
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0!\0\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0644, st_size=31712, ...}) = 0
    mmap(NULL, 2128832, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdd79f50000
    mprotect(0x7fdd79f57000, 2093056, PROT_NONE) = 0
    mmap(0x7fdd7a156000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7fdd7a156000
    close(3) = 0
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/lib/x86_64-linux-gnu/libuuid.so.1", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\25\0\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0644, st_size=18976, ...}) = 0
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdd7af70000
    mmap(NULL, 2113904, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdd79d40000
    mprotect(0x7fdd79d44000, 2093056, PROT_NONE) = 0
    mmap(0x7fdd79f43000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7fdd79f43000
    close(3) = 0
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/lib/x86_64-linux-gnu/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\25\0\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0644, st_size=456632, ...}) = 0
    mmap(NULL, 2552072, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdd79ad0000
    mprotect(0x7fdd79b3e000, 2097152, PROT_NONE) = 0
    mmap(0x7fdd79d3e000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6e000) = 0x7fdd79d3e000
    close(3) = 0
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\r\0\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0644, st_size=14608, ...}) = 0
    mmap(NULL, 2109680, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdd798c0000
    mprotect(0x7fdd798c3000, 2093056, PROT_NONE) = 0
    mmap(0x7fdd79ac2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x7fdd79ac2000
    close(3) = 0
    access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
    open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
    read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260`\0\0\0\0\0\0"..., 832) = 832
    fstat(3, {st_mode=S_IFREG|0755, st_size=138696, ...}) = 0
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdd7af60000
    mmap(NULL, 2212904, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fdd796a0000
    mprotect(0x7fdd796b8000, 2093056, PROT_NONE) = 0
    mmap(0x7fdd798b7000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7fdd798b7000
    mmap(0x7fdd798b9000, 13352, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdd798b9000
    close(3) = 0
    mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdd7af50000
    mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdd7af40000
    arch_prctl(ARCH_SET_FS, 0x7fdd7af40840) = 0
    mprotect(0x7fdd7a99f000, 16384, PROT_READ) = 0
    mprotect(0x7fdd798b7000, 4096, PROT_READ) = 0
    mprotect(0x7fdd79ac2000, 4096, PROT_READ) = 0
    mprotect(0x7fdd79d3e000, 4096, PROT_READ) = 0
    mprotect(0x7fdd79f43000, 4096, PROT_READ) = 0
    mprotect(0x7fdd7a156000, 4096, PROT_READ) = 0
    mprotect(0x7fdd7a37e000, 4096, PROT_READ) = 0
    mprotect(0x7fdd7a5cb000, 16384, PROT_READ) = 0
    mprotect(0x7fdd7abf4000, 4096, PROT_READ) = 0
    mprotect(0x608000, 4096, PROT_READ) = 0
    mprotect(0x7fdd7ae25000, 4096, PROT_READ) = 0
    munmap(0x7fdd7af8a000, 87622) = 0
    set_tid_address(0x7fdd7af40b10) = 47
    set_robust_list(0x7fdd7af40b20, 24) = 0
    rt_sigaction(SIGRTMIN, {0x7fdd796a5b50, [], SA_RESTORER|SA_SIGINFO, 0x7fdd796b1390}, NULL, 8) = 0
    rt_sigaction(SIGRT_1, {0x7fdd796a5be0, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7fdd796b1390}, NULL, 8) = 0
    rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
    getrlimit(RLIMIT_STACK, {rlim_cur=8192
    1024, rlim_max=8192*1024}) = 0
    statfs("/sys/fs/selinux", 0x7ffffb351550) = -1 ENOENT (No such file or directory)
    statfs("/selinux", 0x7ffffb351550) = -1 ENOENT (No such file or directory)
    brk(NULL) = 0x1f71000
    brk(0x1f92000) = 0x1f92000
    open("/proc/filesystems", O_RDONLY) = 3
    fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
    read(3, "nodev sysfs\nnodev root"..., 4096) = 367
    read(3, "", 4096) = 0
    close(3) = 0
    open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
    fstat(3, {st_mode=S_IFREG|0644, st_size=2981280, ...}) = 0
    mmap(NULL, 2981280, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fdd793c8000
    close(3) = 0
    getuid() = 0
    geteuid() = 0
    getcwd("/mnt/x", 4096) = 7
    lstat("/mnt/x/X:", 0x7ffffb351260) = -1 ENOENT (No such file or directory)
    lstat("/mnt", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
    lstat("/mnt/x", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
    stat("/sbin/mount.drvfs", 0x7ffffb3502d0) = -1 ENOENT (No such file or directory)
    stat("/sbin/fs.d/mount.drvfs", 0x7ffffb3502d0) = -1 ENOENT (No such file or directory)
    stat("/sbin/fs/mount.drvfs", 0x7ffffb3502d0) = -1 ENOENT (No such file or directory)
    getuid() = 0
    geteuid() = 0
    getgid() = 0
    getegid() = 0
    prctl(PR_GET_DUMPABLE) = 1
    getuid() = 0
    geteuid() = 0
    getgid() = 0
    getegid() = 0
    prctl(PR_GET_DUMPABLE) = 1
    stat("/run", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
    lstat("/run/mount/utab", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
    open("/run/mount/utab", O_RDWR|O_CREAT|O_CLOEXEC, 0644) = 3
    close(3) = 0
    mount("X:", "/mnt/x", "drvfs", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument)
    open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
    fstat(3, {st_mode=S_IFREG|0644, st_size=2995, ...}) = 0
    read(3, "# Locale name alias data base.\n#"..., 512) = 512
    read(3, "See the\n# GNU General Public Lic"..., 512) = 512
    read(3, "nd for the time being for\n# back"..., 512) = 512
    read(3, "hese lines were removed\n# becaus"..., 512) = 512
    read(3, "8859-1\ngalego\t\tgl_ES.ISO-8859-1\n"..., 512) = 512
    read(3, "O.ISO-8859-1 nb_NO.ISO-8859-1\nno"..., 512) = 435
    read(3, "", 512) = 0
    close(3) = 0
    open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale/en_US.utf8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale/en_US/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale/en.UTF-8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale/en.utf8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale/en/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale-langpack/en_US/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale-langpack/en.utf8/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/usr/share/locale-langpack/en/LC_MESSAGES/util-linux.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
    write(2, "mount: ", 7mount: ) = 7
    write(2, "wrong fs type, bad option, bad s"..., 106wrong fs type, bad option, bad superblock on X:,
    missing codepage or helper program, or other error) = 106
    write(2, "\n", 1
    ) = 1
    write(2, "\n In some cases useful inf"..., 86
    In some cases useful info is found in syslog - try
    dmesg | tail or so.
    ) = 86
    close(1) = 0
    close(2) = 0
    exit_group(32) = ?
    +++ exited with 32 +++

See our contributing instructions for assistance.

I realize there is https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13600230-mount-nfs-sshfs-samba-smb-network-drives?tracking_code=1cfa2cdef47c57e39e3f56294a1c2b84 and also https://blogs.msdn.microsoft.com/wsl/2017/04/18/file-system-improvements-to-the-windows-subsystem-for-linux/ but it was partially implemented. I would assume by the wording of the blog, "With network file systems, DrvFs does not set the correct Linux permissions bits on a file; instead, all files are reported with full access (0777) and the only way to determine if you can actually access the file is by attempting to open it. Network file systems are also not case sensitive and do not support symbolic links" that NFS was meant by this line, and that it should be working.

It should be mentioned, using the Windows CIFS client and mounting -t drvfs does work as advertised at least, so that's awesome to see.

@therealkenc
Copy link
Collaborator

therealkenc commented Apr 20, 2017

There's a user voice for FUSE on WSL here, FWIW.

Setting aside Linux FUSE on WSL though, I am also mildly interested in the generality of the filesystem improvements. The blog post is awful light on technical details. I was very pleasantly surprised that cdfs.sys, udfs.sys, exfat.sys, mrxsmb*.sys came along for the ride with the new mount feature. DrvFS had previously only supported NTFS (and in principle ReFS).

So the question is, could support for say mrxdav.sys or msnfsflt.sys/nfsrdr.sys be added? Or even crazy third party filesystems (dokan1.sys, winfsp.sys, gvflt.sys) like the OP hopes, so long as they are mountable in Windows? Or is that technically a "big ask". That is, would every NT filesystem driver need some lxcore.sys attention to support. Inquiring minds want to know.

@fpqc
Copy link

fpqc commented Apr 20, 2017

That opensource btrfs driver would be neat as well, especially if the drvfs API (or even the lxfs API) were opened up.

Also, I'm afraid that NFS support won't really be receiving high levels of support until the Windows NFS client/driver makes it in as more than a remnant of the old SFU environment (the NFS client is commandline only and pro-only afaik).

@jfmherokiller
Copy link

if you want fuse on windows i suggest https://github.com/dokan-dev/dokany but as @fpqc said i would like them to open the api the subsystem uses

@MrObvious
Copy link
Author

MrObvious commented Apr 20, 2017

I couldn't get Dokany to work with NFS/fuse. I don't think that even works with WSL yet.

To clarify, I filed this as a bug because I feel like it's a feature and isn't working as expected. I will say though I'm extremely grateful for getting something as fast as Microsoft did. Kudos to the devs!

What about making documentation where we could add the .sys files ourselves and just provide the details needed for the APIs? Is that possible or does it require Windows source/kernel visibility? That way we could make it faster and it's one less thing the devs have to stay on top of.

@fpqc
Copy link

fpqc commented Apr 20, 2017

Windows Pro editions have a built-in NFSv3 client

@MrObvious
Copy link
Author

And it needs some work. The performance is terrible. Ubuntu's NFS client is good. I can read/write from the share I edited out on an Ubuntu VM at over 20 MB/s using NFS, but using CIFS is more like 14 MB/s. Using the Windows NFS client, more like .7 MB/s. Fuse NFS ironically came in at 7 MB/s.

@fpqc
Copy link

fpqc commented Apr 20, 2017

@MrObvious hmm.. I wonder if @bitcrazed could forward that on to the relevant team.

@therealkenc
Copy link
Collaborator

therealkenc commented Apr 20, 2017

The API is already open, same as Linux. It is mount(2) with char *filesystemtype = "drvfs". The only question here is, what is the behavioral expectation of drvfs with respect to the many Windows filesystem drivers. The blog post says:

Now, not only can you manually mount any drives on your system, we’ve also added support for other file systems such as FAT, as well as mounting network locations.

"Such as" right now seems to mean NTFS, FAT, CDFS, UDFS, SMBFS.

Anyway, this thread just degraded to the point we're suggesting giving the Windows NFS guys a "heads up" their performance sucks, and is no doubt going to get tagged as 'discussion' in five...four...three.... I'll try again next time.

@fpqc
Copy link

fpqc commented Apr 20, 2017

haha oops.

To be fair, Ken, I haven't seen any updates to the windows NFS client documentation since like 2008, so I don't know how actively maintained it is (main reason I said maybe rich will give somebody a heads up).

@bitcrazed
Copy link
Contributor

Hey all. Appreciate the discussion here, but ...

FUSE doesn't work right now because we've not yet implemented support for it. If/when we do implement it, if issues are found, then feel free to report those issues here, but until then, please try to keep future feature requests to UserVoice.

@MrObvious
Copy link
Author

Rich thanks for replying. I filed as a bug because the original user voice was for NFS and Fuse as well as Windows SMB share support. However that was closed as fixed and the documentation said it was supporting NFS the way I read it on the blog, so I feel this is a bug. Did I read something wrong?

Thank you so much for the work on the project.

@bitcrazed
Copy link
Contributor

Yes, I split out the various areas into individual User Voice asks. here's the one for FUSE.

While there, please be sure to search for other asks you might be interested in upvoting.

@fpqc
Copy link

fpqc commented May 27, 2017

@bitcrazed If Microsoft does end up implementing FUSE, it would probably make a lot of sense to have it implemented in Windows itself, not just WSL. I can think of tons of cases where one would want to be able to mount all kinds of exotic filesystems and make them available through win32 as well. The GVFS team actually said that they had first developed a FUSE-like implementation before moving to the current GvFlt-based implementation (they switched the implementation due to performance problems arising from FUSE-related context-switching specifically in the case of Git) ( link and link 2 ), so I hope that this is something you're at least looking at, because it seems like the filesystem team got something related implemented to at least the level of a testable prototype.

I'm writing this here rather than the uservoice, since it doesn't make sense on the WSL uservoice itself I guess.

@pnf
Copy link

pnf commented Dec 8, 2017

Fuse would be extremely useful. Among other things, it would be possible to use cryfs.

@moisespr123
Copy link

I Also want to see NFS support for WSL. If it can be mounted in Windows, why cannot it be mounted in WSL?

@therealkenc
Copy link
Collaborator

therealkenc commented May 10, 2018

If it can be mounted in Windows, why cannot it be mounted in WSL?

Indeed. See the various referenced issues just above your post. Unfortunately this particular issue# went off the rails in the title and can't be recovered. The error up top is and remains:

mount("X:", "/mnt/x", "drvfs", MS_MGC_VAL, NULL) = -1 EINVAL (Invalid argument)

It celebrated a birthday recently.

@therealkenc
Copy link
Collaborator

therealkenc commented May 28, 2018

Closing because this now year plus old discussion thread can't be recovered at this point. There are several well formed issues that could be opened following CONTRIBUTING.md if someone were feeling pedantic and motivated:

  • Specific steps necessary to set up a MS Window Pro/Server NFS client share and then mount -t drvfs the drive letter / share.
  • Specific steps necessary to set up a Dokany Windows filesystem and then mount -t drvfs the drive letter / share. Use their mirror sample, and don't mention the F word (which is irrelevant).
  • Specific steps necessary to set up a winfsp Windows filesystem and then mount -t drvfs the drive letter / share. Use their passthrough sample, and don't mention the F word (which is irrelevant).

Some of those scenarios might work for all I know; I haven't tried. They are all ref #2163 #579 #2896 #2999 and friends.

@mrnerdhair
Copy link

For posterity: on WSL2, see the behavior documented in dokan-dev/dokany#932. Long story short, if your filesystem returns anything other than STATUS_INVALID_INFO_CLASS, STATUS_INVALID_PARAMETER, or STATUS_NOT_SUPPORTED in response to an unrecognized FileInformationClass parameter on a IRP_MN_QUERY_DIRECTORY request, you're gonna have a bad time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

9 participants