在 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 命令直接掛接。 首先,您需要識別磁碟。

  1. 識別磁碟 - 若要列出 Windows 中的可用磁碟,請執行:

    GET-CimInstance -query "SELECT * from Win32_DiskDrive"
    

    磁碟路徑可在 'DeviceID' 資料行下取得。 通常在 \\.\PHYSICALDRIVE* 格式下方。

  2. 掛接磁碟 - 使用 PowerShell,您可以使用上述探索到的磁碟路徑來掛接磁碟,請執行:

    wsl --mount <DiskPath>
    

    在 WSL 中掛接磁碟驅動器

掛接已分割磁碟

如果您有磁碟,但不確定其格式為何,或其具有哪些分割區,您可以遵循下列步驟來掛接磁碟。

  1. 識別磁碟 - 若要列出 Windows 中的可用磁碟,請執行:

    GET-CimInstance -query "SELECT * from Win32_DiskDrive"
    

    磁碟路徑會列在 'DeviceID' 之後,通常是 \\.\PHYSICALDRIVE* 格式。

  2. 列出並選取要掛接在 WSL 2 中的磁碟分割 - 識別磁碟之後,請執行:

    wsl --mount <DiskPath> --bare
    

    這會讓磁碟可在 WSL 2 中使用。 (在我們的範例中,<DiskPath>\\.\PHYSICALDRIVE*

  3. 附加之後,您可以在 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 VHD

命令列參考

掛接特定的檔案系統

根據預設,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 驅動程式來掛接。