restic version
تم تجميع restic 0.9.6 (v0.9.6-0-gb723ca3d) باستخدام go1.10.4 على نظام Linux / amd64
لدي قسم 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 على نطاق واسع للنسخ الاحتياطية المحلية والبعيدة. ثابر على العمل الجيد!
إذا كان بإمكاني تقديم أي مساعدة إضافية في حل هذه المشكلة ، فيرجى إبلاغي بذلك.
لست متأكدًا من --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 يبدو أن المشكلة قد تم حلها بالنسبة لي. الرجاء إغلاقها إذا كان هذا هو الحال.