Restic: خيار النسخ الاحتياطي لإزالة بادئة المسار

تم إنشاؤها على ١٦ نوفمبر ٢٠١٨  ·  24تعليقات  ·  مصدر: restic/restic

ناتج restic version

restic 0.9.3 compiled with go1.11.1 on linux/amd64

ما الذي يجب أن يفعله Restic بشكل مختلف؟ ما الوظيفة التي تعتقد أننا يجب أن نضيفها؟

قد يكون من المفيد أن يكون لديك خيار لـ restic backup يقول "تجريد هذا المسار الرئيسي من مسارات جميع الملفات التي تم نسخها احتياطيًا." على سبيل المثال ، --backup-root /some/path . سيكون لهذا التأثيرات التالية:

  • سيتم تخزين ملف /some/path/to/file في اللقطة على هيئة /to/file .
  • سيتم إجراء فحص البيانات الوصفية لهذا الملف أيضًا مقابل /to/file في اللقطة الأصلية.
  • غير مسموح لك بتحديد ملفات / أدلة إلى restic backup لا تبدأ بهذه البادئة.

(أعتقد أن هذا قد يكون مرتبطًا بـ # 1376.)

ماذا تحاول أن تفعل؟

يتم تشغيل أحد البرامج النصية الاحتياطية الخاصة بنا على نظام به العديد من الخدمات قيد التشغيل والتي لا يمكن إيقافها. تضمن هذه الخدمات إمكانية الاسترداد من نقطة زمنية محددة (على سبيل المثال ، يقومون بتسجيل دفتر يوميات كافٍ لاستعادة بياناتهم في حالة متسقة بعد انقطاع التيار الكهربائي). ومع ذلك ، فإن النسخ الاحتياطية الثابتة ليست ذرية ؛ لذلك ، فإن النسخ الاحتياطية restic تكسر ضمان الاسترداد من الخدمة.

لإصلاح ذلك ، نقوم بما يلي:

  1. خذ لقطة LVM / . اللقطة عبارة عن نسخة ذرية على مستوى الكتلة من المجلد بأكمله.
  2. قم بتركيب لقطة LVM تحت /mnt/backup-snapshot .
  3. قم بتشغيل النسخ الاحتياطي restic مقابل /mnt/backup-snapshot .
  4. قم بإلغاء تحميل لقطة LVM.
  5. احذف لقطة LVM.

هذا يجعل النسخ الاحتياطي نقطة زمنية فعلية ويضمن أن تكون النسخة الاحتياطية المستعادة في حالة متسقة بشكل فعال.

لسوء الحظ ، يتسبب هذا أيضًا في تخزين الملفات في مستودع التخزين الثابت الخاص بنا بالبادئة (عديمة الفائدة) /mnt/backup-snapshot . يمكن أن يؤدي هذا إلى تعقيد جهود الاستعادة ، كما أنه أمر محير بعض الشيء إذا كنت لا تعرف تفاصيل كيفية إنشاء النسخة الاحتياطية.

الحل الوحيد الممكن الذي يمكنني التفكير فيه هو تشغيل النسخة الاحتياطية داخل chroot. على الرغم من أن هذا ليس نهاية العالم ، فقد يكون من الأفضل لـ restic توفير خيار لإزالة بعض البادئات الأولية من الملفات.

backup need direction feature suggestion

التعليق الأكثر فائدة

مرحبًا بالجميع ، لقد بدأت العمل على تنفيذ وظيفة "الجذر المخصص" هذه. كان التنفيذ في حد ذاته بسيطًا على ما يبدو ، على الرغم من أنني اضطررت إلى تعلم golang بعد أن عرفت C # فقط سابقًا ... . سألتزم بـ https://github.com/TheRealVincentVanGogh/restic/tree/2092-feature-custom-path-prefix قريبًا ، إذا أراد أي شخص مساعدتي في golang 😅. نأمل في وقت لاحق ، سأقوم بتقديم طلب سحب هنا.

ال 24 كومينتر

هذا تجسيد قديم لهذا الطلب وجدته: # 555

+1

أعتقد أيضًا أن هذه ستكون ميزة مفيدة حقًا.

لذا ، دعني ألخص: أنت تقوم بتشغيل restic backup /mnt/backup-snapshot ، لذا فإن الملف /mnt/backup-snapshot/foo هو /mnt/backup-snapshot/foo في اللقطة ، لكنك تريد أن يكون /foo . هل هذا صحيح؟

يمكنك تحقيق ذلك باستخدام restic> 0.9.0 عن طريق تغيير الدليل الحالي ، فقط قم بتشغيل cd /mnt/backup-snapshot ثم restic backup . .

هل هذا مناسب لك؟

تغيير cwd يعمل ، لكنني لاحظت أن هناك آثارًا جانبية غير سارة عند استخدام الملفات للتضمين / الاستبعاد. يبدو أنه إذا تم وضع المسارات المطلقة هناك ، فسيتم تخطيها عند تغيير cwd . أفضل استخدام المسارات المطلقة أيضًا - في الوقت الحالي من المحتمل أن أتجه إلى مسار chroot ، لكنني أوافق على أنه سيكون من الأفضل أن يكون لديك شيء مشابه لعلامة -C في tar .

أعتقد أن خيار الجذر المزيف هذا سيكون ميزة مفيدة. أرغب في نفس الشيء مثل cdhowie ولكن مع لقطة apfs على macOS. للوصول إلى لقطات apfs للقراءة فقط ، يجب تثبيتها في مكان ما. ولكن عند الاستعادة ، أود أن يكون المسار "الأصلي" هو المسار الأساسي المخزن في اللقطة.

لسوء الحظ ، فإن خدعة القرص المضغوط ليست مثالية لأن لدي الكثير (125) من المسارات المطلقة التي تم جمعها من StdExclusion.plist (قائمة استبعاد النسخ الاحتياطي القياسي لنظام التشغيل MacOS) وجميع الملفات والمجلدات التي يمكن لـ mdfind العثور عليها باستخدام مجموعة سمات com_apple_backup_excludeItem.

فقط اترك المشكلة إذا وضعت / mnt في ملف التجاهل وبدأت النسخ الاحتياطي من / mnt / fs-snapshot ، فسيستبعد نفسه.

بالإضافة إلى cd $ path && restic backup. لا يزال يعطي المسار $ في نظرة عامة على اللقطة ، بينما المسارات في اللقطة هي / - قائمة.

لقد وجدت حلاً مع proot.

أردت أيضًا أن أجد طريقة لإزالة بادئة المسار. حالة الاستخدام الخاصة بي مختلفة قليلاً - أقوم بإنشاء لقطة zfs ( fs@$(date +%s) ) وأردت دعم هذا دون الحاجة إلى تركيبها ( /path/to/mount/.zfs/snapshots/${TS} ) - بهذه الطريقة آمل ألا أملك ما يدعو للقلق بشأن اللقطة التي لا يتم فكها ثم التسكع إلى الأبد في حالة تحطم شيء ما.

الناتج restic forget لهذا يجعلني أعتقد أن اللقطات ذات المسارات المختلفة لن تُنسى وفقًا للجدول (يوميًا / أسبوعيًا / إلخ).

كان التعليق proot من blurayne نقطة انطلاق رائعة ، وأعتقد أنني توصلت إلى نفس النتيجة:

$snap_path="/path/to/where/snapshot/is/accessible"
$orig_fs="/path/to/filesystem"
proot -b "${snap_path}":"${orig_fs}" restic backup "${orig_fs}"

يعمل هذا بشكل جيد ، والآن جميع اللقطات لها نفس المسار ، دون الحاجة إلى cd أو pushd . أيضًا ، يتوفر proot في مساحة المستخدم ، لذلك إذا لم يتم عمل النسخ الاحتياطية كجذر ، فلا يزال من الممكن.

حالة الاستخدام الخاصة بي: تفريغ بيانات قاعدة البيانات في دليل مؤقت ، مثل / tmp / tmpzmn28r02 (تم الحصول عليها عبر mktemp أو python mkdtemp ()) ثم نسخها احتياطيًا.
ستحدد هذه الطريقة جميع الملفات بين لقطتين على أنها مختلفة. لذلك أحتاج إلى طريقة لإخبار restic أن يتجاهل تمامًا بادئة الدليل المؤقتة.
حالة استخدام أخرى محتملة: اليوم لدي كل صوري في "/ mnt / something / pictures" ولكن غدًا ، سيكون المحتوى نفسه ضمن "/ mnt / external / pictures-from-home" (نظام تقسيم مختلف / أيًا كان)

أيضًا ، إذا كنت تريد استخدام مجلدات restic والنسخ الاحتياطي المتعددة في نفس التشغيل ، من أجل استخدام نفس اللقطة ، فإن هذا يصبح أكثر تعقيدًا.

حتى يتم الإصلاح ، سأستخدم اقتراح "proot" - شكرًا لك blurayne و @

مرحبا! لدي حالة مماثلة. على سبيل المثال لدي مجلدات

/srv/my/long/server1/path/data (with many subfolders and dozen of files)
/path/to/dump.sql
/path/certbot.tar.gz

لذلك أريد الحصول على نسخة احتياطية مثل

/data
/dump.sql
/certbot.tar.gz

والحصول على القدرة على الاستعادة على خادم آخر (لا أعرف بنية المجلد السابقة) بمسار مختلف (نسبي).

ليس لدي أفكار ساخنة لحل هذه المهمة التافهة. Restic هي أداة رائعة ولكن ... لماذا تعمل بهذه الصعوبة للمستخدمين النهائيين؟

أنا أقوم بنسخ كل ما أحتاجه في مجلد النسخ الاحتياطي المحدد مسبقًا (/ النسخ الاحتياطي) وهناك شغّل Restic backup (عبر القرص المضغوط). لكن هذا الحل يعمل فقط مع كميات صغيرة من البيانات.

سيكون من الرائع استعادة القدرة باستخدام - تضمين مجلد فرعي مباشرةً بعد القالب (أو بما في ذلك هذا القناع). السابق.:
restic restore --include data --target /my/new/path
والحصول على نتيجة
/my/new/path/data


شكرًا لك @ whi-tw على الحل بـ proot -b /path/i/wanted:./path_in_repo restic backup . - إنه يعمل بالنسبة لي.

حالة الاستخدام الخاصة بي هي ترحيل لقطات من حلول النسخ الاحتياطي الأخرى إلى restic (آلة الزمن وصور القرص في حالتي).

أقوم بترحيلهم من حيث أقوم بتثبيت الصورة أو الدليل الفرعي للقطقة التي تم إنشاؤها بواسطة TM ، والتي يمكن أن تستغرق وقتًا طويلاً جدًا ، على سبيل المثال /Volumes/TimeMachine-Backups/Backups.backupdb/MacBook Pro/2019-05-22-185113/Macintosh SSD/ .

يعمل الحل cd عند استخدام restic mount و restic restore ، لكن يتم سرد المسار المطلق للقطات الأصلية عند تشغيل restic snapshots .

نظرًا لأنها لقطة مهاجرة ، أود أن يكون هذا هو المسار من حيث تم التقاط اللقطة الأصلية أيضًا. بصرف النظر عن ذلك ، مع المسارات الطويلة ، فإنه يجعل أيضًا إخراج restic snapshots صاخبًا بعض الشيء.

سيكون العلم لتعيين بادئة بديلة مثاليًا بالنسبة لي أيضًا.

يعمل هذا بشكل جيد ، والآن جميع اللقطات لها نفس المسار ، بدون الحاجة إلى cd أو pushd . أيضًا ، يتوفر proot في مساحة المستخدم ، لذلك إذا لم يتم عمل النسخ الاحتياطية كجذر ، فلا يزال من الممكن.

كان من الممكن أن يكون هذا حلًا رائعًا ، لكن proot غير متوفر على macOS ولا يبدو أنه سيأتي في أي وقت قريب (معظم التعليمات البرمجية مكتوبة ضد Linux على وجه التحديد): هل يعمل PRoot على نظام MacOSX؟

هل هناك حل آخر يتبادر إلى الذهن؟

حالة الاستخدام الخاصة بي: تفريغ بيانات قاعدة البيانات في دليل مؤقت ، مثل / tmp / tmpzmn28r02 (تم الحصول عليها عبر mktemp أو python mkdtemp ()) ثم نسخها احتياطيًا.
ستحدد هذه الطريقة جميع الملفات بين لقطتين على أنها مختلفة.

لاحظ أن الملفات ربما _are_ مختلفة على أي حال ؛ عادةً ما تتضمن النسخ الاحتياطية لقاعدة البيانات طابعًا زمنيًا في الأسطر القليلة الأولى.

يمكنك ضبط أوامر تفريغ قاعدة البيانات لاستبعاد التعليقات الديناميكية ويتم فرزها حسب المفاتيح الأساسية على الرغم من جعل البيانات المتغيرة البطيئة قابلة للإلغاء حقًا

تحديث: "proot" يعمل فقط على جهاز واحد بالنسبة لي ، والآخر segfaults.
بديل لها (أحدث) - فقاعات
تمت إضافة غلاف فوقه (مرفق) والذي يجب أن يعمل مع نفس معلمات "-b". يبدو أنها تعمل حتى الآن. لاحظ أنه بناءً على احتياجاتك ومواقع الدليل ، قد تضطر إلى تغيير الغلاف قليلاً.
آمل أن يساعدك ذلك يا رفاق ، لكنني أتطلع إلى الدعم داخل restic نفسه.

proot.sh.txt

حاولت proot . يبدو أنه يكسر القدرة على تشغيل restic كـ non-root مع قدرات إضافية (https://restic.readthedocs.io/en/stable/080_examples.html#full-backup-without-root) ؛ على الأقل حصلت على أخطاء scan: Open: open /.pulse: permission denied لم أحصل عليها عند تشغيل restic بدون proot .

نفس المشكلة مع bwrap .

بالنسبة لي ، لا يزال تجريد بادئة المسار في restic نفسه مفيدًا.

هذه الميزة المفقودة تجعل النسخ الاحتياطي لأجهزة VM أصعب مما يجب.
تنتهي لقطات VM الخاصة بي في مجلد مؤقت ثم يتم نسخها احتياطيًا بواسطة restic.
ينتج عن هذا ما يلي:

ID        Time                 Host         Tags        Paths
--------------------------------------------------------------------------------------
02c536db  2020-04-10 14:28:27  resolver-02              /tmp/tmp.vOFFxxly9O/config.xml
c5709aed  2020-04-10 14:28:29  resolver-02              /tmp/tmp.vOFFxxly9O/sdb.img
a88cc1e7  2020-04-10 14:36:22  resolver-02              /tmp/tmp.FoY1j5JPIZ/config.xml
7c44e6ee  2020-04-10 14:36:24  resolver-02              /tmp/tmp.FoY1j5JPIZ/sdb.img
65456111  2020-04-10 14:37:48  resolver-02              /tmp/tmp.vjtI9JE3Iz/config.xml
eaced756  2020-04-10 14:37:49  resolver-02              /tmp/tmp.vjtI9JE3Iz/sdb.img
8eccec2c  2020-04-10 16:04:30  resolver-02              /tmp/tmp.YtLYRd0rNI/config.xml
34c897e1  2020-04-10 16:04:31  resolver-02              /tmp/tmp.YtLYRd0rNI/sdb.img
99b67b97  2020-04-10 16:07:53  resolver-02              /tmp/tmp.aWaEDqAaTq/config.xml
cad2c9d8  2020-04-10 16:07:54  resolver-02              /tmp/tmp.aWaEDqAaTq/sdb.img
--------------------------------------------------------------------------------------

يكسر هذا restic forget لأنه لا يتعرف على أنه نفس الملف ويحتفظ بلقطة لكل مثيل. أفضل ما إذا كانت هناك طريقة لإزالة بادئة معروفة أو تخزين مسار نسبي فقط ، لا شيء مطلق.
أنا بالفعل أتصل بـ restic مع مسار نسبي و ching في المجلد المؤقت. لا يساعد للأسف وأنا أفضل عدم الاضطرار إلى استخدام bindmounts لهذا الغرض.

هذا يكسر restic forget لأنه لا يتعرف على أنه نفس الملف ويحتفظ بلقطة لكل مثيل.

لقد واجهنا هذا أيضًا ولكن الحل واضح جدًا: ضع علامة على كل نسخة احتياطية بناءً على الملف (الملفات) التي يتم نسخها احتياطيًا.

على سبيل المثال ، يمكنك استخدام العلامات config.xml و sdb.img هنا. ثم أضف --group-by host,tags عند تشغيل restic forget .

ما الذي يجعل هذه الميزة صعبة التنفيذ؟ أليست مجرد تصفية السلسلة الأساسية نفسها في البيانات الوصفية للقطات؟ القيمة التي ستجلبها هائلة. نعم ، يمكنك حل هذه المشكلة ، ولكن هناك حقل مسار ويمكن أن يكون قابلاً للاستخدام ...

ما الذي يجعل هذه الميزة صعبة التنفيذ؟

أتحدث بصفتي مطورًا (ليس عن restic ، ولكن عن مشاريع مفتوحة المصدر أخرى): غالبًا لا يكون تعقيد الميزة هو الذي يمنع تنفيذها ، بل بالأحرى أشياء عادية مثل ضيق الوقت أو الدافع أو ببساطة "الحياة الواقعية" ...

بالطبع ، لم يكن هدفي أن أكون نقديًا ، بل أتطلع بصدق إلى تحديد مدى التعقيد للمساهمين المحتملين

مرحبًا بالجميع ، لقد بدأت العمل على تنفيذ وظيفة "الجذر المخصص" هذه. كان التنفيذ في حد ذاته بسيطًا على ما يبدو ، على الرغم من أنني اضطررت إلى تعلم golang بعد أن عرفت C # فقط سابقًا ... . سألتزم بـ https://github.com/TheRealVincentVanGogh/restic/tree/2092-feature-custom-path-prefix قريبًا ، إذا أراد أي شخص مساعدتي في golang 😅. نأمل في وقت لاحق ، سأقوم بتقديم طلب سحب هنا.

TheRealVincentVanGogh لن أتعلم Go ، لكنني ما زلت حريصًا على هذه الميزة ولدي الكثير من النسخ الاحتياطية التي ما زلت أرغب في نقلها إلى restic ولكن لهذه المشكلة. افتح العلاقات العامة بمجرد أن يكون لديك شيء يبدو أنه يعمل وقم بنشر الرابط هنا ، سأقوم ببعض الاختبارات الثقيلة

TheRealVincentVanGogh كيف يرتبط التنفيذ المخطط له بـ PR # 2010؟

TheRealVincentVanGogh كيف يرتبط التنفيذ المخطط له بـ PR # 2010؟

تضمين التغريدة يبدو أن أحدهم هزمني بالفعل. نعم ، PR # 2010 هو بالضبط ما أنا في خضم ... إعادة الإنجاز ... الرتق. ربما يستطيع cdhowie ربط PR # 2010 بهذه المشكلة للمساعدة في تجنب الالتباس في المستقبل؟ شكرا!

themightychris هنا رابط لتلك العلاقات العامة . يبدو أن dev خرج عن الدراسة في 2018 أيضًا ... فضولي.

تعديل:

يبدو أن هناك بعض الغموض بين إزالة بادئة المسار من ملف اللقطة VS. إزالة بادئة المسار من كل بنية ملف + ملف لقطة. يبدو أن PR # 2010 يعالج فقط السابق . نظرًا لأن OP كان يبحث عن "تجريد هذا المسار الرئيسي من مسارات جميع الملفات التي تم نسخها احتياطيًا" (AKA ، إصلاح مسار مستوى بنية الملف) يجب أن أستعيد ما قلته حول ربط PR # 2010 بهذه المشكلة . آسف لذكر cdhowie!

مع ذلك! MichaelEischer لطالما كانت نواياي هي الحصول على بنية ملف + تنفيذ تقطيع مسار مستوى اللقطة في Restic (رجل عبارة عن ميزة / جملة طويلة). لذلك سأبدأ على الأرجح في العمل على ذلك من كود PR # 2010 الحالي ، والذي من شأنه تسريع التنفيذ.

ملاحظة: أنا مشغول جدًا في الوقت الحاضر ، لذا قد يكون العمل بطيئًا لبعض الوقت ؛ بالطبع ، سأقوم بنشر العلاقات العامة عندما أعتقد أن لدي شيئًا يستحق المشاركة مع جميع الناس! ابق آمنا الجميع! 😄

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

whereisaaron picture whereisaaron  ·  3تعليقات

TheLastProject picture TheLastProject  ·  3تعليقات

christian-vent picture christian-vent  ·  3تعليقات

ikarlo picture ikarlo  ·  4تعليقات

reallinfo picture reallinfo  ·  4تعليقات