Windows Subsystem for Linux (WSL) تشغيل بيئة Linux مباشرةً على نظام Windows. يُعد هذا مفيدًا بشكل خاص لتطوير الويب، حيث يمكنك تطوير واختبار التطبيقات في بيئة Linux دون مغادرة Windows. بل ويمكنك تشغيل freeCodeCamp محليًا باستخدامه!
لكن إدارة مساحة القرص قد تكون تحديًا كبيرًا، حيث يستخدم WSL أقراصًا صلبة افتراضية لا تُحرر المساحة غير المستخدمة تلقائيًا. سيُرشدك هذا الدليل خلال عملية ضغط الأقراص الصلبة الافتراضية لـ WSL يدويًا. وسنقوم بأتمتة هذه المهمة باستخدام سكربت PowerShell، لضمان بقاء بيئة WSL الخاصة بك فعالة وخالية من الفوضى.
استعادة مساحتك
يستخدم WSL منصة محاكاة افتراضية لتثبيت توزيعات Linux على نظام Windows الخاص بك. تحصل كل توزيعة تُضيفها على قرص صلب افتراضي خاص بها (VHD)، والذي يستخدم نظام الملفات ext4 (الشائع في Linux). يتم حفظه على محرك أقراص Windows الخاص بك كملف ext4.vhdx.
القضايا الرئيسية هنا:
Inefficient storage(تخزين غير فعال): بشكل افتراضي، لا تستعيد ملفاتVHDالمساحة غير المستخدمة. هذا يعني أنه عند حذف ملف فيWSL، لا يتم تحرير مساحة القرص المرتبطة به على الفور.Disk space consumption(استهلاك مساحة القرص): بسبب هذا التخزين غير الفعال، يمكن أن تنمو ملفاتVHDبشكل كبير بفضل البيانات المتراكمة، خاصة إذا كنت مستخدمًا مكثفًا لـWSL.Need for maintenance(الحاجة إلى الصيانة): قد لا تعلم أنك بحاجة إلى ضغط ملفاتVHDالخاصة بك لاستعادة مساحة القرص. إذا لاحظت أن مساحة القرص الحرة لديك تتقلص حتى بعد حذف الملفات والتطبيقات، فقد يكونWSLهو السبب.
سيساعدك هذا الدليل في الحفاظ على بيئة WSL و Windows الخاصة بك تعمل بسلاسة.
جدول المحتويات
- الجزء الأول: كيفية ضغط القرص الصلب الافتراضي يدويًا
- المتطلبات الأساسية
- الخطوة 1: التحقق من إصدار وحالة
WSLالخاص بك - الخطوة 2: سرد جميع التوزيعات المثبتة بتفصيل
- الخطوة 3: تحديد مسار القرص الصلب الافتراضي لـ
Linux(VHDX) - الخطوة 4: إيقاف تشغيل جميع مثيلات
WSL - الخطوة 5: ضغط القرص الصلب الافتراضي لـ
LinuxباستخدامDiskPart - الخطوة 6: إعادة تشغيل
WSLوالتحقق - الجزء الثاني: كيفية تبسيط حياتك باستخدام الأتمتة
- المتطلبات الأساسية
- الخطوة 1: اكتشاف توزيعات
WSL2المثبتة - الخطوة 2: اختيار توزيعة للضغط
- الخطوة 3: تحديد موقع ملف
ext4.vhdx - الخطوة 4: موجه التأكيد
- الخطوة 5: إيقاف تشغيل
WSLوالضغط - الخطوة 6: تشغيل سكربت
DiskPart
الجزء الأول: كيفية ضغط القرص الصلب الافتراضي يدويًا
لنبدأ باستعراض العملية يدويًا. سيُرشدك هذا القسم خلال التحقق من إصدار WSL الخاص بك وتوزيعات Linux المرتبطة به، والعثور على ملفات VHD، وإيقاف تشغيل WSL، وضغط القرص الافتراضي.
المتطلبات الأساسية
- نظام
Windows 10(إصدار20H1/2004+) أوWindows 11مع تثبيتWSL2. - تشغيل
PowerShellأوCommand PromptكـAdministrator(من قائمةWindows، انقر بزر الماوس الأيمن على الأيقونة واخترrun as Administrator).
الخطوة 1: التحقق من إصدار وحالة WSL الخاص بك
أولاً، تأكد من أنك تعمل على الإصدار الثاني من WSL (المشار إليه عادةً باسم WSL2). الإصدار الأول قديم، و WSL2 يوفر تحسينات كبيرة.
افتح PowerShell (بصلاحيات Admin) أو Command Prompt (بصلاحيات Admin) وقم بتشغيل:
wsl -v
wsl --status
تعرض هذه الأوامر إصدار عميل WSL وما إذا كانت التوزيعة الافتراضية الخاصة بك تستخدم WSL 2.
إليك ناتج الأمر wsl -v:
وإليك ناتج الأمر wsl --status.
الخطوة 2: سرد جميع التوزيعات المثبتة بتفصيل
لرؤية قائمة مفصلة بتوزيعات WSL الخاصة بك (بما في ذلك الإصدار الذي يستخدمه كل منها)، قم بتشغيل:
wsl.exe --list --verbose

