كيف يحميك Snapper من الكوارث؟ دليل المبتدئين لنظام ملفات Btrfs
مصطلحات مهمة سنستخدمها كثيرًا
نسخة محفوظة Snapshot:
صورة لحالة نظام الملفات في لحظة معيّنة، يمكن الرجوع إليها لاحقًا وكأنك تعود بالزمن قليلًا.حجم فرعي Subvolume:
جزء مستقل داخل نظام ملفات Btrfs، يشبه “قسمًا داخليًا” يمكنك التعامل معه بشكل منفصل رغم أنه على نفس القرص.النسخ التلقائية المجدولة Timeline snapshots:
نسخ تُنشأ آليًا كل ساعة، أو كل يوم، أو أسبوع، أو شهر.قسم النظام الرئيسي
/:
المكان الذي تُخزن فيه ملفات النظام الأساسية، وغالبًا يُشار إليه بالرمز/.
من الآن فصاعدًا سنستعمل غالبًا كلمة “نسخة” بدل “لقطة” للبساطة، مع الإشارة للمصطلح الإنجليزي عند الحاجة.
ما هو Btrfs؟
هو نظام ملفات حديث في لينكس، صُمّم ليكون مرنًا وقويًا في إدارة البيانات. اول من تبنته في انظمتها اوراكل لينكس و سوزا سنة 2012.
من أشهر ميزاته:
إنشاء نسخ Snapshots بسرعة كبيرة.
دعم الأحجام الفرعية Subvolumes للفصل بين نظام التشغيل وملفاتك الشخصية وسجلات النظام.
بعض آليات فحص سلامة البيانات لتقليل احتمال تلف الملفات بصمت.
الفكرة الأساسية أنّ Btrfs لا ينسخ كل شيء في كل مرة، بل يخزّن فقط التغييرات منذ آخر نسخة، وهذا ما يجعل النسخ سريعة ولا تستهلك مساحة هائلة.
ما هو Snapper؟
هو أداة في openSUSE مخصّصة لإدارة نسخ Btrfs. يمكن التعامل معه كـ"دفتر تاريخ" للنظام:
يسجّل حالات مختلفة للنظام يمكن الرجوع إليها.
يسهّل التراجع عن تحديثات أو تغييرات سببت مشاكل.
يسمح لك باستعراض التغييرات بين نسختين ومعرفة ما الذي تغير.
يمكن استخدام Snapper بطريقتين:
عبر تطبيق رسومي داخل ياست اسمه YaST Filesystem Snapper.
عبر أوامر في سطر الأوامر (وهذا ما نركّز عليه في الأمثلة).
أنواع النسخ في Snapper
النسخ في Snapper تنقسم بحسب كيفية ووقت إنشائها:
| النوع | متى تُنشأ؟ | هل تُحذف تلقائيًا؟ | متى تُستخدم؟ |
|---|---|---|---|
| نسخ قبل/بعد Pre/Post | قبل وبعد تحديثات النظام أو تثبيت/إزالة الحزم | نعم | للتراجع عن تحديث أو تغيير في الحزم بسهولة |
| نسخ تلقائية مجدولة Timeline | تُنشأ تلقائيًا كل ساعة أو يوم أو أسبوع أو شهر | نعم | لتوفير نقاط رجوع مستمرة بدون تدخّل منك |
| نسخ يدوية Single | عندما تنشئها أنت بقرارك | لا، تُحذف يدويًا فقط | قبل تغييرات كبيرة أو تجارب قد تكون خطِرة |
سنسمّيها من الآن “نسخ” اختصارًا، مع العلم أنّ المقصود هو Snapshots. ويتم تصنيفها مهمة important عندما يكون هناك تغيير في أحد المكونات الاساسية مثل النواة.
هل تحتاج أصلًا لتغيير أي إعداد في Snapper؟
قبل البدء بتعديل الإعدادات، من المهم أن تسأل نفسك:
متى يُفضَّل ترك الإعدادات الافتراضية كما هي؟
توقّف قليلًا ولا تغيّر شيئًا، واحتفظ بالإعدادات الافتراضية، إذا كانت هذه النقاط تنطبق عليك:
قسم النظام الرئيسي
/حجمه 40 جيجابايت أو أكثر (ويُفضَّل 60 جيجابايت أو أكثر).استخدامك الأساسي هو التصفّح، وتحرير المستندات، وتثبيت التحديثات الرسمية فقط.
نادرًا أو لا يحدث أبدًا أن ترى رسالة “امتلاء القرص” على نظامك.
لا تشغّل برامج خطرة أو سكربتات مخصّصة قد تعبث بالنظام.
لم تتعرض سابقًا لفقدان بيانات مهمّة بسبب حذف ملفات بالخطأ.
إذا كانت كل هذه الإجابات “نعم”، فالأفضل غالبًا ألا تلمس إعدادات Snapper إطلاقًا.
اترك openSUSE يتولى حذف/تدوير النسخ القديمة تلقائيًا، وستكون في وضع آمن ومريح.
التأكد من جاهزية النظام لاستخدام Snapper
قبل اعتماد Snapper، تأكد أن:
قسم النظام الرئيسي
/يستخدم Btrfs.لديك مساحة كافية للنسخ.
أوامر أساسية
افتح سطر الأوامر ثم نفّذ:
/ df -Th
هذا يعرض نوع نظام الملفات. إذا وجدت btrfs في عمود النوع، فالقسم جاهز للنسخ عبر Snapper.
/ df -hلمعرفة المساحة المستخدمة والحرة في القسم
/. سيساعدك ذلك في تقدير المساحة المتاحة للنسخ.
sudo snapper list | head -5
- لعرض أول عدة نسخ موجودة إن كانت الإعدادات مفعّلة مسبقًا.
للتحقق من وضع /home:
sudo btrfs subvolume list / | grep home
أو:
findmnt /home
إذا لم يكن /home على Btrfs، فلن يمكن إنشاء نسخ مستقلة له، لكن سيظل Snapper مفيدًا لقسم النظام الرئيسي.
معرفة و تعديل الإعدادات
لعرض الاعدادات الحالية نفذ الأمر
sudo snapper -c root get-config
للتعديل على الإعدادات نفذ الامر
sudo nano /etc/snapper/configs/root
حدود النسخ التلقائية المجدولة
ضمن إعدادات Snapper ستجد قيَمًا مثل:
TIMELINE_LIMIT_HOURLY=10
أي الاحتفاظ بآخر عشر نسخ تم إنشاؤها تلقائيًا كل ساعة تقريبًا.
TIMELINE_LIMIT_DAILY=7
أي الاحتفاظ بسبع نسخ يومية إجمالًا (تقريبًا أسبوع من التاريخ).
هذه الإعدادات تمنع تضخم عدد النسخ، وتُبقي لديك نقاط رجوع قريبة زمنيًا عند الحاجة.
إدارة Snapper من ياست ومن سطر الأوامر
عبر ياست
افتح مركز إعدادات ياست.
من قائمة التخزين أو نظام الملفات، افتح تطبيق YaST Filesystem Snapper.
من هناك يمكنك استعراض النسخ، مقارنة التغييرات، وحذف النسخ غير الضرورية عبر واجهة رسومية.
عبر سطر الأوامر
الأوامر الأساسية:
sudo snapper list
- عرض قائمة النسخ مع أرقامها ووصف مختصر .استبدل description بوصف خاص بك.
sudo snapper create -d description
- إنشاء نسخة يدوية قبل تغيير مهم.
sudo snapper delete NO
- حذف نسخة محددة وتفريغ المساحة التي تشغلها (استبدل NO برقم النسخة الذي يظهر لك في أمر القائمة، مثلاً: 5) .
مثال توضيحي: صندوق الألعاب 500GB والكاميرا
لنفترض أنّ القرص 500 جيجابايت يشبه صندوق ألعاب ضخم، وأن لديك كاميرا سحرية (هي Snapper) تلتقط صورًا لبعض الأجزاء في الصندوق.
الأحجام الفرعية كفواصل داخل الصندوق
| اسم الحجم الفرعي | ماذا يخزّن؟ | لماذا قد تُستثنى بعض الأجزاء من النسخ؟ |
|---|---|---|
/ قسم النظام الرئيسي | ملفات نظام التشغيل | يجب تصويره لأنه ما نرجع إليه عند خراب النظام أو كسر التحديث. |
@/home | ملفاتك الشخصية: ألعاب، صور، مستندات | عادة يُترك خارج الاسترجاع الكامل حتى لا تفقد أحدث ملفّاتك الشخصية. |
@/var/log | سجلات النظام | سجلات الأعطال يجب أن تبقى حديثة، حتى تعرف لاحقًا سبب المشكلة. |
@/var/tmp | ملفات مؤقتة وذاكرات مخبأة | تتغير باستمرار ولا فائدة حقيقية من إرجاعها للوراء. |
قواعد الأمان: SPACE_LIMIT وFREE_LIMIT
تخيّل أن 500 جيجابايت مقسّمة إلى 100 “كتلة” تخزين، كل واحدة 5 جيجابايت.
SPACE_LIMIT=0.5
هذا يعني 50٪ من حجم القرص.
“إجمالي مساحة النسخ لا يُسمح له أن يتجاوز نصف الصندوق (حوالي 250 جيجابايت)”.
إذا اقترب إجمالي حجم النسخ من هذا الحد، يبدأ Snapper بحذف أقدم النسخ أولًا.
FREE_LIMIT=0.2
هذا يعني 20٪ من حجم القرص.
“يجب دائمًا إبقاء حوالي 20٪ من الصندوق فارغًا (حوالي 100 جيجابايت) ليعمل النظام براحة”.
عندما تقل المساحة الحرة عن هذا الحد، يحذف Snapper نسخًا قديمة بشكل أكثر شدّة حتى يستعيد هذه المساحة.
باختصار:
SPACE_LIMIT
- ينظّم كم يمكن أن تشغل النسخ مجتمعة.
FREE_LIMIT
- يضمن وجود مساحة كافية ليواصل النظام عمله دون مشاكل.
تنبيه: تقليل هذه القيم كثيرًا قد يؤدي إلى حذف نسخ مهمة بسرعة أكبر مما تتوقع، لذلك عدّلها بحذر.
أنماط إعداد جاهزة مع شرح الأوامر
أ. نمط توفير المساحة (للأقراص الصغيرة)
الأوامر:
sudo snapper -c root set-config TIMELINE_CREATE=noإيقاف إنشاء النسخ التلقائية المجدولة، والاعتماد فقط على نسخ قبل/بعد التحديثات والنسخ اليدوية التي تنشئها أنت.
sudo snapper -c root set-config NUMBER_LIMIT="2-5"إبلاغ Snapper أن يحتفظ بحد أدنى نسختين وحد أقصى خمس نسخ إجمالًا (غير المصنّفة كـ"مهمة").
sudo snapper -c root set-config NUMBER_LIMIT_IMPORTANT="2-5"نفس الفكرة لكن للنسخ المعلّمة كمهمة، بحيث لا تتجاوز أيضًا نطاق 2–5.
sudo snapper -c root set-config SPACE_LIMIT="0.3"السماح للنسخ باستخدام حتى 30٪ فقط من مساحة قسم النظام الرئيسي.
sudo snapper -c root set-config FREE_LIMIT="0.3"محاولة الحفاظ على 30٪ من مساحة القسم كمساحة حرة، بحذف نسخ قديمة عند الحاجة.
sudo snapper cleanup numberأمر تنظيف فوري، يجعل Snapper يطبّق القواعد الجديدة على عدد النسخ، فيحذف النسخ الزائدة عن الحدود التي حددتها.
هذا النمط مناسب جدًّا للأقراص الصغيرة التي تمتلئ بسرعة.
ب. نمط المستخدم المتقدم (تحديثات كثيرة مثل Tumbleweed)
الأوامر:
TIMELINE_CREATE=yesتفعيل إنشاء النسخ التلقائية المجدولة.
NUMBER_LIMIT="8-30"الاحتفاظ بعدد أكبر من النسخ (بين 8 و30 نسخة) للرجوع إليها.
NUMBER_LIMIT_IMPORTANT="8-50"السماح بعدد أكبر من النسخ “المهمة” حتى 50 نسخة، إذا كنت تضع وسم “مهم” لبعض النسخ.
TIMELINE_LIMIT_HOURLY=10الاحتفاظ بآخر 10 نسخ ساعية.
TIMELINE_LIMIT_DAILY=7الاحتفاظ بسبع نسخ يومية.
TIMELINE_LIMIT_WEEKLY=2نسختان أسبوعيتان محفوظتان.
TIMELINE_LIMIT_MONTHLY=1نسخة شهرية واحدة محفوظة كسجل بعيد المدى.
sudo systemctl enable --now snapper-timeline.timerتفعيل المؤقّت الذي ينشئ النسخ المجدولة وتشغيله فورًا.
sudo systemctl enable --now snapper-cleanup.timerتفعيل المؤقّت الذي ينظّف النسخ القديمة آليًا بحسب الحدود التي حددتها وتشغيله فورًا.
هذا النمط مناسب لمن يستخدم openSUSE Tumbleweed أو يقوم بتحديثات كثيرة، ويريد تاريخًا غنيًا للرجوع إليه.
ج. حماية مجلد home/ (عندما يكون على Btrfs)
للتحقق من وجود إعداد مسبق:
sudo snapper list-configs | grep home
إذا لم تجد إعدادًا، وكان home/ حجمًا فرعيًا على Btrfs، يمكنك إنشاء إعداد له:
sudo snapper -c home create-config /home sudo snapper -c home set-config TIMELINE_CREATE=yes sudo snapper -c home set-config NUMBER_LIMIT="5-20" sudo snapper -c home set-config SPACE_LIMIT="0.3" sudo snapper -c home set-config FREE_LIMIT="0.2"
بهذا تُنشأ نسخ لمجلد home/ نفسه، مما يضيف طبقة حماية إضافية لملفاتك الشخصية.
النسخ اليدوية: متى وكيف؟
النسخ اليدوية لا تُحذف تلقائيًا، لذا هي ممتازة قبل:
ترقية كبيرة للنظام.
تثبيت حزم من مصادر غير معتادة.
تغيير إعدادات أساسية في النظام.
لإنشاء نسخة يدوية:
sudo snapper create --description "description"
ثم لاحقًا، عندما تتأكد أنك لا تحتاجها:
sudo snapper delete <NO>
من الجيد أن تجعل مراجعة النسخ اليدوية عادة دورية، حتى لا تمتلئ المساحة دون انتباهك.
كيف تعود فعليًا إلى نسخة سابقة؟ (الاسترجاع rollback)
عندما تريد الرجوع إلى نسخة سابقة لأن النظام أصبح غير مستقر بعد تحديث أو تغيير، يمكن استخدام rollback. وذلك ممكن بالطريقة الاشهر وهو اعادة التشغيل و اختيار Start bootloader from a read-only snapshot ثم اختيار التسخة المرغوبة و بعد الدخول تنفيذ أمر الاسترجاع ثم اعادة التشغيل. وهنا بعض التفاصيل العامة.
الخطوات العامة:
اختر النسخة المناسبة من خلال:
- تطبيق YaST Filesystem Snapper، أو الأمر:
sudo snapper listنفّذ أمر الاسترجاع (عادة يختار أحدث نسخة تلقائيًا، أو النسخة التي تحددها في بعض الواجهات):
sudo snapper rollbackبعد تنفيذ rollback يجب إعادة تشغيل الجهاز مرة واحدة.
بعد هذه الإعادة، سيقلع النظام مباشرة في الحالة الجديدة الناتجة عن الاسترجاع (النسخة التي تم اختيارها). لا تحتاج إلى أكثر من إعادة تشغيل واحدة، وبعدها تكون تعمل فعليًا داخل “النسخة المسترجعة” وكأنك عدت بالزمن إلى تلك اللحظة.
مراقبة استهلاك المساحة
لمعرفة كيف يوزّع Btrfs المساحة بين البيانات والنسخ:
sudo btrfs filesystem df /
ولمعرفة المساحة الحرة والباقية في قسم النظام الرئيسي:
df -h /
إذا لاحظت أن المساحة الحرة قليلة، أو أن عدد النسخ كبير، يمكن تعديل:
NUMBER_LIMIT
- لتقليل عدد النسخ المسموح به.
SPACE_LIMIT
لتقليل نسبة مساحة القسم المسموح للنسخ باستخدامها.
ثم تنفيذ
sudo snapper cleanup numberلتنظيف النسخ الزائدة فورًا.
أخطاء شائعة وكيف تتجنبها
| الخطأ | لماذا هو مشكلة؟ | ما الأفضل فعله؟ |
|---|---|---|
| إعداد Snapper لمجلد home/ وهو ليس على Btrfs | النسخ لن تعمل كما تتوقع، وقد تظن أن الأداة معطّلة | تأكد أولًا باستخدام findmnt /home من نوع نظام الملفات. |
| تفعيل جميع أنواع النسخ التلقائية مرة واحدة | استهلاك زائد للمساحة ولموارد المعالجة | اختر نوعين أو ثلاثة فقط، مثل الساعية واليومية. |
| استخدام SPACE_LIMIT مرتفع على قرص صغير | قد يمتلئ القرص فجأة ويؤثر على استقرار النظام | استخدم قيمة مثل 0.3 أو أقل للأقراص الصغيرة. |
| نسيان النسخ اليدوية لسنوات | تراكم النسخ واستهلاك مساحة كبيرة دون انتباه | راجع sudo snapper list بانتظام واحذف القديم. |
| تعديل الإعدادات بدون معرفة القيم الحالية | قد تصل إلى حالة مربكة يصعب فهمها أو إصلاحها | دائمًا نفّذ sudo snapper -c root get-config قبل أي تعديل كبير. |
ملخص الإعدادات الأساسية
| الإعداد | الوصف | القيم الافتراضية الشائعة في openSUSE تقريبًا |
|---|---|---|
| TIMELINE_CREATE | تفعيل النسخ التلقائية المجدولة | no لقسم النظام الرئيسي |
| NUMBER_LIMIT | أقل وأعلى عدد للنسخ المحفوظة | 2-10 |
| NUMBER_LIMIT_IMPORTANT | حدود النسخ المصنفة كمهمة | 4-10 |
| SPACE_LIMIT | أقصى نسبة من مساحة القسم للنسخ | 0.5 (50٪) |
| FREE_LIMIT | أدنى نسبة من المساحة الحرة قبل الحذف | 0.2 (20٪) |
| TIMELINE_LIMIT_HOURLY | عدد النسخ الساعية المحفوظة | 10 للمستخدم المتقدم |
| TIMELINE_LIMIT_DAILY | عدد النسخ اليومية المحفوظة | 7 تقريبًا (أسبوع واحد) |