שאלה מציג התקדמות מוחלטת ב- rsync: האם זה אפשרי?


חיפשתי כבר אפשרות זו, אך מצאתי רק פתרונות הכרוכים בכך תיקון מותאם אישית. העובדה שזה לא מראה ב --help ולא מידע נוסף ניתן למצוא כנראה מציין את התשובות הוא 'לא', אבל אני רוצה לראות את זה אישר.

האם אפשר להראות סך התקדמות העברת קבצים עם rsync?


195
2018-01-05 15:26




מאז rsync 3.1.0 יש עכשיו התקדמות בסיסית הכוללת העברת קבצים כלל. ראה תשובה serverfault.com/a/441724/107793 לפרטים. - Florian Feldhaus
שנה את התשובה המקובלת. התשובה של דוד היא חסרת תועלת לחלוטין. - Navin


תשובות:


דנים נכון. אין דרכים טריוויאליות להוסיף מחוון התקדמות כולל.

הסיבה לכך היא כאשר rsync מסתכל על רשימה של קבצים כדי לסנכרן, הוא לא יודע מראש איזה קבצים יצטרכו לשנות. אם אתה עושה העברות delta, deltas עצמם צריך להיות מחושב מראש כדי לתת תמונה מלאה של העבודה שצריך לעשות.

במילים אחרות, הדרך הקלה ביותר לחשב כמה עבודה יש ​​לעשות היא בעצם לעשות את זה.


33
2018-01-06 04:10



אתה יכול עדיין יש אינדיקטור פשוט כמו (נתונים שהועברו + נתונים דילוג) / (סה"כ נתונים במקור), או (# קבצים הועברו או דילג) / (# קבצים במקור). זה לא יהיה מדויק במיוחד, אבל זה ייתן רעיון. טוב כאשר אתה עושה העברת גדולה בסוף היום, ואתה תוהה אם לחכות מסביב לכבות את המחשב, או לתת לו לרוץ במשך הלילה ... - naught101
אני לא מאמין שהמסקנה נכונה. אני חושב @ naught101 הוא להיות הוגן יותר לשאלה, ואני חושב predicating תשובה על לא משתמש --size-only או שהדבר אינו מדויק. - Evan Carroll
בזמן שכתבתי את התשובה, זה היה מדויק - rsync לא היה מנגנון עבור מחוון התקדמות כוללת. וכן, אתה יכול לכתוב בעצמך, אבל מעט מאוד אנשים היו. - David Mackintosh
הערה עבור עולים חדשים: עכשיו זה אפשרי: serverfault.com/a/441724/422003 - imposeren


יש עכשיו דרך רשמית לעשות זאת ב rsync (גרסה 3.1.0 פרוטוקול גרסה 31, נבדק עם אובונטו 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 כי אני רוצה את התכונה הזו עבור tranferring כל מערכות הקבצים, ו /usr נראה מדגם מייצג טוב.

ה --info=progress2 נותן אחוז הכולל נחמד, גם אם זה רק ערך חלקי. למעשה, שלי /usr התיקייה היא יותר מ 6 gigs:

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

ו rsync לקח הרבה זמן כדי לסרוק את כל זה. אז כמעט כל הזמן את אחוז שראיתי היה כ -90% הושלמה, אבל בכל זאת זה מנחם לראות שמשהו מועתקים :)

הפניות:


313
2017-10-24 11:13



שים לב כי זה נחת 3.1.0. חשוב גם לציין כי זה לא בהכרח מדויק בפרספקטיבה הזמן. זה בעצם מראה את כמות הנתונים שאומתה להתקיים בקצה המרוחק. והתעריף הוא השיעור שבו הנתונים נלמדים כדי להיות נכונים בקצה המרוחק (אם זה כבר היה ככה או שהנתונים החדשים הועברו והכניסו אותו נכון). אז למרות מאוד שימושי אתה צריך להבין את caveats. - Kevin Cox
כדי להשתמש בו על OSX עם homebrew, "לחלוט homebrew ברז / dupes, לחלוט להתקין rsync" - Matt Carrier
ראוי לציין את זה --info=progress2 לא עובד עם -v - sanmai
תוסיף את ה --no-i-r לעבור כמו כן, כך rsync אינו סורק באופן מצטבר אלא באופן מלא לפני העתקה ויודע + מראה כמה עבודה נותרה. - Alex
שים לב שבאפשרותך להשתמש --human-readable (או -h) כדי לראות את הגודל הכולל MB / GB .. בתהליך. - Nux


אתה יכול עם 'pv' (apt-get install pv עם דביאן ואובונטו). אני ממליץ לעקוב אחר מספר הקבצים שהועברו, שכן כמות הנתונים המועברים אינה מתואמת לגודל הקבצים אלא לדלתא בין המקור ליעד. וספירה של קבצים תספור את אותה התקדמות עבור דלתא אחת גדולה ועוד אחת עם דלתא קטנה. כלומר, בכל מקרה, הערכת ה- ETA עשויה להיות רחוקה. גודל ETA מבוסס רק אם היעד שלך ריק, במקרה זה דלתא == גודל המקור.

הרעיון הכללי הוא לפלוט שורה אחת לכל קובץ 'מועבר' מ rsync, ולספור את השורות עם 'pv':

rsync -ai / מקור מרחוק: / dest | pv -les [מספר הקבצים]> / dev / null

אני נוטה גיבוי של מערכות קבצים שלמות (מכמה סיבות), במקרה זה אתה יכול להשתמש הרבה יותר זול df כדי לקבל את מספר הקבצים (במקום du או find אשר יהיה לחצות את היררכית המקור בפעם אחרת לאחר rsync עשה את זה). האפשרות -x מופיעה כדי לוודא ש- rsync יישאר על אותו מערכת קבצים מקורית (ואינו עוקב אחר הרכיב הפנימי):

rsync -aix / source remote: / dest | pv -les $ (df-i / source | perl -ane) הדפס $ F [2] אם $ 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 כאן) מעת לעת (כל 1 שנייה כאן) ומראה את הפלט fullscreen.