أعلاه يمكنك رؤية ناتج الأمر wsl --list --verbose. ابحث عن اسم توزيعتك (على سبيل المثال، “Ubuntu“) ودوّن إصدار WSL الخاص بها. إذا أظهر “Version 2“، يمكنك المتابعة بعملية الضغط.
الخطوة 3: تحديد مسار القرص الصلب الافتراضي لـ Linux (VHDX)
توجد ملفات كل توزيعة WSL في ملف VHDX على محرك أقراص Windows الخاص بك. للعثور على المسار لأي توزيعة Linux، استخدم مقتطف PowerShell هذا:
(Get-ChildItem `
-Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss `
| Where-Object { $_.GetValue("DistributionName") -eq 'YOUR_DISTRO_NAME' } `
).GetValue("BasePath") + "\ext4.vhdx"
حيث تستبدل YOUR_DISTRO_NAME باسم توزيعتك (مثل Ubuntu، Debian، Kali-linux..).
إليك ناتج الأمر الموضح أعلاه في PowerShell (تم إخفاء مسار الملف):
يقرأ هذا الأمر مفتاح السجل الخاص بتوزيعة Linux الخاصة بك، ثم يضيف “\ext4.vhdx” لبناء مسار الملف الكامل. تأكد من نسخ السطر بأكمله. سنحتاجه في المراحل اللاحقة.
الخطوة 4: إيقاف تشغيل جميع مثيلات WSL
قبل أن تتمكن من ضغط أي محرك أقراص افتراضي، تأكد من إيقاف تشغيل WSL بالكامل. في PowerShell أو Command Prompt (لا يزال كـ Administrator)، قم بتشغيل:
wsl.exe --shutdown
الخطوة 5: ضغط القرص الصلب الافتراضي لـ Linux باستخدام DiskPart
لقد جمعت بنجاح جميع المعلومات المطلوبة (حول نظامك، والتوزيعات المتاحة، ومسار ملف VHDX الخاص بها) للمتابعة بالمهمة الرئيسية. في هذه الخطوة، ستبدأ فعليًا بعملية الضغط.
شغل DiskPart في نفس سطر الأوامر المرتفع الصلاحيات (admin):
diskpart
سيفتح DiskPart في نافذة جديدة. إنها أداة سطر أوامر Windows لإدارة أقسام القرص. كن حذرًا عند استخدامها، حيث يمكن أن تتسبب الإجراءات غير الصحيحة في فقدان خطير للبيانات.
في موجه DiskPart، حدد ملف VHDX الذي عثرت عليه سابقًا. استبدل المسار المعروض أدناه بمسارك الفعلي (السطر الذي نسخته من قبل):
select vdisk file="C:\Users\username\AppData\path\to\ext4.vhdx"

أعلاه هو ناتج الأمر select vdisk (تم إخفاء بعض البيانات).
إرفاق القرص الافتراضي في وضع القراءة فقط: تحتاج عملية الضغط فقط إلى مسح الكتل الفارغة في الملف، وليس الكتابة إلى نظام ملفات Linux بالداخل. يضمن وضع القراءة فقط أن DiskPart يفحص الكتل فقط لعملية zero-trimming دون أي فرصة لإتلاف أو تغيير نظام ملفات Linux الخاص بك.
attach vdisk readonly

يمكنك أن ترى في لقطة الشاشة أعلاه أن القرص الصلب الافتراضي قد تم إرفاقه بنجاح.
ضغط القرص: هذا يحرر مساحة القرص عن طريق تقليص الحجم الفعلي لملف .vhdx ليتناسب مع البيانات المستخدمة الفعلية بالداخل.
compact vdisk
قد تستغرق هذه العملية بعض الوقت. عندما ترى رسالة “DiskPart successfully compacted the virtual disk file“، تابع إلى الخطوة التالية.
في الصورة أدناه، تم ضغط القرص الصلب الافتراضي بنجاح.
فصل القرص الافتراضي:
detach vdisk

ها قد تم – تم فصل القرص الصلب الافتراضي بنجاح. يحرر هذا الأمر أي أقفال على القرص الافتراضي ويفصله فعليًا. إذا لم تستخدم هذا الأمر، فسيظل الملف “قيد الاستخدام”، مما يمنع WSL (أو أنت) من الوصول إليه حتى تقوم بإعادة التشغيل أو إغلاقه يدويًا.
الخروج من DiskPart:
exit
الخطوة 6: إعادة تشغيل WSL والتحقق
بالعودة إلى PowerShell أو Command Prompt، يمكنك إعادة تشغيل توزيعتك:
wsl -d YOUR_DISTRO_NAME
يمكنك حتى تجربة الأمر Unix df -h في موجه WSL الخاص بك للتحقق من مساحات القرص الجديدة المتاحة.
تهانينا، لقد أنجزت للتو مهمة صيانة يمكنها تحرير الكثير من الجيجابايت من مساحة التخزين بمرور الوقت. الآن، حان وقت الأتمتة.
الجزء الثاني: كيفية تبسيط حياتك باستخدام الأتمتة
نظرًا لأنه غالبًا ما يكون من الصعب تذكر مكان توزيعة WSL الخاصة بك بالضبط، ومن المحتمل أنك لن تستخدمها كثيرًا، فإن سكربت PowerShell هذا سيقوم بأتمتة العملية بأكملها التي تناولناها في الجزء الأول.
إليك معاينة للخطوات التي ستتبعها:
- اكتشاف توزيعات
WSLالمثبتة. - اختيار واحدة (ومعالجة الحالات التي يوجد فيها أكثر من واحدة).
- تحديد موقع ملف
ext4.vhdxالمقابل. - إيقاف تشغيل
WSLواستخدامDiskPartلضغط القرص الافتراضي.
المتطلبات الأساسية
- نظام
Windows 10(إصدار20H1/2004+) أوWindows 11مع تمكينWSL 2. PowerShellأوCommand Prompt(بصلاحياتAdministrator).- ستحتاج أيضًا إلى محرر أكواد. مفكرة
Windowsكافية لإكمال هذه المهمة. يمكنك أيضًا استخدام بيئة تطوير متكاملة (IDE) مثلVS Codeأو بيئة برمجة نصية متكاملة (ISE) مثلPowerShell ISE(المضمنة معWindows).
لاختبار السكربت، قم بتنزيله من GitHub. افتح PowerShell أو Command Prompt بصلاحيات مرتفعة وانتقل إلى مجلد السكربت. باستخدام الأمر أدناه فقط، ستتمكن من تشغيله وتحرير بعض مساحة القرص:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\wsl_compactor.ps1
الخطوة 1: اكتشاف توزيعات WSL2 المثبتة
أحد التحديات الرئيسية هو العثور على توزيعات Linux المتاحة على النظام المضيف. دعنا نتحقق من الكتلة الأولى ونرى ما تدور حوله:
$lxssKey = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss'
$distros = Get-ChildItem $lxssKey | ForEach-Object {
$p = Get-ItemProperty $_.PSPath
[PSCustomObject]@{ Name = $p.DistributionName; BasePath = $p.BasePath }
}
يسجل WSL كل توزيعة تحت مفتاح سجل Windows هذا: HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss
يحتوي كل مفتاح فرعي على قيمتين مهمتين:
DistributionName(على سبيل المثال،Ubuntu)BasePath(هذا هو المكان الذي يتم فيه تخزين ملفات التوزيعة. إنه الدليل الذي يحتوي على ملفext4.vhdx.)
يستخدم السكربت Get-ChildItem و Get-ItemProperty لتعداد هذه المفاتيح الفرعية وبناء قائمة بتوزيعات Linux المتاحة.
if ($distros.Count -eq 0) {
Throw-And-Exit "No WSL distros found in the registry."
}
إذا لم يتم العثور على توزيعات، يتوقف السكربت ويطبع رسالة الخطأ هذه في الطرفية: "No WSL distros found in the registry.”
الخطوة 2: اختيار توزيعة للضغط
هنا، العملية تتكون من خطوتين:
إذا تم العثور على توزيعات متعددة، فإنه يعرض جميع التوزيعات بقائمة مرقمة ويطالبك باختيار واحدة:
if ($distros.Count -gt 1) {
Write-Host "Multiple distros detected. Please choose one:`n"
for ($i = 0; $i -lt $distros.Count; $i++) {
Write-Host "[$(($i+1))] $($distros[$i].Name)"
}
$choice = Read-Host "Enter the number of the distro to compact"
$selected = $distros[[int]$choice - 1]
}
ستبدو القائمة المحسوبة هكذا:
Multiple distros detected. Please choose one:
[1] Ubuntu 20.04
[2] Debian
[3] Alpine
إذا تم العثور على توزيعة واحدة فقط على النظام المضيف، يختارها السكربت تلقائيًا:
else {
$selected = $distros[0]
}
عند إعداد توزيعة، سواء تم اختيارها يدويًا من قبل المستخدم أو تلقائيًا، فإن المعلومات المهمة هي المسار إلى القرص الصلب الافتراضي لكل توزيعة. يتم حفظ هذا المسار في متغيرين رئيسيين: 'distro' (الذي يحدد التوزيعة المحددة) و 'basePath' (الذي يوضح مكان القرص الافتراضي الخاص بها).
$distro = $selected.Name
$basePath = $selected.BasePath
Write-Host "`nSelected distro: $distro" -ForegroundColor DarkYellow
Write-Host "BasePath: $basePath"
تعرض الأسطر أعلاه ناتجًا يبدو كالتالي:
Selected distro: Ubuntu (or any other distro)
BasePath: C:\Users\<User_name>\AppData\Local\Packages\…
كما هو الحال في جميع الخطوات الأخرى، من المهم مراعاة حالة حدوث خطأ، عن طريق إطلاق خطأ والخروج من البرنامج:
if (-not (Test-Path $basePath)) {
Throw-And-Exit "BasePath '$basePath' does not exist on disk."
}
الخطوة 3: تحديد موقع ملف ext4.vhdx
في الخطوة الأولى، جمعنا المعلومات التي نحتاجها حول التوزيعات المتاحة ومكان تخزينها على نظام Windows. باختيار إدخال (يدويًا أو تلقائيًا)، يمكننا العثور على الملف الصحيح.
في بعض الأحيان، يوجد ملف ext4 بين المسار الأساسي ومجلد LocalState. يتعامل هذا السكربت مع كلتا الحالتين. يبني المواقع المعتادة التي يمكن العثور على الملف فيها. تبدو كالتالي: $BasePath\ext4.vhdx، $BasePath\LocalState\ext4.vhdx
يمكن أن يترجم هذا إلى شيء كهذا على نظامك (الخيار 1):
C:\Users\Alice\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\ext4.vhdx
أو هكذا (الخيار 2):
C:\Users\Alice\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
(قد تكتشف أن توزيعة WSL2 الخاصة بك تقع في دليل آخر غير “Packages” – لكن لا تقلق، سيطابق BasePath الخاص بك المجلدات الصحيحة).
الفكرة هي بناء خياري المسار المحتملين:
$possible = @(
Join-Path $basePath 'ext4.vhdx'
Join-Path $basePath 'LocalState\ext4.vhdx'
)
واختيار الأول الذي يحتوي على الملف فعليًا:
$vhdx = $possible | Where-Object { Test-Path $_ } | Select-Object -First 1
مرة أخرى، نطلق رسالة خطأ إذا لم يتم العثور على ملف مناسب:
if (-not $vhdx) {
Throw-And-Exit "No ext4.vhdx found under '$basePath'."
}
الخطوة 4: موجه التأكيد
تتطلب أدوات إدارة الأقراص الحذر وتحتاج إلى فهم العواقب المحتملة لأفعالك. يُعد موجه التأكيد دائمًا حماية جيدة لمنع فقدان البيانات العرضي أو تغييرات النظام غير المرغوب فيها.
قبل المتابعة، يعرض لك السكربت:
- اسم التوزيعة (
Distro name) - مسارها الأساسي (
BasePath) - مسار ملف
VHDX
Write-Host "`nAbout to compact this WSL distro:" -ForegroundColor Magenta
Write-Host " Distro : $distro"
Write-Host " BasePath : $basePath"
Write-Host " VHDX file: $vhdx`n"
ثم يطالبك بـ “Are you sure you want to proceed? (Y/N)“:
Write-Host "Are you sure you want to proceed? (Y/N) " -ForegroundColor DarkCyan -NoNewline
# Then read the response
$answer = Read-Host
يُطلب منك بعد ذلك كتابة Y (غير حساسة لحالة الأحرف) للمتابعة أو أي شيء آخر للإلغاء.
if ($answer.ToUpper() -ne 'Y') {
Write-Warning "Operation canceled"
exit
}
بالنسبة للخطوتين أعلاه، اضطررت لاستخدام خدعة لطباعة السؤال بلون، ولكن خيارًا بسيطًا (بدون ألوان) يمكن أن يكون:
if ((Read-Host 'Are you sure you want to proceed? (Y/N)').ToUpper() -ne 'Y') {
Write-Warning 'Operation canceled'
exit
}
الخطوة 5: إيقاف تشغيل WSL والضغط
قبل المتابعة إلى أداة DiskPart، من المهم إيقاف جميع مثيلات WSL قيد التشغيل. مرر أمر الإغلاق مباشرة في PowerShell.
Write-Host "Shutting down WSL…" -ForegroundColor Cyan
wsl.exe –shutdown
خطأ شائع هو نسيان تشغيل PowerShell أو Command Prompt بصلاحيات Administrator. يمكنك منع هذه الحالة برسالة:
if ($LASTEXITCODE -ne 0) {
Throw-And-Exit "Failed to shut down WSL (exit code $LASTEXITCODE). Are you running as Administrator?"
}
الخطوة 6: تشغيل سكربت DiskPart
بناء السكربت: العملية هي نفسها كما في الجزء اليدوي، ولكن هذه المرة، “نحقن” أوامر DiskPart الجاهزة في السكربت.
$dpScript = @"
select vdisk file="$vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
"@
قبل الإطلاق، هناك خطوتان تحتاج إلى اتخاذهما:
يكتب سكربت PowerShell الأسطر أعلاه إلى ملف مؤقت:
$tempFile = [IO.Path]::GetTempFileName()
Set-Content -LiteralPath $tempFile -Value $dpScript -Encoding ASCII
هذا يعادل الأوامر التي تم تمريرها في الجزء اليدوي: select vdisk file="C:\…\ext4.vhdx" # المسار الكامل لملف القرص الافتراضي attach vdisk readonly compact vdisk detach vdisk exit
قد يستغرق الضغط بعض الوقت، خاصة إذا لم تقم بتنظيف محرك الأقراص الافتراضي من قبل. من الحكمة إظهار تحذير قبل المتابعة:
Write-Host "Running DiskPart to compact the VHDX. Be patient, this might take a while..." -ForegroundColor Cyan
استدعاء DiskPart:
# Run DiskPart with the script saved to the temporary file and process each output line as it arrives
diskpart /s $tempFile | ForEach-Object {
# Grab any "NN percent" type message from the line
if ($_ -match '(\d+)\s+percent') {
# Only print when the percentage actually changes
Write-Host "$($Matches[1])% completed"
} else {
# Just echo all over line-types, verbatim
Write-Host $_
}
}
عدة نقاط يجب ملاحظتها هنا:
- يقوم بتشغيل
diskpart /s $tempFile: يقرأDiskPartوينفذ الأوامر من الملف المؤقت في حلقةPowerShellللمعالجة الفورية. - لتجربة مستخدم أفضل: يقوم المقتطف أدناه بحيلة تصفية قيم الحالة المتكررة عن طريق مقارنة
$pctبقيمة$lastPctالحارسة، وكتابة أسطر جديدة فقط عندما تختلف. كيف؟ قبل الدخول إلى الحلقة، نقوم بالتهيئة:$lastPctبالقيمة-1
$lastPct = -1 # We initiate a sentinel value
لدينا قيمة “أولى” مضمونة لن تساويها أي نسبة مئوية حقيقية (0-100). بهذه الطريقة، بمجرد رؤية أول 0 بالمائة، 10 بالمائة، أو أي شيء آخر، فإنها تختلف عن -1. ثم:
if ($_ -match '(\d+)\s+percent') {
# Print only when the percentage changes
Write-Host "$($Matches[1])% completed"
}
هذا يضمن أنه عند أول تحديث للنسبة المئوية (على سبيل المثال “0 بالمائة” أو “10 بالمائة”)، ستكون $pct –ne $lastPct صحيحة، وبالتالي يتم إصدار السطر الأول. بعد ذلك، يحتفظ $lastPct بآخر نسبة مئوية حقيقية، ولا يتم الطباعة مرة أخرى إلا عندما تأتي نسبة مئوية تقدم جديدة ومختلفة.
يبدو الناتج أكثر نظافة:
10% completed
20% completed
…
وإلا، فسوف يغرق الشاشة بعشرات التحديثات المتطابقة “20 بالمائة مكتمل” (على سبيل المثال).
بالطبع نتعامل مع حالة القيم الأخرى (الأسطر غير المئوية) بشكل طبيعي:
else {
# non-percent lines: print verbatim
if ($_ -match '\S') {
Write-Host $_
}
}
بمجرد الانتهاء من العملية، لا تنس تنظيف الملف المؤقت.
Remove-Item $tempFile -ErrorAction SilentlyContinue
بنهاية العملية، يجب أن ترى شيئًا كهذا
Leaving DiskPart...
حسنًا، هذا كل ما في البرمجة النصية! إذا جمعت جميع المقتطفات حتى الآن، فما عليك سوى حفظها بامتداد ملف .ps1، أو تنزيل المثال الكامل من مستودع GitHub هذا.
الاستخدام
لديك الآن فهم كامل لما يحدث. هل أنت مستعد للبدء؟
في Windows، افتح Command Prompt أو PowerShell كمسؤول. انتقل إلى الدليل الذي يحتوي على سكربت .ps1 الخاص بك. نفذ السكربت بالأمر التالي، مستبدلاً <File_name_here> باسم ملفك الفعلي:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\<File_name_here>.ps1
تطلق المعاملات -NoProfile -ExecutionPolicy Bypass برنامج PowerShell في بيئة نظيفة وغير مقيدة تتجاهل إعدادات المستخدم وتسمح بتنفيذ السكربت دون قيود أمنية. لا تقلق، في هذه الحالة، لا بأس بذلك.
انتظر… انتظر… انتظر…
أحسنت! لقد استعدت للتو كل تلك المساحة غير المستخدمة داخل WSL2 الخاص بك (تقريبًا) دون عناء!
الآن، يمكنك المضي قدمًا بتعديل هذا السكربت ليعمل تلقائيًا بالكامل، دون موجه التأكيد (الخطوة 4). يمكنك أيضًا جدولته كمهمة صيانة منتظمة باستخدام مجدول المهام (task scheduler):
schtasks /create /tn "Schedule_name" /tr "powershell.exe -ExecutionPolicy Bypass -File C:\path\to\script.ps1" /sc monthly /d 15 /st 09:00
هذا مثال للتنفيذ الشهري حيث تعني /d 15 اليوم الخامس عشر من كل شهر و /st 09:00 هو وقت بدء مضبوط على الساعة 9 صباحًا.
هذا كل شيء! تذكر أن الصيانة الدورية، سواء قمت بها يدويًا أو تلقائيًا، ضرورية لمنع الاستخدام غير الضروري لمساحة القرص وضمان تجربة سلسة مع WSL.
💡 الخلاصة التقنية
تُعد إدارة مساحة القرص في WSL أمرًا حيويًا للحفاظ على أداء نظام Windows و Linux. نظرًا لأن الأقراص الصلبة الافتراضية لـ WSL (ملفات ext4.vhdx) لا تُحرر المساحة غير المستخدمة تلقائيًا، فإن الضغط الدوري ضروري. يوضح هذا المقال طريقتين لتحقيق ذلك: الأولى يدوية باستخدام DiskPart، وتتضمن خطوات مثل إيقاف WSL وتحديد مسار ملف VHDX ثم ضغطه. أما الطريقة الثانية، فتعتمد على الأتمتة عبر سكربت PowerShell، والذي يقوم بتحديد التوزيعات، واختيار الملف الصحيح، وإيقاف WSL، وتشغيل DiskPart بشكل آلي. يمكن جدولة هذا السكربت ليعمل بانتظام، مما يوفر حلاً فعالاً ومستدامًا لمشكلة استهلاك مساحة القرص في WSL ويضمن بيئة عمل نظيفة وفعالة.