سؤال عرض التقدم الإجمالي في rsync: هل من الممكن؟


لقد بحثت عن هذا الخيار بالفعل ، ولكنني لم أجد سوى الحلول التي تنطوي عليها التصحيح مخصص. حقيقة أنه لا يظهر في - مساعدة ولا مزيد من المعلومات يمكن العثور على الأرجح يشير إلى الإجابات 'لا' ، ولكن أود أن أرى هذا مؤكد.

هل من الممكن أن تظهر التقدم الكلي نقل الملف مع rsync؟


195
2018-01-05 15:26


الأصل


منذ rsync 3.1.0 هناك الآن التقدم الأساسي الكامل نقل ملف المدرجة. انظر للاجابة serverfault.com/a/441724/107793 للتفاصيل. - Florian Feldhaus
يرجى تغيير الإجابة المقبولة. @ رد ديفيد هو عديم الفائدة تماما. - Navin


الأجوبة:


داناكيم صحيح. لا توجد طرق بسيطة لإضافة مؤشر تقدم كامل.

والسبب في ذلك هو أنه عندما يبحث rsync في قائمة بالملفات المراد مزامنتها ، فإنه لا يعرف في وقت مبكر أي الملفات سوف تحتاج إلى تغيير. إذا كنت تقوم بتحويل الدلتا ، فيجب أن يتم حساب الدلتا نفسها في وقت مبكر لإعطاء صورة كاملة للعمل الذي يجب القيام به.

وبعبارة أخرى ، فإن أسهل طريقة لحساب مقدار العمل الذي يتعين القيام به هو القيام به بالفعل.


33
2018-01-06 04:10



لا يزال بإمكانك الحصول على مؤشر بسيط مثل (تم نقل البيانات + البيانات التي تم تخطيها) / (إجمالي البيانات في المصدر) ، أو (تم نقل # ملفات أو تخطيها) / (# ملفات في المصدر). لن تكون دقيقة بشكل خاص ، لكنها ستعطي فكرة. جيد عندما تقوم بنقل كبير في نهاية اليوم ، وأنت تتساءل ما إذا كنت تنتظر حول الكمبيوتر وإيقاف تشغيله ، أو تركه يعمل طوال الليل ... - naught101
لا أعتقد أن الاستنتاج صحيح. أعتقد أن @ naught101 أصبح أكثر عدلاً على السؤال ، وأعتقد أن تحديد إجابة على عدم الاستخدام --size-onlyأو ما شابه ذلك هو غير دقيقة. - Evan Carroll
في الوقت الذي كتبت فيه الرد ، كانت دقيقة - لم يكن لدى rsync آلية لمؤشر تقدم إجمالي. ونعم ، يمكن أن تكتب بنفسك ، ولكن عدد قليل للغاية من الناس. - David Mackintosh
تعليق للقادمين الجدد: من الممكن الآن: serverfault.com/a/441724/422003 - imposeren


توجد الآن طريقة رسمية للقيام بذلك في rsync (الإصدار 3.1.0 من بروتوكول الإصدار 31 ، تم اختباره مع Ubuntu Trusty 14.04).

#> ./rsync -a --info=progress2 /usr .
    305,002,533  80%   65.69MB/s    0:00:01  xfr#1653, ir-chk=1593/3594)

حاولت مع بلدي /usr المجلد لأنني كنت أرغب في هذه الميزة لنقل جميع أنظمة الملفات ، و /usr يبدو أن يكون عينة تمثيلية جيدة.

ال --info=progress2 يعطي نسبة مئوية جميلة ، حتى لو كانت مجرد قيمة جزئية. في الواقع ، يا /usr المجلد أكثر من 6 العربات:

#> du -sh /usr
6,6G    /usr/

و rsync استغرق الكثير من الوقت لمسح كل شيء. حتى في كل الأوقات تقريبًا كانت النسبة المئوية التي رأيتها مكتملة بنسبة 90٪ ، ولكن مع ذلك من المريح رؤية أن هناك شيء ما يتم نسخه :)

المراجع:


313
2017-10-24 11:13



