如果您想要存取 Windows 不支援的 Linux 磁碟格式,則可以使用 WSL 2 掛接磁碟並存取其內容。 本教學課程將涵蓋識別要附加至 WSL2 的磁碟和分割區、如何掛接磁碟,以及如何存取磁碟的步驟。
如果您要連接外部磁碟機,但使用這些掛接指示並未成功時,您可以嘗試連線 USB 裝置的指示。 此 wsl --mount 命令目前不支援 USB/快閃磁碟機/SD 記憶卡讀卡機 (深入了解此問題)。
注意
需要系統管理員存取權,才能將磁碟附加至 WSL 2。
WSL 2 wsl --mount 命令不支援掛載目前使用中的磁碟 (或屬於磁碟的磁碟分割)。 即使只要求一個分割區,wsl --mount 一律會附加整個磁碟。 您無法掛接 Windows 安裝磁碟。
必要條件
您必須在 Windows 11 上,或執行 WSL Microsoft 市集版本。 若要檢查 WSL 和 Windows 版本,請使用命令:wsl.exe --version
使用 Windows 格式化與 Linux 格式化掛接外部磁碟機之間的差異
針對 Windows 格式化的外部磁碟機通常會使用 NTFS 檔案系統格式。 針對 Linux 格式化的外部磁碟機通常會使用 Ext4 檔案系統格式。
如果您已在 Windows 檔案系統上掛接 NTFS 格式的磁碟驅動器,您可以使用 WSL 從 Linux 散發套件存取該磁碟驅動器,方法是建立掛接的目錄(sudo mkdir /mnt/d以您想要使用的任何驅動器號取代 d ),然後使用 drvfs 文件系統 Interop 外掛程式,使用 命令:
sudo mount -t drvfs D: /mnt/d
如果您有 Ext4 格式的磁碟驅動器,則無法在 Windows 檔系統上掛接它。 若要在 Linux 發行版本上使用 WSL 掛接 Ext4 格式的磁碟機,您可以依照下列指示使用 wsl --mount 命令。
掛載未分割的磁碟
如果您有不含任何分割區的磁碟,則可以使用 wsl --mount 命令直接掛接。 首先,您需要識別磁碟。
識別磁碟 - 若要列出 Windows 中的可用磁碟,請執行:
Get-CimInstance -Query "SELECT * from Win32_DiskDrive"磁碟路徑可在 「DeviceID」 資料行下取得。 通常是
\\.\PHYSICALDRIVE*格式。掛接磁碟 - 使用 PowerShell,您可以使用上述探索到的磁碟路徑來掛接磁碟,請執行:
wsl.exe --mount <Disk>
掛接已分割磁碟
如果您有磁碟,但不確定其格式為何,或其具有哪些分割區,您可以遵循下列步驟來掛接磁碟。
識別磁碟 - 若要列出 Windows 中的可用磁碟,請執行:
Get-CimInstance -Query "SELECT * from Win32_DiskDrive"磁碟路徑可在 「DeviceID」 資料行下取得。 通常是
\\.\PHYSICALDRIVE*格式。列出並選取要掛接在 WSL 2 中的磁碟分割 - 識別磁碟之後,請執行:
wsl.exe --mount <Disk> --bare這會讓磁碟可在 WSL 2 中使用。 (在我們的範例中,
<Disk>是\\.\PHYSICALDRIVE*。附加之後,您可以在 WSL 2 內執行下列命令來列出分割區:
lsblk這會顯示可用的區塊裝置及其分割區。
在 Linux 內,區塊裝置會識別為 /dev/<Device><Partition>。 例如,/dev/sdb3是磁碟sdb的數據分割編號3。
範例輸出︰
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 1G 0 disk
├─sdb2 8:18 0 50M 0 part
├─sdb3 8:19 0 873M 0 part
└─sdb1 8:17 0 100M 0 part
sdc 8:32 0 256G 0 disk /
sda 8:0 0 256G 0 disk
識別檔案系統類型
如果您不知道磁碟或分割區的檔案系統類型,您可以使用此命令:
blkid <BlockDevice>
這會輸出偵測到的檔案系統類型 (在 TYPE="<Filesystem>" 格式下)。
掛接選取的分割區
識別出您想要掛接的分割區之後,請在每個分割區上執行此命令:
wsl.exe --mount <Disk> --partition <Index> --type <Type>
注意
如果您想要將整個磁碟掛接為單一磁碟區 (也就是如果磁碟未分割),則可以省略 --partition。
如果 --type 省略 ,預設文件系統類型為 'ext4'。
存取磁碟內容
掛接之後,即可在組態值所指向的路徑下存取磁碟:automount.root。 預設值是 /mnt/wsl。
從 Windows 中,您可以瀏覽至 \\wsl$\<Distro>\<Mountpoint> 以從 [檔案總管] 來存取磁碟 (挑選任何 Linux 發行版本)。
卸載磁碟
如果您想要從 WSL 2 解除掛載並分離磁碟,請執行:
wsl.exe --unmount [DiskPath]
在 WSL 中掛接 VHD
注意
Microsoft Store 中的 WSL 引入了可直接掛載 VHD 的新參數:wsl --mount --vhd <pathToVHD>
您也可以使用 wsl --mount 將虛擬硬碟檔案 (VHD) 掛接至 WSL。 若要這樣做,您必須先使用 Windows 中的 Mount-VHD 命令,將 VHD 掛接至 Windows。 請務必以系統管理員權限執行此命令。 以下是我們使用此命令的範例,也會輸出磁碟路徑。 請務必以實際的 VHD 路徑取代 <pathToVHD>。
Write-Output "\\.\PhysicalDrive$((Mount-VHD -Path <pathToVHD> -PassThru | Get-Disk).Number)"
您可以使用上述輸出來取得此 VHD 的磁碟路徑,並依照上一節中的指示將磁碟掛接至 WSL。
您也可以使用這項技術來掛接與其他 WSL 發行版本的虛擬硬碟互動,因為每個 WSL 2 發行版本都是透過稱為 ext4.vhdx 的虛擬硬碟檔案來儲存。 根據預設,WSL 2 發行版本的 VHD 會儲存在此路徑中:%LocalAppData%\Packages\[distro]\LocalState\[distroPackageName],請謹慎存取這些系統檔案,這是一個強大的使用者工作流程。 請務必先執行 wsl --shutdown,再與此磁碟互動,以確保磁碟未在使用中。
命令列參考
掛接特定的檔案系統
根據預設,WSL 2 會嘗試將裝置掛接為 ext4。 若要指定另一個檔案系統,請執行:
wsl.exe --mount <Disk> --type <Type>
例如,若要將磁碟掛接為 FAT,請執行:
wsl.exe --mount <Disk> --type vfat
注意
若要列出 WSL2 中可用的檔案系統,請執行:
cat /proc/filesystems
透過 WSL2 (Linux 檔案系統) 掛接磁碟時,就無法再透過 Windows 檔案系統上的 ext4 驅動程式掛接。
掛接特定分割區
根據預設,WSL 2 會嘗試掛接整個磁碟。 若要掛接特定分割區,請執行:
wsl.exe --mount <Disk> --partition <Index>
只有在磁碟是 MBR (主開機記錄) 或 GPT (GUID 磁碟分割表格) 時才適用。 閱讀磁碟分割樣式 - MBR 和 GPT。
指定掛接選項
若要指定掛接選項,請執行:
wsl.exe --mount <Disk> --options <Options>
範例:
wsl.exe --mount <Disk> --options "data=ordered"
注意
目前僅支援檔案系統特定選項。 泛型選項,例如 ro、 rw,... noatime不支援。
連接磁碟而不掛載
如果上述任何選項都不支援磁碟方案,您可以執行下列命令,將磁碟附加至 WSL 2,而不需將其掛載:
wsl.exe --mount <Disk> --bare
這會讓區塊裝置可在 WSL 2 內使用,以便從該處手動掛接。 使用 lsblk 以列出 WSL 2 內的可用區塊裝置。
指定掛接名稱
注意
此選項僅適用於 Microsoft Store 中的 WSL
根據預設,系統會根據實體磁碟或 VHD 名稱來產生掛接點名稱。 這可以被 --name 覆寫。
wsl.exe --mount <Disk> --name <Name>
範例:
wsl.exe --mount <Disk> --name myDisk
卸除磁碟
若要從 WSL 2 卸載磁碟,請執行以下命令:
wsl.exe --unmount [DiskPath]
如果省略了 Diskpath,所有附加的磁碟都會卸載和分離。
注意
如果一個磁碟無法卸載,WSL 2 可以藉由執行 wsl --shutdown 來強制結束,這會將磁碟中斷連結。
限制
此時,只有整個磁碟可以附加至 WSL 2,這表示無法只附加分割區。 具體地說,這表示無法使用
wsl --mount來讀取開機裝置上的分割區,因為該裝置無法從 Windows 卸載。只有核心中原生支援的檔案系統才能透過
wsl --mount掛接。 這表示無法藉由呼叫wsl --mount來使用已安裝的檔案系統驅動程式 (例如 ntfs-3g)。核心不直接支援的檔案系統可以透過
--bare附加,然後叫用相關的 FUSE 驅動程式來掛接。