28
2018-01-05 16:30



תודה על הדוגמה של watch פקודה! - Cam
// , חכם! לדברי linfo.org: "הפקודה du (כלומר, השימוש בדיסק) מדווחת על הגדלים של עצי המדריך הכוללים את כל התוכן שלהם ואת הגדלים של קבצים בודדים.זה עושה את זה שימושי עבור מעקב אחר חזירים בחלל, כלומר, ספריות וקבצים אשר צורכים כמויות גדולות או מוגזמות של שטח בכונן דיסק קשיח (HDD) או באמצעי אחסון אחרים ". - Nathan Basanese
אני לא יודע איזה סוג של העברות ארוכות אתה עושה, איפה דו קיימא. du הוא איטי כמו לעזאזל כאשר התוצאה תהיה TB ו M של קבצים. - Nobody
עבור "העברות ארוכות" שלי מבצע du לוקח בערך שעה כדי להשלים, במהלכו rsync פועל לאט הרבה יותר, כי הם נלחמים על גישה לדיסק. - Abhi Beckert


ביחד עם --info = progress2 אתה יכול גם להשבית recursion מצטבר. זה יהיה לבנות את כל רשימת הקבצים בהתחלה ובכך לתת לך רעיון טוב יותר של ההתקדמות הכוללת (לפחות במספר קבצים, אני לא חושב שזה סורק גודל הקובץ). יש תמורה. זה יותר זיכרון יקר, ומעכב את תחילת ההעברה בפועל. כנראה בשימוש הטוב ביותר חיבורים איטיים יותר הקישור, ובוודאי לא נהדר עבור gajillions של קבצים.

להלן מתוך דף האיש rsync תחת פירוט עבור -R - recrecive

רקורסיה מצטבר יכול להיות מושבת באמצעות - לא-inc-recursive אפשרות או קצר יותר שלה - לא-אני-ר כינוי.

(מקור: http://rsync.samba.org/ftp/rsync/rsync.html )

כמו כן, אם תציין - deslete - לפני שזה יאלץ את recursion מלא בהתחלה, מה שהוא צריך כדי למחוק קבצים יתומים (קבצים הקיימים 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 אתה יכול לשתף את זה כתשובה גם כן! האופציה הגדולה שלה! - skywinder


חיפשתי גם כיצד להציג את ההתקדמות הכוללת עם rsync ומצאתי משיב שימושי מן הפוסט הזה: https://stackoverflow.com/questions/7157973/monitoring-rsync-progress

באופן בסיסי, אתה יכול להשתמש --info = progress2 בגירסת dev של rsync 3.1.0. הנה מה דוק אמר:

יש גם אפשרות - info = progress2 כי פלט נתונים סטטיסטיים המבוססים על ההעברה כולה, ולא קבצים בודדים. השתמש בדגל זה ללא הפקת שם קובץ (לדוגמה, נמנע -v או ציין - iffo = 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





השתמשתי את התשובה 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=$(find ${SOURCES} | wc -l)

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

שיניתי את טודו יבש לרוץ

TODO=$(find ${SOURCES} | wc -l)

הוא מוצא את מספר הקבצים מהר מאוד!


6
2018-01-03 12:00



למצוא יצירות לכן הרבה יותר טוב מאשר rsync - Dry-run! - hopeseekr
find רק עובד אם אתה rsync- מקומית. rsync --dry-run עובד עם מקורות מרוחקים מדי ... - voretaq7


אם אין לך את rsync האחרון (למשל, OS X יש 2.6.9) ולא יכול להשתמש --info=progress2, הנה אלטרנטיבה אחרת לשמור את עצמך מדפי טקסט גלילה על התקדמות:

rsync -aPh <source> <destination> | xargs -L1 printf "\33[2K\rTransferring: %s"

זה יהיה להדפיס, על שורה אחת, את שם הקובץ האחרון מועבר:

Transferring: the-latest.file


6
2018-05-02 09:18