لاحظ أن هذا قد هبط في 3.1.0. من المهم أيضًا ملاحظة أن هذا ليس بالضرورة دقيقًا في منظور الوقت. إنها تُظهر بشكل أساسي كمية البيانات التي تم التحقق من وجودها على الطرف البعيد. والمعدل هو المعدل الذي يتم تعلم البيانات به في النهاية البعيدة (سواء كان ذلك بالفعل أو تم نقل البيانات الجديدة وجعلها صحيحة). لذلك على الرغم من أنه من المفيد جدًا أن تفهم التحذيرات. - Kevin Cox
لاستخدام هذا على OSX مع homebrew ، "مشروب البيرة الصنبور / المغفل ؛ الشراب تثبيت rsync" - Matt Carrier
يستحق أن يلاحظ ذلك --info=progress2 لا يعمل مع -v - sanmai
أضف ال --no-i-r التبديل أيضا ، لذلك rsync لا تفحص بشكل متزايد ولكن بشكل كامل قبل النسخ ويعرف + يعرض مقدار العمل المتبقي. - Alex
لاحظ أنه يمكنك استخدامها --human-readable (أو -h) لمشاهدة الحجم الإجمالي بالميجابايت / GB .. قيد التقدم. - Nux


يمكنك مع "pv" (apt-get install pv مع ديبيان وأوبونتو). أوصي بمراقبة عدد الملفات المنقولة ، حيث أن كمية البيانات المنقولة لا ترتبط بحجم الملفات ولكن على الدلتا بين المصدر والوجهة. وتعول ملفات العد نفس التقدم لدلتا واحدة كبيرة وأخرى مع دلتا الصغيرة. مما يعني أنه في أي حال ، قد يكون تقدير ETA بعيدًا. لا يعمل ETA المستند إلى الحجم إلا إذا كانت وجهتك فارغة ، وفي هذه الحالة دلتا == حجم المصدر.

تتمثل الفكرة العامة في إصدار سطر واحد لكل ملف "تم نقله" من rsync ، وحساب هذه السطور بـ "pv":

rsync -ai / source remote: / dest | pv -les [عدد الملفات]> / dev / null

أميل إلى النسخ الاحتياطي لنظام الملفات بأكمله (لعدة أسباب) ، في هذه الحالة يمكنك استخدام أرخص بكثير df للحصول على عدد الملفات (بدلاً من du أو find سوف يجتاز هرمي المصدر في وقت آخر بعد rsync فعل ذلك). يظهر الخيار -x للتأكد من أن rsync يبقى على نفس نظام الملفات المصدر (ولا يتبع أجهزة التثبيت الداخلية الأخرى):

rsync -aix / source remote: / dest | pv -les $ (df -i / source | perl -ane 'print $ F [2] if $ F [5] = ~ m: ^ /:')> / dev / null

إذا كنت تريد حساب الملفات في / source بطريقة عامة ، فاستخدمها find /source|wc -l (تحذير مرة أخرى: قد تكون بطيئة وثقيلة على I / O).


42
2018-06-10 10:22



كما حددت zerodeuz ، استخدم "df" فقط عندما تكون rsyncing القسم بأكمله ، مثل df -i /source يحصل على عدد inodes (ملفات) من كافة القسم الذي يوجد / المصدر. خلاف ذلك الاستخدام "العثور على" لحساب الملفات داخل دليل داخل "$ ()" التعبير. - lepe
بديل ل du أو find - لنفترض أنك تنتهي من نسخة غير كاملة أو إجراء تحديث في المكان مع الحذف - هو الاستخدام rsync -ai --dry-run للحصول على قائمة الملفات نفسها ، سيتم الانتقال إلى المسار الرئيسي pv - Izkata


بالنسبة لعمليات النقل الطويلة ، فأنا سعيد بالتشغيل du -s على كلا الجانبين. حتى في watch -n1 du -s، إذا كنت أشعر بالقلق حقا.

watch ينفذ الأمر (du -s هنا) بشكل دوري (كل ثانية واحدة هنا) ويعرض ملء الشاشة.


28
2018-01-05 16:30



شكرا على سبيل المثال watch أمر! - Cam
// ، ذكي! وفقا ل linfo.org: "يقوم الأمر du (أي استخدام القرص) بتقرير أحجام أشجار الدليل بما في ذلك جميع محتوياتها وأحجام الملفات الفردية. وهذا يجعلها مفيدة لتتبع خناقات الفضاء ، أي الدلائل والملفات تستهلك كميات كبيرة أو كبيرة من المساحة على محرك الأقراص الثابتة (HDD) أو وسائط تخزين أخرى. " - Nathan Basanese
لا أعرف أي نوع من التحويلات الطويلة التي تقوم بها ، حيث تكون du قابلة للحياة. du بطيء كالجحيم عندما تكون النتيجة في TB و M من الملفات. - Nobody
بالنسبة إلى "التحويلات الطويلة" ، تستغرق عملية du حوالي ساعة لإكمالها ، حيث تعمل Rsync ببطء أبطأ ، لأنها تقاتل عبر الوصول إلى القرص. - Abhi Beckert


