داکر روی ویندوز: خوردن C: درایو؟ چگونه من بیش از 350 گیگابایت را از پرونده های نفخ VHDX پس گرفتم!

رمز و راز فضای دیسک خوردن
اگر شما یک کاربر Docker در ویندوز هستید و از WSL 2 استفاده می کنید ، ممکن است خود را در همان کفش هایی با من پیدا کرده باشید ، جایی که ناگهان تمام فضای آزاد روی ویندوزهای من (C: درایو) از هیچ جا از بین رفت. شما فکر می کنید ، شاید برخی از حافظه پنهان ، شاید به روزرسانی های ویندوز (جای تعجب در آنجا) ، یا ممکن است من بدافزار یا چیز دیگری داشته باشم؟
در حالی که پاسخ ممکن است برای همه موارد فوق صادق باشد ، این بار برای همه آنها در بالا نادرست بود. با استفاده از یک ابزار آنالایزر دیسک ، فهمیدم که دو پرونده ، ext4.vhdx
وت docker_data.vhdx
، بیش از 500 گیگابایت مصرف می کنند و هر دو متعلق به مقصر هستند که داکر است.
چرا پرونده های VHDX Docker بسیار بزرگ می شوند
Docker Desktop در ویندوز ، هنگام استفاده از زیر سیستم ویندوز برای Linux 2 (WSL 2) Backend ، محیط Linux ، تصاویر Docker ، ظروف و حجم خود را در پرونده های دیسک سخت مجازی (VHDX) ذخیره می کند. این پرونده های VHDX به طور معمول “به صورت پویا در حال گسترش هستند”. این بدان معنی است که آنها در سیستم فایل ویندوز شما در اندازه رشد می کنند ، زیرا Docker به فضای بیشتری نیاز دارد.
اکنون ، هنگامی که تصاویر ، ظروف یا داده های Docker را در این پرونده های VHDX حذف می کنید ، خود VHDX اغلب (که مورد من بود) به طور خودکار کوچک نمی شود در میزبان ویندوز شما. فضا به عنوان مشخص شده است رایگان در دیسک مجازی (داخل خود لینوکس) ، اما پرونده موجود در C: درایو در بزرگترین اندازه اختصاص یافته خود باقی می ماند.
به عبارت دیگر ، مانند دیسک فیزیکی ، وقتی چیزی را حذف می کنید ، آن را از دیسک حذف نمی کند بلکه دسترسی شما به آن را حذف می کند و فضای را برای بازنویسی در دسترس قرار می دهد.
هرس داکر معمول (لازم ، اما همیشه کافی نیست)
اولین قدم استفاده از دستورات هرس داخلی Docker برای پاکسازی منابع بلااستفاده است:
docker system prune -a --volumes
# Or more specific commands:
docker image prune -a
docker container prune
docker volume prune
در مورد من ، اجرای این دستورات مقداری فضا را پس گرفت – حدود 14.7 گیگابایت. مفید ، بله ، اما هیچ چیز در مقایسه با 500 GB+ پرونده های VHDX اشغال نشده است. آنالایزر دیسک من هنوز نشان داد ext4.vhdx
با 377.7 گیگابایتی و دیگری docker_data.vhdx
و 145.2 گیگابایت
در واقع در Docker چه بود؟
برای اطمینان از داده های فعال مسئله اصلی ، من بررسی کردم:
-
تصاویر داکر (
docker images
): من تعدادی از تصاویر داشتم ، برخی از آنها بزرگ ، اما کل حدود 25 – 30 گیگابایت بود. -
لایه های قابل نوشتن کانتینر (
docker ps -as
): داده های واقعی اضافه شده توسط ظروف در حال اجرا برای بیشتر حداقل بود ، اگرچه یک ظرف دارای یک لایه قابل نوشتن 1.34 گیگابایتی بود. کل برای همه ظروف فقط چند GB بود. -
حجم داکر (
docker volume ls
): این یک مظنون کلیدی بود. با این حال ، پس از بازرسی از چند جلد ناشناس و نامگذاری شده من (مانند portainer_data) ، استفاده از دیسک واقعی ترکیبی آنها در WSL فقط در حدود 1.5 گیگابایت بود.
بنابراین ، داده های Docker فعال (تصاویر ، لایه های کانتینر ، حجم) تقریباً 30 تا 35 گیگابایت را به خود اختصاص داده است. واضح است که این توضیح در مورد اندازه های عظیم VHDX نیست. بقیه فضای “فانتوم” بود.
فشرده سازی پرونده های VHDX
راه حل واقعی در فشرده سازی دستی پرونده های VHDX نهفته است. این فرآیند دیسک مجازی را وادار می کند تا فضای داخلی آزاد شده را به سیستم عامل ویندوز شما بازگرداند.
نکته مهم: در حالی که این فرایند به طور کلی بی خطر است ، همیشه برای تهیه نسخه پشتیبان از داده های کاملاً مهم از داخل حجم Docker یا توزیع WSL قبل از انجام عملیات دیسک ، همیشه یک عمل خوب است.
- مسیرهای دقیق پرونده های VHDX خود را مشخص کنید. پیدا کردن کجا
ext4.vhdx
و/یاdocker_data.vhdx
هستند -
Docker و WSL را خاموش کنید:
- ترک دسک تاپ Docker: روی نماد Docker در سینی سیستم خود کلیک راست کرده و “Desktop Docit Docker” را انتخاب کنید.
-
تمام موارد WSL را خاموش کنید: PowerShell را به عنوان مدیر باز کنید و اجرا کنید:
wsl --shutdown
-
VHDX را با استفاده از آن جمع کنید
Optimize-VHD
Optimize-VHD -Path "PATH TO VHDX FILE" -Mode Full
تسکین شیرین فضای بازپس گیری شده
بعد از دویدن Optimize-VHD
در هر دو Docker اصلی VHDX و یکی از موارد مرتبط با نمونه Ubuntu WSL من ، نتایج حیرت انگیز بود!
در ext4.vhdx
(داده های اصلی Docker) از 377.7 گیگابایت به 117.2 گیگابایت کاهش یافته است.
در docker_data.vhdx
(به احتمال زیاد Ubuntu WSL من) از 145.2 گیگابایت به 52.0 گیگابایت کاهش یافته است.
این در مجموع است 353 گیگابایت بازپس گیری در C: درایو! پرونده های VHDX اکنون به طور دقیق فضایی را که در واقع توسط Docker و محیط های WSL من استفاده می شود ، به طور دقیق منعکس می کنند.