تعد حزم سناب Snap جزءًا لا يتجزأ من نظام أوبنتو المتكامل ولكنها ليست خيارًا مفضلًا لدى الجميع لأنها ذات حجم كبير وتحتل مساحة كبيرة على القرص مما يسبب مشكلات كثيرة خاصةً عند محدودية مساحة القرص في الجزء الرئيسي للجذر root partition.
يحتاج المستخدم إلى حل يخفض مساحة الكبيرة التي تحتلها حزم سناب بعض الأحيان وهو ما سيناقشه هذا المقال بالتفصيل ويعرض آلية تلقائية لحل هذه المشكلة.
إزالة إصدارات حزم سناب القديمة لتحرير مساحة على القرص
تُخزَّن ملفات النظام المتعلقة بسناب في مجلد var/lib/snapd/ والذي يمكن أن يبلغ حجمًا كبيرًا بناءً على عدد الحزم التي تم تثبيتها، ويساعد الأمر du
على التحقق من حجم المجلد كما يلي:
abhishek@its-foss:~$ sudo du -sh /var/lib/snapd 5.4G /var/lib/snapd
كما يمكن إجراء التحقق السابق من خلال أداة Disk Usage Analyzer لتحليل استخدام مساحة القرص والمزودة بواجهة رسومية GUI.
يُظهر خرج الأداة الحجم الكبير للمساحة المُستخدمة مما يتطلب تحرير بعض المساحة.
صُمّم سناب ليحتفظ بإصدار واحد قديم على الأقل من الحزم التي ثُبِّتت على النظام، ويمكن رؤية هذه العملية باستخدام أمر سناب الآتي:
snap list --all
تظهر الصورة التالية نتيجة تنفيذ الأمر السابق:
نلاحظ تكرار الحزمة مرتين ولكن مع وجود رقم إصدار مختلف لكل حزمة، تمتلك إحدى الحزمتين التسمية "معطل disabled" وهي ما يميز الحزمة الإضافية الواجب حذفها بهدف تحرير مساحة على القرص.
إذا لم يرغب المستخدم في اتباع الطريقة اليدوية، فتوجد طريقة أخرى آلية بفضل سكريبت فعال كتبه آلان بوب Alan Pope أثناء عمله في فريق Snapcraft، ولكن يجب الانتباه أن هذا السكريبت قد لا يعمل عندما تكون لغة الحاسوب فرنسية مثلًا وبعض اللغات الأخرى لأن التسمية "disabled" في عمود الملاحظات Notes من المحتمل أن تكون مختلفة في لغات أخرى عن التسمية في اللغة الانجليزية.
لإنشاء وتشغيل سكريبت في صدفة bash، يجب بدايةً إنشاء ملف جديد باسم clean-snap.sh ثم كتابة الأسطر الآتية فيه:
#!/bin/bash # Removes old revisions of snaps # CLOSE ALL SNAPS BEFORE RUNNING THIS set -eu snap list --all | awk '/disabled/{print $1, $3}' | while read snapname revision; do snap remove "$snapname" --revision="$revision" done
ثم حفظ ما سبق وإغلاق محرر النصوص.
لتشغيل السكريبت يجب بدايةً حفظه في مجلد المنزل home directory ثم تشغيل سطر الأوامر في أوبنتو وتنفيذ الأمر التالي:
sudo bash clean-snap.sh
توضح الصورة التالية مخرجات الأمر عارضةً عملية إزالة إصدارات حزم سناب القديمة:
نعيد التحقق من حجم المجلد على القرص باستخدام الأمر التالي:
abhishek@its-foss:~$ sudo du -sh /var/lib/snapd 3.9G /var/lib/snapd
نلاحظ انخفاض حجم المجلد، ويمكن استخدام هذه الطريقة متى ما احتاج المستخدم التحقق من حجم المجلد.
آلية عمل سكريبت حذف حزم سناب القديمة
تُمرر نتيجة تنفيذ الأمر "snap list –all" إلى الأمر awk، حيث تعتبر Awk أداة فعالة للتعامل مع النصوص استعملها السكريبت، ثم يبحث الجزء awk '/disabled/{print $1, $3}' عن الكلمة 'disabled' (التي من الممكن أن تختلف بحسب لغة النظام كما أشرنا سابقًا) في كل صف وعندما يعثر عليها يقوم باستخراج العمودين الأول والثالث والذي يُمرر بدوره إلى مجموعة من أوامر القراءة والحلقات التكرارية، فيعطي أمر القراءة Read command قيمة العمود الأول لاسم الحزمة snapname وقيمة العمود الثالث لمتغير المراجعة revision variable.
يبدأ الآن تشغيل أمر إزالة سناب باستخدام المتغيرين السابقين، وتستمر حلقة while التكرارية بالعمل طالما أنها تجد حزمة معطلة أي تحتوي على الكلمة 'disabled' في تفاصيلها.
آلية عمل السكريبت سهلة بالنسبة للمستخدمين الذين يعلمون كيفية كتابة السكريبت في الصدفة shell scripting، بينما ستبدو الآلية معقدة لمن لا تتوفر لهم هذه المعرفة أما إن كنت جديدًا على بيئة الصدفة وكتابة السكربتات، فننصحك بقراءة سلسلة مدخل إلى كتابة سكربتات الصدفة.
استعادة الغيغابايتات GBs الخاصة بالمستخدم
ينصح البعض بتحديد قيمة الاحتفاظ retention value الخاصة بحزمة سناب بالقيمة 2، ويتم ذلك باستخدام الأمر الآتي:
sudo snap set system refresh.retain=2
ولكن يقوم سناب بذلك تلقائيًا الآن لذا لا توجد حاجة لها، إذ يخزن سناب نسختين من كل حزمة وفي حال نفاذ المساحة يمكن إعادة ما سبق والتخلص من إصدار الحزمة الإضافية لتحرير المساحة.
ترجمة -وبتصرف- للمقال How to Clean Up Snap Package Versions in Linux [Quick Tip] لصاحبه Abhishek Prakash.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.