6.2. جمعآوری زباله (garbage collection)
عملیاتهای nix-env مانند ارتقاها (-u) و حذف نصب (-e) در واقع هرگز بستهها را از سیستم حذف نمیکنند. تمام کاری که انجام میدهند (همانطور که در بالا نشان داده شد) ایجاد یک پروفایل کاربری جدید است که دیگر حاوی پیوندهای نمادین (symlinks) به بستههای «حذفشده» نیست.
البته، از آنجایی که فضای دیسک نامحدود نیست، بستههای استفادهنشده باید در مقطعی حذف شوند. شما میتوانید این کار را با اجرای جمعکنندهی زباله (garbage collector) نیکس انجام دهید. این ابزار هر بستهای را که توسط هیچ نسلی از هیچ پروفایلی (به طور مستقیم یا غیرمستقیم) استفاده نمیشود، از انبار نیکس (Nix store) حذف خواهد کرد.
با این حال، توجه داشته باشید که تا زمانی که نسلهای قدیمی به یک بسته ارجاع دهند، آن بسته حذف نخواهد شد. به هر حال، در غیر این صورت ما قادر به انجام بازگردانی (rollback) نخواهیم بود. بنابراین برای اینکه جمعآوری زباله (garbage collection) مؤثر باشد، باید نسلهای قدیمی (یا برخی از آنها) را نیز حذف کنید. البته، این کار تنها زمانی باید انجام شود که مطمئن باشید نیازی به بازگردانی (rollback) نخواهید داشت.
برای حذف تمام نسلهای قدیمی (غیر فعلی) پروفایل فعلی خود:
$ nix-env --delete-generations old بهجای old همچنین میتوانید فهرستی از نسلها را مشخص کنید، برای مثال:
$ nix-env --delete-generations 10 11 14 برای حذف تمام نسلهای قدیمیتر از یک تعداد روز مشخص (بهجز نسل فعلی)، از پسوند d استفاده کنید. برای مثال،
$ nix-env --delete-generations 14d تمام نسلهای قدیمیتر از دو هفته را حذف میکند.
پس از حذف نسلهای قدیمی مناسب، میتوانید جمعکنندهی زباله (garbage collector) را به شکل زیر اجرا کنید:
$ nix-store --gc رفتار جمعکنندهی زباله (garbage collector) تحت تأثیر گزینههای keep-derivations (پیشفرض: true) و keep-outputs (پیشفرض: false) در فایل پیکربندی Nix است. مقادیر پیشفرض تضمین میکنند که تمام درایویشنهایی (derivations) که وابستگیهای زمان ساخت ریشههای جمعکنندهی زباله هستند، حفظ شوند و تمام مسیرهای خروجی که وابستگیهای زمان اجرا هستند نیز حفظ شوند. سایر درایویشنها یا مسیرها جمعآوری (حذف) خواهند شد. (این معمولاً همان چیزی است که میخواهید، امابههحال در حین توسعه، ممکن است منطقی باشد که خروجیها را حفظ کنید تا مطمئن شوید زمانهای ساخت مجدد سریع خواهند بود.) اگر احساس تردید میکنید، میتوانید ابتدا فایلهایی را که قرار است حذف شوند مشاهده کنید:
$ nix-store --gc --print-dead به همین ترتیب، گزینه --print-live مسیرهایی را نشان خواهد داد که حذف نخواهند شد.
همچنین یک ابزار کوچک و مفید به نام nix-collect-garbage وجود دارد که وقتی با سویچ -d (--delete-old) فراخوانی میشود، تمام نسلهای قدیمیِ تمام پروفایلها را در /nix/var/nix/profiles حذف میکند. بنابراین
$ nix-collect-garbage -d یک روش سریع و آسان برای پاکسازی سیستم شما است.
nix.dev/manual/nix/stable/package-management/garbage-collection.html