訓練
模組
Maintain disks and volumes - Training
This module explores file system fragmentation and the tools that you can use to reduce fragmentation. Students will learn how Windows can compress files to take up less space on the hard disk.
本指南涵蓋如何管理使用 WSL 2 所安裝 Linux 發行版本使用的磁碟空間,包括:
Windows 子系統 Linux 版 (WSL 2) 會使用虛擬化平台來安裝 Linux 發行版本與主機 Windows 作業系統,建立虛擬硬碟 (VHD) 來儲存您所安裝每個 Linux 發行版本的檔案。 這些 VHD 會使用 ext4 檔案系統類型,並在您的 Windows 硬碟上表示為 ext4.vhdx 檔案。
WSL 2 會自動調整這些 VHD 檔案的大小,以符合儲存體需求。 根據預設,WSL 2 所使用的每個 VHD 檔案一開始都會配置最大磁碟空間量 1TB (在 WSL 0.58.0 版之前,此預設值會設定為 512GB 最大值和之前的 256GB 最大值)。
如果 Linux 檔案所需的儲存空間超過此大小上限,您將會看到錯誤,指出您已用盡磁碟空間。 若要修正此錯誤,請遵循下列關於如何擴充 WSL 2 虛擬硬碟大小的指引。
使用 Linux 命令,檢查 VHD 中針對隨 WSL 2 所安裝 Linux Df
發行版本的可用磁碟空間量。
若要檢查可用的磁碟空間,請開啟 PowerShell 命令列並輸入此命令 (將 <distribution-name>
取代為實際的發行版本名稱):
wsl.exe --system -d <distribution-name> df -h /mnt/wslg/distro
如果此命令無法運作,請使用 wsl --update
命令升級至 WSL 的 Store 版本,或嘗試 wsl df -h /
。
輸出將會包含:
如果您看到快要接近配置給 VHD 的可用磁碟空間量,或因為沒有剩餘磁碟空間而收到錯誤,請參閱下一節,以了解如何擴充配置給與 Linux 發行版本相關聯之 VHD 的磁碟空間上限。 WSL 配置給 VHD 的磁碟空間數量一律會顯示預設上限 (在最新版本的 WSL 中為 1TB),即使實際 Windows 裝置上的磁碟空間量小於該數值。 WSL 掛接的 VHD 會隨您使用而擴充大小,因此您的 Linux 發行版本會發現其可以成長到 1TB 的配置大小上限。
若要擴充 Linux 發行版本的 VHD 大小,以超過預設的 1TB 上限的配置磁碟空間,請遵循下列步驟。 (對於尚未更新的舊版 WSL,此預設值上限可能會設定為 512GB 或 256GB)。
使用此命令終止所有 WSL 執行個體:wsl.exe --shutdown
將目錄路徑複製到與電腦上所安裝 Linux 發行版本相關聯的 ext4.vhdx 檔案。 如需說明,請參閱如何找出 Linux 發行版本的 vhdx 檔案和磁碟路徑。
以系統管理員權限開啟 Windows 命令提示字元,然後輸入下列命令來開啟 diskpart 命令解譯:
diskpart
您現在會有 DISKPART>
提示。 輸入下列命令,將 <pathToVHD>
取代為與 Linux 發行版本相關聯的 ext4.vhdx
檔案目錄路徑 (在步驟 2 中複製)。
Select vdisk file="<pathToVHD>"
顯示與此虛擬磁碟相關聯的詳細資料,包括虛擬大小,代表已配置 VHD 的目前大小上限:
detail vdisk
您必須將虛擬大小轉換為 MB。 例如,如果 虛擬大小:512 GB,這等於 512000 MB。 您輸入的新值必須大於這個原始值。 若要將虛擬大小加倍為512 GB到1024 GB,您會以MB為單位輸入值: 1024000。 請小心不要輸入高於您實際想要的值,因為減少虛擬磁碟大小的程序要複雜得多。
使用 Windows 命令提示字元 DISKPART>
提示字元,輸入您要配置給此 Linux 發行版本之新大小上限的值:
expand vdisk maximum=<sizeInMegaBytes>
結束 DISKPART>
提示字元:
exit
啟動此 Linux 發行版本。 (確定其在 WSL 2 中執行。您可以使用命令來確認這一點:wsl.exe -l -v
。不支援 WSL 1)。
讓 WSL 知道其可以從 WSL 發行版本命令列執行這些命令,以擴充此發行版本的檔案系統大小。 您可能會看到下列訊息,以回應第一個 mount 命令:"/dev: none already mounted on /dev"。您可以放心地忽略此訊息。
sudo mount -t devtmpfs none /dev
mount | grep ext4
複製此項目的名稱,如下所示:/dev/sdX
(X 代表任何其他字元)。 在下列範例中,X 的值是 b:
sudo resize2fs /dev/sdb <sizeInMegabytes>M
使用上述範例,我們已將 VHD 大小變更為 2048000,因此命令會是:sudo resize2fs /dev/sdb 2048000M
。
注意
您可能需要安裝 resize2fs。 若是如此,您可以使用此命令進行安裝:sudo apt install resize2fs
。
這些輸出看起來類似於下列文字:
resize2fs 1.44.1 (24-Mar-2021)
Filesystem at /dev/sdb is mounted on /; on-line resizing required
old_desc_blocks = 32, new_desc_blocks = 38
The filesystem on /dev/sdb is now 78643200 (4k) blocks long.
此 Linux 發行版本的虛擬磁碟機 (ext4.vhdx) 現在已成功擴充為新的大小。
重要
我們建議不要使用 Windows 工具或編輯器修改、移動或存取位於 AppData
資料夾內的 WSL 相關檔案。 這麼做可能會導致您的 Linux 發行版本損毀。 如果您想要從 Windows 存取 Linux 檔案,可以透過 \\wsl$\<distribution-name>\
路徑進行。 開啟您的 WSL 發行版本,然後輸入 explorer.exe .
以檢視該資料夾。 若要深入了解,請參閱部落格文章:從 Windows 存取 Linux 檔案。
如果您遇到「掛接發行版本磁碟」相關的錯誤,這可能是因為突然關機或停電,且可能導致 Linux 發行版本 VHD 切換為唯讀以避免資料遺失。 您可以遵循下列步驟,使用 e2fsck
Linux 命令修復和還原發行版本。
當 WSL 2 安裝 Linux 發行版本時,其會將發行版本掛接為虛擬硬碟 (VHD),且具有自己的檔案系統。 Linux 會將這些硬碟稱為「區塊裝置」,您可以使用 lsblk
命令來檢視其相關資訊。
若要尋找 WSL 2 目前正在使用的區塊裝置名稱,請開啟您的發行版本,然後輸入命令:lsblk
。 (或者,開啟 PowerShell 並輸入命令:wsl.exe lsblk
。)輸出看起來會像這樣:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 363.1M 1 disk
sdb 8:16 0 8G 0 disk [SWAP]
sdc 8:32 0 1.5T 0 disk
sdd 8:48 0 1T 0 disk /mnt/wslg/distro
區塊裝置的相關資訊包括:
sda
一律是系統發行版本。如果 WSL 在開啟 Linux 發行版本時遇到「掛接錯誤」,則發行版本可能會設定為唯讀作為後援。 如果發生這種情況,發行版本可能會在啟動期間顯示下列錯誤:
An error occurred mounting the distribution disk, it was mounted read-only as a fallback.
當發行版本以唯讀方式啟動時,任何寫入檔案系統的嘗試都會失敗,並出現如下的錯誤:
$ touch file
touch: cannot touch 'file': Read-only file system
若要修復 WSL 中的磁碟掛接錯誤,並再次將其還原回可用/可寫入的狀態,您可以使用 wsl.exe --mount
命令以下列步驟重新掛接磁碟:
開啟 PowerShell 並輸入 命令,以關閉所有 WSL 發行版本:
wsl.exe --shutdown
以系統管理員身分開啟 PowerShell (在提升權限的命令提示字元中),然後輸入掛接命令,並以發行版本 .vhdx 檔案的路徑取代 <path-to-ext4.vhdx>
。 如需尋找此檔案的說明,請參閱如何找出 Linux 發行版本的 VHD 檔案和磁碟路徑。
wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
使用 PowerShell 的 wsl.exe lsblk
命令來識別發行版本的區塊裝置名稱 (sd[a-z]),然後輸入下列命令來修復磁碟 (以正確的區塊裝置名稱取代 <device>
,例如「sdc」)。 e2fsck
命令會檢查 ext4 檔案系統 (隨 WSL 安裝發行版本使用的類型) 是否有錯誤,並據以修復錯誤。
wsl.exe sudo e2fsck -f /dev/<device>
修復完成後,輸入下列命令以在 PowerShell 中卸載磁碟:
wsl.exe --unmount
警告
您可以使用 命令:sudo mount -o remount,rw /
使唯讀發行版本返回至可使用/可寫入的狀態,但所有變更都會在記憶體中,因此會在重新啟動發行版本時遺失。 建議您改用上方列出的步驟來掛接和修復磁碟。
若要尋找 Linux 發行版本的 .vhdx 檔案和目錄路徑,請開啟 PowerShell 並使用下列指令碼,並將 <distribution-name>
取代為實際的發行版本名稱:
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"
結果會顯示看起來類似於 %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
的路徑。 例如:
C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
這是與您所列出 Linux 發行版本相關聯的 ext4.vhdx
檔案路徑。
訓練
模組
Maintain disks and volumes - Training
This module explores file system fragmentation and the tools that you can use to reduce fragmentation. Students will learn how Windows can compress files to take up less space on the hard disk.