Windows-Subsystem-for-Linux

是否可以將關聯路徑掛載到 WSL?

  • January 16, 2021

我使用subst R: .了一種更快的方式來訪問文件夾。

是否可以將R:“驅動器”安裝到 WSL?當我嘗試執行sudo mkdir /mnt/rthensudo mount -t ntfs R: /mnt/r時,我遇到了這個錯誤:

ntfs-3g: Failed to access volume 'R:': No such file or directory

ntfs-3g 2017.3.23AR.3 integrated FUSE 28 - Third Generation NTFS Driver

Configuration type 7, XATTRS are on, POSIX ACLS are on
Copyright (C) 2005-2007 Yura Pakhuchiy
Copyright (C) 2006-2009 Szabolcs Szakacsits
Copyright (C) 2007-2017 Jean-Pierre Andre
Copyright (C) 2009 Erik Larsson 

Usage:    ntfs-3g [-o option[,...]] <device|image_file> <mount_point>

Options:  ro (read-only mount), windows_names, uid=, gid=,
umask=, fmask=, dmask=, streams_interface=.
Please see the details in the manual (type: man ntfs-3g).

Example: ntfs-3g /dev/sda1 /mnt/windows

News, support and information:  http://tuxera.com 

提前致謝!

在 StackOverflow 上問了同樣的問題,但意識到這不是這樣做的正確地方……😅

雖然 WSL 無法自動甚至直接訪問subst驅動器,但有一些方法可以映射它們。根據您的具體工作流程,這裡有幾條路線可供選擇。

要記住的主要事項是:

  • 在 Linux 中,sudo mount --bind . /mnt/r大致相當於subst R: .. 如果您可以只使用 Linux 等效版本,並且不需要在 Windows 下訪問相同的驅動器號,那麼這可能就是您所需要的。您甚至可以subst在 bash 中創建一個與 Windows 非常接近的函式。
  • 也就是說,bind這裡可能是矯枉過正。您很可能只需要一個符號連結,例如ln -s /mnt/c/Users/username ~/r. 只要您對目標位置具有權限,就不需要 root。
  • 對於您在 Windows 中創建的映射,subst您可以通過呼叫 PowerShell 來檢索substLinux 中的匹配路徑,例如: powershell.exe -c subst
  • grep您可以使用和sed: 將其過濾到僅 R: 映射powershell.exe -c "subst" | grep "^R" | sed "s/^R:\\\\: => //"(如果有多個驅動器/目錄subst,請僅找到 R: 驅動器,然後刪除目錄路徑之前的所有內容)。
  • PowerShell 返回一個額外的換行符(“\r”),因此您必須使用tr -d "\r".
  • wslpath您可以使用該命令將 Windows 路徑轉換為等效的 Linux/WSL 。

把它們放在一起,你就得到了可以把你的 R: 變成/mnt/r(或者~/r如果這樣更方便的話)的腳本:

rpath=$(powershell.exe -c "subst" | grep "^R" | sed "s/^R:\\\\: => //" | tr -d "\r")
sudo mount --bind $(wslpath "${rpath}") /mnt/r/

或與ln相反的等價物。

當然,您需要將它分配給一個函式,以便更容易重複。

引用自:https://unix.stackexchange.com/questions/629400