在 WSL 2 中掛接 Linux 磁碟
如果您想要存取 Windows 不支援的 Linux 磁碟格式,則可以使用 WSL 2 掛接磁碟並存取其內容。 本教學課程將涵蓋識別要附加至 WSL2 的磁碟和分割區、如何掛接磁碟,以及如何存取磁碟的步驟。
如果您要連接外部磁碟機,但使用這些掛接指示並未成功時,您可以嘗試連線 USB 裝置的指示。 此 wsl --mount
命令目前不支援 USB/快閃磁碟機/SD 記憶卡讀卡機 (深入了解此問題)。
注意
需要系統管理員存取權,才能將磁碟附加至 WSL 2。
WSL 2 mount
命令不支援掛接目前使用中的磁碟 (或屬於磁碟的磁碟分割)。 即使只要求一個分割區,wsl --mount
一律會附加整個磁碟。 您無法掛接 Windows 安裝磁碟。
必要條件
您將需要 Windows 11 組建 22000 或更新版本,或執行 WSL 的 Microsoft Store 版本。 若要檢查 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 --mount <DiskPath>
掛接已分割磁碟
如果您有磁碟,但不確定其格式為何,或其具有哪些分割區,您可以遵循下列步驟來掛接磁碟。
識別磁碟 - 若要列出 Windows 中的可用磁碟,請執行:
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
磁碟路徑會列在 'DeviceID' 之後,通常是
\\.\PHYSICALDRIVE*
格式。列出並選取要掛接在 WSL 2 中的磁碟分割 - 識別磁碟之後,請執行:
wsl --mount <DiskPath> --bare
這會讓磁碟可在 WSL 2 中使用。 (在我們的範例中,
<DiskPath>
是\\.\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 --mount <DiskPath> --partition <PartitionNumber> --type <Filesystem>
注意
如果您想要將整個磁碟掛接為單一磁碟區 (也就是如果磁碟未分割),則可以省略 --partition
。
如果省略,則預設檔案系統類型為「ext4」。
存取磁碟內容
掛接之後,即可在組態值所指向的路徑下存取磁碟:automount.root
。 預設值是 /mnt/wsl
。
從 Windows 中,您可以瀏覽至 \\wsl$\<Distro>\<Mountpoint>
以從 [檔案總管] 來存取磁碟 (挑選任何 Linux 發行版本)。
卸載磁碟
如果您想要從 WSL 2 卸載和中斷連結磁碟,請執行:
wsl --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 會儲存在此路徑中:C:\Users\[user]\AppData\Local\Packages\[distro]\LocalState\[distroPackageName]
,請謹慎存取這些系統檔案,這是一個強大的使用者工作流程。 請務必先執行 wsl --shutdown
,再與此磁碟互動,以確保磁碟未在使用中。
命令列參考
掛接特定的檔案系統
根據預設,WSL 2 會嘗試將裝置掛接為 ext4。 若要指定另一個檔案系統,請執行:
wsl --mount <DiskPath> -t <FileSystem>
例如,若要將磁碟掛接為 FAT,請執行:
wsl --mount <Diskpath> -t vfat
注意
若要列出 WSL2 中可用的檔案系統,請執行:cat /proc/filesystems
透過 WSL2 (Linux 檔案系統) 掛接磁碟時,就無法再透過 Windows 檔案系統上的 ext4 驅動程式掛接。
掛接特定分割區
根據預設,WSL 2 會嘗試掛接整個磁碟。 若要掛接特定分割區,請執行:
wsl --mount <Diskpath> -p <PartitionIndex>
只有在磁碟是 MBR (主開機記錄) 或 GPT (GUID 磁碟分割表格) 時才適用。 閱讀磁碟分割樣式 - MBR 和 GPT。
指定掛接選項
若要指定掛接選項,請執行:
wsl --mount <DiskPath> -o <MountOptions>
範例:
wsl --mount <DiskPath> -o "data=ordered"
注意
目前僅支援檔案系統特定選項。 不支援泛型選項,例如 ro, rw, noatime, ...
。
附加磁碟而不掛接磁碟
如果上述任何選項都不支援磁碟配置,您可以執行下列命令,將磁碟附加至 WSL 2,而不需掛接磁碟:
wsl --mount <DiskPath> --bare
這會讓區塊裝置可在 WSL 2 內使用,以便從該處手動掛接。 使用 lsblk
以列出 WSL 2 內的可用區塊裝置。
指定掛接名稱
注意
此選項僅適用於 Microsoft Store 中的 WSL
根據預設,系統會根據實體磁碟或 VHD 名稱來產生掛接點名稱。 這可以使用 來覆 --name
寫。 範例:
wsl --mount <DiskPath> --name myDisk
中斷連結磁碟
若要從 WSL 2 中斷連結磁碟,請執行:
wsl --unmount [DiskPath]
如果省略了 Diskpath
,所有附加的磁碟都會卸載並中斷連結。
注意
如果一個磁碟無法卸載,WSL 2 可以藉由執行 wsl --shutdown
來強制結束,這會將磁碟中斷連結。
限制
此時,只有整個磁碟可以附加至 WSL 2,這表示無法只附加分割區。 具體來說,這表示無法使用
wsl --mount
來讀取開機裝置上的分割區,因為該裝置無法從 Windows 中斷連結。只有核心中原生支援的檔案系統才能透過
wsl --mount
掛接。 這表示無法藉由呼叫wsl --mount
來使用已安裝的檔案系統驅動程式 (例如 ntfs-3g)。核心不直接支援的檔案系統可以透過
--bare
附加,然後叫用相關的 FUSE 驅動程式來掛接。