
Advanced Backups — Minecraft Java Edition 1.7.10 – 1.21.4
التبعيات: · المُحمِّل: Forge, NeoForge, Fabric, Quilt, Spigot, Paper · إصدار Minecraft: 1.7.10 - 1.21.4 · إصدار المود: 3.7.1 تعاني آلية…
التبعيات: · المُحمِّل: Forge, NeoForge, Fabric, Quilt, Spigot, Paper · إصدار Minecraft: 1.7.10 - 1.21.4 · إصدار المود: 3.7.1 تعاني آلية النسخ الاحتياطي القياسية في Minecraft Java Edition من قيود خطيرة. ففي اللعبة الأصلي
التبعيات:
· المُحمِّل: Forge, NeoForge, Fabric, Quilt, Spigot, Paper
· إصدار Minecraft: 1.7.10 - 1.21.4
· إصدار المود: 3.7.1
تعاني آلية النسخ الاحتياطي القياسية في Minecraft Java Edition من قيود خطيرة. ففي اللعبة الأصلية (vanilla) يجري إنشاء النسخ الاحتياطية يدويًا عبر قائمة، أو يتطلب إيقاف الخادم لنسخ الملفات. وتُنفَّذ هذه العمليات في الخيط الرئيسي للعبة، مما يؤدي إلى تجمّد سير اللعب، أو حدوث تأخّر (lag)، أو عدم توفّر الخادم مؤقتًا أثناء كتابة غيغابايتات من البيانات على القرص. إضافة إلى ذلك، لا ينشئ الأسلوب القياسي سوى نسخ كاملة من العالم، مما يملأ وحدة التخزين بسرعة ببيانات مكررة. ويحلّ مود Advanced Backups هذه المشكلات بتقديمه نسخًا احتياطية غير متزامنة ومجدولة مع دعم نماذج الضغط التفاضلي والتزايدي، وتنظيفًا مرنًا للأرشيفات القديمة، وأداة مدمجة لاستعادة البيانات.
آليات النسخ الاحتياطي: Zip وDifferential وIncremental
تتيح الأداة ثلاثة أوضاع لمعالجة ملفات العالم، تحدّد التوازن بين سرعة التنفيذ، وكمية مساحة القرص المستخدمة، وموثوقية الاستعادة:
· Zip (النسخ الكاملة): يقوم مبدأ العمل على أرشفة مجلد العالم بأكمله في ملف .zip واحد. هذا الأسلوب هو الأكثر استهلاكًا للموارد ويتطلب أكبر قدر من المساحة الحرة على وحدة التخزين، لأن كل نسخة احتياطية تحتوي على جميع الملفات بغضّ النظر عمّا إذا كانت قد تغيّرت أم لا. وميزته هي سهولة الاستعادة، إذ يكفي فكّ ضغط الملف المطلوب فحسب.
· Differential (النسخ التفاضلي): يعتمد على إنشاء أرشيف أساسي كامل واحد ("full") وأرشيفات جزئية لاحقة ("partial"). ولا تسجّل الأرشيفات الجزئية سوى الملفات التي طرأت عليها تغييرات منذ لحظة إنشاء الأرشيف الأساسي الكامل. ويقلّ حجم النسخ الاحتياطية الوسيطة بشكل كبير. ولاستعادة حالة العالم في لحظة زمنية معيّنة يلزم ملفان فقط: الأرشيف الأساسي الكامل وآخر أرشيف جزئي سابق لهذا التاريخ.
· Incremental (النسخ التزايدي): يستخدم هو الآخر مفهوم الأرشيفات الكاملة والجزئية. غير أن كل أرشيف جزئي لا يحتوي إلا على التغييرات التي طرأت منذ لحظة إنشاء آخر أرشيف جزئي سابق. وهذا يقلّل إلى الحدّ الأدنى من الحِمل على نظام القرص الفرعي ويوفّر أقصى قدر من المساحة الحرة. أما العيب فهو ارتفاع خطر فقدان البيانات: فإذا تَلِف ولو ملف واحد في سلسلة النسخ التزايدية، فسيكون من المستحيل استعادة النسخ اللاحقة حتى إنشاء نسخة احتياطية كاملة جديدة. كما أن عملية الاستعادة هي الأبطأ، لأنها تتطلب دمجًا متسلسلًا لسلسلة الملفات بأكملها.
يُنظَّم إنشاء السلاسل الجديدة بواسطة المعاملين config.advancedbackups.chains.length وconfig.advancedbackups.chains.maxpercent. يحدّد المعامل الأول الحدّ الأقصى لعدد النسخ الجزئية في السلسلة قبل الإنشاء القسري لأرشيف كامل جديد. ويُجري المعامل الثاني فحصًا للحجم: فإذا تجاوز حجم التغييرات المتراكمة في الأرشيف الجزئي النسبة المئوية المحدّدة من حجم الأرشيف الكامل، يعيد النظام تعيين السلسلة تلقائيًا وينشئ نسخة احتياطية كاملة جديدة.
نظام التنظيف التلقائي (Purging) والتعامل مع السلاسل
للحيلولة دون امتلاء القرص، جرى في المود تنفيذ ثلاثة معايير لحذف البيانات القديمة تلقائيًا:
· وفقًا لعدد أيام التخزين (config.advancedbackups.purge.days).
· وفقًا للحجم الإجمالي لمجلد النسخ الاحتياطية بالغيغابايت (config.advancedbackups.purge.size).
· وفقًا للعدد الإجمالي لملفات النسخ (config.advancedbackups.purge.count).
عند استخدام النسخ التفاضلية أو التزايدية يتعذّر حذف ملفات مفردة من السلسلة، لأن ذلك سيُخلّ بتكامل البيانات. ويتعامل المود مع سلاسل كاملة (chains). وتُعَدّ السلسلة قديمة وتُحذف فقط عندما تستوفي جميع مكوّناتها (بما في ذلك النسخة الاحتياطية الأساسية الكاملة وجميع الأرشيفات الجزئية المرتبطة بها) معايير التنظيف. وبواسطة المعامل config.advancedbackups.purge.incrementalchains يمكن تعيين الحدّ الأدنى لعدد السلاسل الكاملة التي يلتزم النظام بحفظها بصرف النظر عن قيود التنظيف الأخرى. كما يمكن للمستخدم إنشاء "لقطات" (snapshots)، وهي نسخ ساكنة من العالم محميّة من الحذف التلقائي.
إعداد ملف التهيئة AdvancedBackups.properties
تُخزَّن معاملات تشغيل نظام النسخ الاحتياطي في الملف AdvancedBackups.properties، الذي يُنشأ في الدليل config عند التشغيل الأول. مفاتيح التهيئة الرئيسية:
المعامل | القيمة الافتراضية | الوصف |
| true | يتيح التفعيل الكامل (true) أو التعطيل الكامل (false) للإنشاء التلقائي للنسخ الاحتياطية. |
| true | يحدّد ما إذا كان يلزم حفظ العالم قسريًا على القرص قبل تنفيذ عملية النسخ. |
| true | يعطّل الحفظ التلقائي القياسي أثناء إنشاء النسخة ويعيد تفعيله بعد انتهاء العملية. |
| 1048576 | حجم مخزّن الإدخال/الإخراج المؤقت بالبايت. قد تؤدي القيمة التي تتجاوز حدّ ذاكرة الوصول العشوائي إلى تعطّل OutOfMemoryError. |
| false | تفريغ قسري لذاكرة التخزين المؤقتة الخاصة بالكتابة على القرص. لا يُستخدم في إصدارات Minecraft الأقدم من 1.16. |
| true | التحقّق من نشاط اللاعبين. إذا لم يكن هناك لاعبون على الخادم منذ آخر نسخة احتياطية، يجري تخطّي إنشاء النسخة. |
| differential | نوع النسخ الاحتياطية. القيم الممكنة: zip (نسخ كاملة)، differential (النسخ التفاضلي)، incremental (النسخ التزايدي). |
| session.lock,*_old | قائمة استثناءات مفصولة بفواصل لملفات مجلد العالم التي لا تُضاف إلى الأرشيف (يُسمح بأقنعة من نوع *). |
| ./backups | المسار إلى دليل حفظ النسخ الاحتياطية الجاهزة (نسبي أو مطلق). |
| 0.25 | الحدّ الأدنى المسموح به للفاصل الزمني بين النسخ الاحتياطية بالساعات. يمنع التكرار. 0 — معطّل. |
| 24.0 | الحدّ الأقصى للفاصل الزمني بالساعات، الذي تُشغَّل بعده النسخة الاحتياطية قسريًا إذا لم تكن هناك نسخ ناجحة أخرى. |
| true | أساس المُجدوِل: حساب مدة تشغيل الخادم (true) أو الوقت الفلكي الحقيقي لنظام التشغيل (false). |
| 1:00 | قائمة فواصل إنشاء النسخ (مثلًا 1:00 لنسخة احتياطية كل ساعة، أو الوقت الحقيقي الدقيق 04:00,16:00). |
| false | الإنشاء القسري لنسخة احتياطية من العالم أثناء إيقاف الخادم أو إطفائه. يحترم الحدّ frequency.min. |
| false | إنشاء نسخة احتياطية من العالم أثناء تشغيل الخادم. يحترم الحدّ frequency.min. |
| 30 | تأخير تشغيل النسخة الاحتياطية البدئية بالثواني بعد تشغيل الخادم. القيمة الدنيا هي 5 ثوانٍ. |
| ops | فئة مستلمي إشعارات toast حول عملية الأرشفة داخل اللعبة (ops — المشغّلون، all — الجميع، none — لا أحد). |
| 500 | وتيرة إرسال حِزم التقدّم إلى اللاعبين بالمللي ثانية. القيم الأدنى تزيد من حِمل الشبكة. |
| true | إتاحة إخراج تقدّم الأرشفة المئوي التفصيلي إلى وحدة تحكّم النظام الخاصة بالخادم. |
| 5000 | الفاصل الزمني لتسجيل سير عملية النسخ الاحتياطي في وحدة التحكّم بالمللي ثانية. |
| 50.0 | حدّ الحجم الإجمالي لمجلد النسخ بالغيغابايت. تُحذف أقدم النسخ عند التجاوز. 0 — معطّل. |
| 0 | مدة تخزين النسخ الاحتياطية بالأيام. تُحذف الأقدم. 0 — معطّل. |
| 0 | الحدّ الأقصى المسموح به لعدد النسخ على القرص. تُحذف الأقدم. 0 — معطّل. |
| true | إتاحة حذف السلاسل التزايدية في حال التنظيف وفقًا للحجم. إذا كانت false، فلن تُنظَّف النسخ التزايدية أبدًا. |
| 1 | الحدّ الأدنى لعدد السلاسل التزايدية التي يلتزم التنظيف بإبقائها على القرص في كل الأحوال. |
| 4 | مستوى ضغط أرشيفات ZIP (من 1 إلى 9). القيم الأكبر توفّر المساحة لكنها تُحمّل وحدة المعالجة المركزية (CPU). |
| 50 | الحدّ الأقصى لعدد النسخ الاحتياطية الجزئية (التفاضلية/التزايدية) قبل إنشاء أرشيف كامل جديد. |
| true | إتاحة ضغط النسخ الأساسية الكاملة والنسخ الوسيطة اللاحقة داخل السلاسل. |
| true | إعادة تعيين ذكية للسلسلة. إذا جرى تغيير جميع ملفات العالم، تصبح النسخة كاملة تلقائيًا. |
| 50.0 | حدّ حجم النسخة الاحتياطية الجزئية كنسبة مئوية من الكاملة. إذا تجاوزها، يجري إنشاء نسخة احتياطية كاملة. |
أوامر إدارة النسخ الاحتياطي
تتم إدارة المود بواسطة أوامر وحدة التحكّم التي تتطلب مستوى وصول المشغّل (جرى تحديث خيارات الأوامر في الإصدار 3.7 لتحسين التوافق مع كتل الأوامر عن طريق خفض متطلّب مستوى الصلاحيات إلى القيمة 2):
· /backup start — يشغّل عملية النسخ الاحتياطي في الوضع غير المتزامن. يأخذ الأمر في الاعتبار جميع إعدادات الجدولة والفواصل الدنيا ونشاط اللاعبين.
· /backup force — يشغّل عملية النسخ قسريًا متجاهلًا فحوص نشاط اللاعبين وحدود الوقت التالية: frequency.min.
· /backup snapshot <name> — ينشئ نسخة احتياطية كاملة (لقطة) بالاسم المحدّد في المجلد الفرعي snapshots. لا تُؤخذ هذه الأرشيف في الاعتبار أثناء التنظيف التلقائي للنسخ الاحتياطية القديمة ولا يحذفها النظام تلقائيًا أبدًا.
· /backup reload-config — يعيد تحميل المعاملات من الملف AdvancedBackups.properties دون الحاجة إلى إعادة تشغيل الخادم أو عميل اللعبة. في إصدارات المود الأقدم من 2.2 يُستخدم لذلك الأمر البديل /advancedbackups reload.
· /backup check — يحلّل الحالة الراهنة للمُجدوِل ويعرض معلومات عن مقدار الوقت المتبقي حتى النسخة الاحتياطية المجدولة التالية وفقًا للجدول الزمني.
· /backup reset — يعيد تعيين عدّاد السلسلة الحالية من النسخ التزايدية أو التفاضلية. وستُنشأ النسخة الاحتياطية المجدولة التالية أو التي تُشغَّل يدويًا قسريًا كأرشيف كامل ("full").
يتيح خفض مستوى الصلاحية للأوامر إلى القيمة 2 أتمتة إنشاء النسخ بواسطة Command Blocks وإضافات المُجدوِلات الخارجية التي تستدعي أوامر وحدة التحكّم نيابةً عن الخادم.
أداة الاستعادة عبر وحدة التحكّم (Command Line Restoration)
بما أن النسخ الاحتياطية التفاضلية والتزايدية تتكوّن من عدد كبير من ملفات التغييرات المترابطة، فإن استعادتها يدويًا عملية معقّدة. ولحلّ هذه المهمة، جرى تضمين أداة وحدة تحكّم خاصة في ملف JAR الخاص بالمود.
عند إنشاء النسخ لأول مرة، يولّد المود تلقائيًا نصوصًا برمجية مساعِدة في الدليل الذي يحتوي على النسخ الاحتياطية:
· restore-bootstrap.bat لنظام التشغيل Windows.
· restore-bootstrap.sh لنظامَي التشغيل Linux وmacOS.
تشغّل هذه النصوص البرمجية معالج الاستعادة المضمَّن في ملف JAR. ولتشغيل واجهة الاستعادة يدويًا عبر الطرفية يُستخدم الأمر:
|
(يجب أن يطابق اسم ملف JAR تمامًا إصدار المود المثبَّت).
تعمل واجهة وحدة التحكّم الخاصة بالأداة في الوضع التفاعلي:
1. بدء فحص مجلد النسخ الاحتياطية لتحليل السلاسل واللقطات المتاحة.
2. عرض قائمة نقاط الاستعادة المتاحة مع بيان التاريخ والوقت ونوع النسخة (Full، Diff، Inc).
3. التحقّق من تكامل سلسلة الأرشيف المختار. وإذا كانت نسخة تزايدية، تتحقّق الأداة تلقائيًا من توفّر جميع الأجزاء الوسيطة من النسخة الاحتياطية الأساسية الكاملة حتى النقطة المختارة.
4. طلب المجلد الهدف لفكّ الضغط. وستنفّذ الأداة الدمج المتسلسل واستبدال الملفات، معيدةً بناء الحالة الدقيقة للعالم في لحظة إنشاء النسخة المختارة.
قبل البدء بالاستعادة، يلزم إيقاف خادم Minecraft إيقافًا كاملًا. ومحاولة استعادة الملفات على خادم قيد التشغيل ستؤدي إلى إتلاف قاعدة بيانات العالم وملفات المناطق (.mca).
خصائص العمل على مختلف المنصّات والتحسين
يتميّز المود باختلافات معمارية تبعًا لمنصّة التثبيت المختارة:
· إشعارات toast من جهة العميل: تُنفَّذ الإشعارات المنبثقة المرئية حول بدء إنشاء النسخة الاحتياطية وانتهائها عبر نظام toast الأصلي. ولعرضها على جهة العميل يجب أن يكون مودٌ متوافق (Forge أو NeoForge أو Fabric) مثبَّتًا. وعند استخدام المود على خوادم Spigot أو Paper، لن يرى العملاء الذين لا يملكون المود مثبَّتًا إشعارات مرئية، بل سيتلقّون رسائل نصية عادية فقط في الدردشة، إذا سمحت بذلك إعدادات التسجيل.
· الإصدار 1.7.10: نظرًا للقيود التقنية في الإصدارات القديمة من محرّك اللعبة، لا يدعم إصدار المود الخاص بـ Minecraft 1.7.10 نظام إشعارات toast الرسومية. وبدلًا من ذلك، يُعرض تقدّم النسخ مباشرةً فوق شاشة اللعبة على هيئة طبقة نصية بسيطة.
· التحكّم في تخصيص ذاكرة الوصول العشوائي: تتطلب عملية الضغط غير المتزامن تخصيص مخازن ذاكرة مؤقتة في JVM. فإذا جرى على خادم محدود ذاكرة الوصول العشوائي (مثلًا 2-4 غيغابايت) تعيين حجم كبير جدًا للمعامل config.advancedbackups.buffer (أكثر من 10-20 ميغابايت) ومستوى ضغط مرتفع config.advancedbackups.zips.compression (المستوى 8-9)، فقد يؤدي ذلك إلى تجاوز سعة الكومة (JVM Heap) وإنهاء عمل الخادم إنهاءً اضطراريًا مع الخطأ OutOfMemoryError. وللعمل المستقر على الخوادم ذات الموارد المحدودة يُنصح بالإبقاء على حجم المخزّن المؤقت القياسي البالغ 1 ميغابايت ومستوى ضغط لا يزيد عن 4.
الخلاصة
يُعَدّ Advanced Backups حلًّا أداتيًا متكاملًا لضمان حفظ عوالم اللعب في Minecraft Java Edition. وعلى خلاف البدائل البسيطة من نوع Simple Backups أو الأدوات الأصلية، يتيح هذا المود نشر استراتيجية نسخ احتياطي متكاملة بأدنى قدر من استهلاك مساحة القرص بفضل استخدام السلاسل التزايدية. والقيد الرئيسي للمود هو غياب مزوّدي خدمات سحابية مدمجين لرفع الأرشيفات تلقائيًا إلى وحدات تخزين خارجية (مثل Google Drive أو خوادم FTP مباشرةً من المود)، مما يتطلب إعداد نصوص برمجية خارجية لمزامنة المجلد ./backups. ويُوصى بتثبيت المود على الخوادم العامة والخاصة المتوسطة الحجم، حيث يكون من الأهمية البالغة ضمان الحماية من فقدان البيانات دون إيقاف سير اللعب.
التثبيت
التثبيت النموذجي يستغرق حوالي 5 دقائق. الخطوات نفسها؛ يختلف فقط المُحمّل والبناء المطابق.
- 1Stop your Minecraft server.
- 2Drop the plugin .jar into the server /plugins folder.
- 3Start the server once so the plugin generates its config files.
- 4Edit /plugins/<name>/config.yml as needed, then run /reload confirm or restart.








