Restic: لا يعمل استبعاد $ RECYCLE.BIN مع ملف الاستبعاد

تم إنشاؤها على ٣١ مايو ٢٠٢٠  ·  4تعليقات  ·  مصدر: restic/restic

ناتج restic version

تم تجميع restic 0.9.6 (v0.9.6-0-gb723ca3d) باستخدام go1.10.4 على نظام Linux / amd64

كيف قمت بتشغيل restic بالضبط؟

لدي قسم NTFS مشترك بين نظام التشغيل Windows 10 ونظام التشغيل Ubuntu 18.04 ، والذي أقوم بنسخه احتياطيًا مع restic من Ubuntu. كما تعلم على الأرجح ، يقوم Windows 10 بإنشاء دليل $RECYCLE.BIN في الدليل الجذر للقسم للاحتفاظ بالملفات التي يتم نقلها إلى سلة المحذوفات. أريد نسخ القسم المشترك احتياطيًا ، ولكن ليس الدليل $RECYCLE.BIN .

علاوة على ذلك ، قدمت أدناه وصفًا تفصيليًا لكيفية إعادة إنتاج ما ألاحظه. قصة قصيرة طويلة: استخدام --exclude="\$RECYCLE.BIN" مع أمر النسخ الاحتياطي لا يستبعد الدليل ، ويضع "$ RECYCLE.BIN" (أو أي متغير آخر يمكنني التوصل إليه ، انظر أدناه) في --exclude-file يفعل لا تستبعد الدليل.

ما الخلفية / الخادم / الخدمة التي استخدمتها لتخزين المستودع؟

ألاحظ السلوك مع كل من مستودع محلي (تحت Ubuntu 18.04) ومستودع بعيد عبر SFTP (يتم تشغيل النسخ الاحتياطي أيضًا على Ubuntu 18.04).

سلوك متوقع

يتم استبعاد المجلد $RECYCLE.BIN من النسخة الاحتياطية عند إضافته إلى ملف الاستبعاد.

السلوك الفعلي

تم تضمين المجلد $RECYCLE.BIN في النسخة الاحتياطية بالرغم من إضافته إلى ملف الاستبعاد.

خطوات إعادة إنتاج السلوك

داخل دليل اختبار مؤقت ، قم بإصدار الأوامر التالية في bash:

# prepare the directory to be backed up
mkdir "data";
mkdir "data/\$RECYCLE.BIN";
touch "data/backup_this";
touch "data/\$RECYCLE.BIN"/ignore_this";

# init repo
mkdir "repo";
restic init --repo=repo/

# prepare exclude file
echo "\$RECYCLE.BIN" > exclude.file

الآن إصدار عائد restic --repo=repo/ backup --verbose --verbose data/ :

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
start scan on [data/]
start backup on [data/]
scan finished in 0.257s: 2 files, 0 B
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.004s (0 B added)
new       /data/backup_this, saved in 0.000s (0 B added)

Files:           2 new,     0 changed,     0 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      1 new
Added to the repo: 372 B

processed 2 files, 0 B in 0:00
snapshot 27c00c6b saved

كما هو متوقع.

اصدار عوائد restic --repo=repo/ backup --verbose --verbose --exclude="\$RECYCLE.BIN" data/

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 27c00c6b
start scan on [data/]
start backup on [data/]
scan finished in 0.257s: 1 files, 0 B
unchanged /data/backup_this

Files:           0 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      1 new
Added to the repo: 372 B

processed 1 files, 0 B in 0:00
snapshot 61c27a16 saved

وهو متوقع أيضًا.

ومع ذلك ، إصدار restic --repo=repo/ backup --verbose --verbose --exclude-file=exclude.file data/ ، حيث

 $ cat exclude.file 
$RECYCLE.BIN

النتائج في

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 61c27a16
start scan on [data/]
start backup on [data/]
scan finished in 0.211s: 2 files, 0 B
unchanged /data/backup_this
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.003s (0 B added)

Files:           1 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 2 files, 0 B in 0:00
snapshot 9a62470f saved

أي ، لا يتم استبعاد الدليل من النسخة الاحتياطية على الرغم من وجوده في ملف الاستثناء.

لقد جربت أيضًا أنواعًا مختلفة من ملف الاستبعاد (الهروب من علامة الدولار ، وإضافة علامات الاقتباس ، وإضافة سطر جديد في نهاية الملف) ، ولكن لم يتم إجراء أي شيء لاستبعاد الدليل.

هل لديك أي فكرة عن سبب هذا؟

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

هل لديك فكرة عن كيفية حل المشكلة؟

لسوء الحظ ، ليس لدي أدنى فكرة عن go (أنا أتقن لغة ++ C فقط) ، ولكن يجب أن يكون هناك خطأ ما في التفاعل مع نظام التشغيل و / أو نظام الملفات عند التعامل مع أسماء الملفات بما في ذلك الأحرف الغريبة.

هل ساعدك ريستيك اليوم؟ هل جعلك سعيدا بأي شكل من الأشكال؟

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

backup need feedback questioproblem

ال 4 كومينتر

لست متأكدًا من --exclude ، ولكن في ملفات الاستبعاد ، يوسع restic متغيرات البيئة. استخدم $$RECYCLE.BIN لتجنب ذلك.

انظر: https://restic.readthedocs.io/en/latest/040_backup.html#excluding -files

حسنًا ، شكرًا ، يبدو أنني أغفلت بالضبط هذه الفقرة الفردية في الوثائق.

يبدو أنه ينجح:

 $ cat exclude.file 
$$RECYCLE.BIN

وإصدار restic --repo=repo/ backup --verbose --verbose --exclude-file=exclude.file data/ مرة أخرى

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 96bdd658
start scan on [data/]
start backup on [data/]
scan finished in 0.211s: 1 files, 0 B
unchanged /data/backup_this

Files:           0 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 1 files, 0 B in 0:00
snapshot 5c475b96 saved

كما هو متوقع.

ومع ذلك ، في أكثر من 10 سنوات من تجربة Linux ، لم أواجه مطلقًا الاضطرار إلى الهروب من $ بواسطة $$ بدلاً من \$ ، ولكن كما تنص الوثائق ، يبدو أن هذا قياسي مقابل os.ExpandEnv ، لذلك لا يقتصر الأمر على restic.

ومع ذلك ، عوائد restic --repo=repo/ backup --verbose --verbose --exclude="$$RECYCLE.BIN" data/

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 5c475b96
start scan on [data/]
start backup on [data/]
scan finished in 0.204s: 2 files, 0 B
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.002s (0 B added)
unchanged /data/backup_this

Files:           1 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 2 files, 0 B in 0:00
snapshot ed44b219 saved

الذي يبدو غير متسق تمامًا وغير بديهي.

علامات الاقتباس المزدوجة في --exclude="$$RECYCLE.BIN" تعني أن الغلاف يوسع $$ إلى PID الحالي. جربه بعلامات اقتباس مفردة: --exclude='$$RECYCLE.BIN'

(على سبيل المثال ، انظر إلى echo "$$RECYCLE.BIN" مقابل echo '$$RECYCLE.BIN' )

kontakm يبدو أن المشكلة قد تم حلها بالنسبة لي. الرجاء إغلاقها إذا كان هذا هو الحال.

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

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

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

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

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

viric picture viric  ·  5تعليقات

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