مع --info = progress2 بامكانك ايضا تعطيل العوده التدريجية. سيؤدي ذلك إلى إنشاء قائمة الملفات بالكامل في البداية ، وبالتالي تعطيك فكرة أفضل عن التقدم العام (على الأقل في عدد الملفات ، لا أعتقد أنه يقوم بمسح حجم الملف). هناك مفاضلة. هذا هو أكثر تكلفة الذاكرة ، ويؤخر بدء النقل الفعلي. ربما أفضل استخدام في اتصالات أبطأ الارتباط ، وبالتأكيد ليست كبيرة ل gajillions الملفات.

ما يلي هو من صفحة رجل rsync تحت التفاصيل ل -r - استرجاع

يمكن تعطيل العودية المتزايدة باستخدام -ما لا، المؤتمر الوطني العراقي-عودي الخيار أو أقصرها -ما لا-ط-ص الاسم المستعار.

(مصدر: http://rsync.samba.org/ftp/rsync/rsync.html )

أيضا ، إذا قمت بتحديد - حذف - قبل ذلك سوف يجبر كامل العودية في البداية ، والتي تحتاجها من أجل حذف الملفات اليتيمة (الملفات الموجودة في dest ، ولكن ليس في المصدر).


20
2017-10-16 19:56



نشكرك على هذا ، فالردود الأخرى تؤدي إلى نسبة مئوية من العمر تستمر في الصعود والنزول! - artfulrobot


في الأساس لا. يمكنك فقط إظهار التقدم لكل ملف مع علامة - الفصل ، ولكن هذا هو حول هذا الموضوع.

أظن أنك تستطيع أن تكتب غلافًا حوله أو تستخدم أيًا من البقع التي تجدها بالفعل ولكن يجب عليك أن تسأل نفسك ما إذا كان الأمر يستحق ذلك بالفعل ، هل تحتاج بالفعل إلى تقدم كامل لـ rsync؟


11
2018-01-05 15:50



هنا هو البرنامج النصي المجمع الذي يظهر التقدم الإجمالي وتقدم الملف كشريط تقدم لطيف: gist.github.com/JohannesBuchner/4d61eb5a42aeaad6ce90 - j13r
يمكنك تغيير الطريق --progress العمل باستخدام --info=progress2، سوف تظهر لك التقدم العالمي. ستحتاج إلى تعطيل الخوارزمية المتكررة التكرارية لكي تكون مفيدة ، لذلك --info=progress2 --no-inc-recursive - mat
@ j13r يمكنك مشاركة هذا gist كإجابة كذلك! خيارها العظيم! - skywinder


لقد بحثت أيضًا عن كيفية إظهار التقدم الإجمالي مع rsync ولقد عثرت على إجابة مفيدة من هذه المشاركة: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress

في الأساس ، يمكنك استخدام --info = progress2 في النسخة ديف من rsync 3.1.0. هنا هو ما وثيقة قال:

يوجد أيضًا --info = progress2 الخيار الذي يقوم بإخراج الإحصائيات على أساس النقل بأكمله ، بدلاً من الملفات الفردية. استخدم هذه العلامة بدون إخراج اسم ملف (على سبيل المثال ، تجنب - v أو حدد --info = name0 إذا كنت تريد معرفة كيف تقوم عملية النقل دون التمرير على الشاشة بالكثير من الأسماء. (لست بحاجة إلى تحديد - خيار التقدم من أجل الاستخدام - info = progress2.)


7
2017-07-04 14:30



--info=name0 هو الذهب - ipatch


لقد استخدمت الإجابة من zerodeux وكتب نصيتي bash الصغيرة الخاصة بي:

#!/bin/bash

RSYNC="ionice -c3 rsync"
# don't use --progress
RSYNC_ARGS="-vrltD --delete --stats --human-readable"
SOURCES="/dir1 /dir2 /file3"
TARGET="storage::storage"

echo "Executing dry-run to see how many files must be transferred..."
TODO=$(${RSYNC} --dry-run ${RSYNC_ARGS} ${SOURCES} ${TARGET}|grep "^Number of files transferred"|awk '{print $5}')

${RSYNC} ${RSYNC_ARGS} ${SOURCES} ${TARGET} | pv -l -e -p -s "$TODO"

7
2018-02-07 23:44