שאלה העתקת עץ ספרייה גדול באופן מקומי? cp או rsync?


אני צריך להעתיק עץ מדריך גדול, על 1.8 TB. הכול מקומי. מתוך הרגל הייתי משתמש rsync, אבל אני תוהה אם יש טעם רב, ואם אני מעדיף להשתמש cp.

אני מודאג לגבי הרשאות ו / uid / gid, שכן הם צריכים להישמר בעותק (אני יודע rsync עושה את זה). כמו גם דברים כמו symlinks.

היעד ריק, אז אני לא צריך לדאוג לעדכון תנאי כמה קבצים. זה כל הדיסק המקומי, אז אני לא צריך לדאוג ssh או רשת.

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

אז מה אתה חושב, rsync או cp?


217
2017-07-20 14:36




אם rsync עושה בדיוק מה שאתה רוצה לעשות את זה, אם אתה מכיר היטב את השימוש שלה עבור יישום מסוים זה כבר, ואם הוא פועל מהר מספיק כדי להתאים את הטעם שלך, אז למה לעזאזל אתה רוצה לעבור? - eleven81
כי אני חושש כי rsync ייקח יותר מאשר cp, מאז rsync עושה המון checkumming כי cp לא יעשה - Rory
המעבד התקורה של בדיקת היא קטנה לעומת דיסק / רשת i / o. אלא אם כן הדיסק נמצאים באותה מערכת ומערכת ההפעלה יכולה לעשות עותק חכם של כונן הכונן בבקר האוטובוס. - Martin Beckett
Checksumming נעשה על קבצים שונים על גודל ובדיקה זמן חותמת. אם אתה פרנואיד (כמו אחרי הפסקת חשמל בזמן ההעתקה) אתה יכול להכריח את בדיקת כל הקבצים, אבל על העברה מקומית, זה בדרך כלל איטי יותר מאשר מתחיל מאפס. - korkman
אולי הוא סקרן לגבי שיפור זרימת העבודה שלו, והוא לא טומן את ראשו בחול וחושב שהוא יודע הכול. הערה זו באמת מרגיז אותי. - Martin Konecny


תשובות:


הייתי משתמש rsync כמו זה אומר שאם זה מופרע מכל סיבה שהיא, אז אתה יכול להפעיל אותו בקלות עם עלות קטנה מאוד. ולהיות rsync, זה יכול אפילו להפעיל מחדש דרך דרך קובץ גדול. כמו אחרים להזכיר, זה יכול להוציא קבצים בקלות. הדרך הפשוטה ביותר לשמר את רוב הדברים היא להשתמש -a דגל - 'ארכיון'.

rsync -a source dest

למרות ש- UID / GID ו symlinks נשמרים על ידי -a (ראה -lpgo), השאלה שלך מרמזת אולי תרצה מלא עותק של מידע מערכת הקבצים; ו -a אינו כולל קישורים קשיחים, תכונות מורחבות או רשימות בקרת גישה (ב- Linux) או למעלה ולא (על OS X.) לכן, עבור עותק חזק של מערכת קבצים, עליך לכלול את הדגלים הבאים:

rsync -aHAX source dest # Linux
rsync -aHE source dest  # OS X

ברירת המחדל cp יתחיל שוב, אם כי -u דגל יהיה "להעתיק רק כאשר הקובץ SOURCE הוא חדש יותר מקובץ היעד או כאשר קובץ היעד חסר". וה -a (ארכיון) יהיה רקורסיבי, לא לשכפל קבצים אם אתה צריך להפעיל מחדש ולשמור הרשאות. לכן:

cp -au source dest

188
2017-07-20 14:40



הדגל -u של Cp כנראה אינו הפתרון הטוב ביותר, שכן הוא לא יאתר קובץ שהועתק חלקית / פגום. הדבר הנחמד על rsync הוא שאתה יכול לקבל את זה md5 סכום הקבצים לזהות הבדלים. - Chad Huneycutt
הוספת אפשרות (wwh - file-file) תאיץ את rsync שהופרע, מכיוון שזה יהיה רק ​​להעתיק את הקובץ במקום checkmeing. - hayalci
למעשה, rsync מזהה העברות מקומיות ומאפשר עותק שלם של הקובץ ללא checkumming automagically. - korkman
ו - התקדמות וזה ממש שימושי! - Matt
-P או - התקדמות מראה התקדמות עבור כל קובץ בנפרד. זה שימושי עבור העתקת קבצים גדולים, לא עבור רבים (אלפי) קבצים קטנים כמו זה אומר הרבה יותר פלט שבו אתה לא יכול לקרוא. זה לא מראה את התקדמות יתר של כל הקבצים המשולבים. - SPRBRN


בעת העתקה למערכת הקבצים המקומית אני תמיד משתמש באפשרויות rsync הבאות:

# rsync -avhW --no-compress --progress /src/ /dst/

הנה ההיגיון שלי:

-a is for archive, which preserves ownership, permissions etc.
-v is for verbose, so I can see what's happening (optional)
-h is for human-readable, so the transfer rate and file sizes are easier to read (optional)
-W is for copying whole files only, without delta-xfer algorithm which should reduce CPU load
--no-compress as there's no lack of bandwidth between local devices
--progress so I can see the progress of large files (optional)

ראיתי העברות של 17% מהר יותר באמצעות הגדרות rsync לעיל מעל הפקודה זפת הבאה כפי שהוצע על ידי תשובה אחרת:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

89
2018-05-07 19:09



נתקלתי בשגיאה הבאה: rsync: --no-compress: unknown option @ אליס פרסיוואל. - alper
זה מהר מהר. מהר יותר לעשות זאת rm -rf /src/. - dgo
כמו @ alper, - לא לדחוס לא היה אופציה עבור הגירסה שלי של rsync (ב CentOS 7); אני השתמשתי - במקום ברמת = 0 במקום. - Paul


כאשר אני צריך להעתיק כמות גדולה של נתונים, אני בדרך כלל להשתמש בשילוב של זפת ו rsync. המעבר הראשון הוא לזרוק אותו, משהו כזה:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

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

# cd /dst; rsync -avPHSx --delete /src/ .

שים לב כי קו נטוי נגרר ב /src/ חשוב.


78
2017-07-20 15:15



+1 מצאתי זפת בדרך כלל להיות מהיר יותר עבור עותקים גדולים יותר מאשר rsync. אני אוהב את הרעיון של גמר עם rsync הסופי, מדי. - Geoff Fritz
זפת היא בחירה טובה אם dir dest הוא ריק. למרות הדרך שלי תהיה: cd $ DSTDIR; זפת c-C $ SRCDIR. | זפת - asdmin
זה היופי של שיטה זו. אתה לא צריך להכפיל את שטח כי אתה אף פעם לא באמת ליצור קובץ זפת ביניים. הזפת לפני הצינור אורזת את הנתונים ומזרימה אותו לסטדוט, ואת הזפת לאחר שהצינור תופס אותו מסטדין ומפרק אותו. - Chad Huneycutt
עשיתי C-A עבור העברת 12GB, ושיטה זו להעברת 42GB. שיטת זפת לקח בערך 1/4 הזמן. - NGaida
אני גם שם pv באמצע כדי להיות מסוגל לראות את ההתקדמות, להעריך את גודל כל הנתונים באמצעות df. גם אני השתמשתי --numeric-owner, כמו דיסק המקור היה ממערכת אחרת ואני לא רוצה tar למחוק text הבעלים tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp - Petr Pudlák


rsync

הנה rsync אני משתמש, אני מעדיף cp עבור פקודות פשוטות, לא את זה.

$ rsync -ahSD --ignore-errors --force --delete --stats $SRC/ $DIR/

cpio

הנה דרך כי הוא אפילו בטוח יותר, cpio. זה בערך מהר כמו זפת, אולי קצת יותר מהר.

$ cd $SRC && find . -mount -depth -print0 2>/dev/null | cpio -0admp $DEST &>/dev/null

זפת

זה גם טוב, וממשיך על כישלונות קריאה.

$ tar --ignore-failed-read -C $SRC -cf - . | tar --ignore-failed-read -C $DEST -xf -

הערה אלה הם רק עבור עותקים מקומיים.


13
2018-02-26 17:06



למה אתה משתמש ב -S ו- D דגלים עבור rsync? - miyalys


rsync -aPhW --protocol=28 מסייע להאיץ את אלה עותקים גדולים עם RSYNC. אני תמיד נוסעת, כי המחשבה על כך שאני באמצע הדרך, היא משחררת אותי


6
2017-07-20 16:24



מהו הערך של שימוש בפרוטוקול ישן יותר במחרוזת פקודה זו? - ewwhite
על מכונת מק הגירסה הישנה של Rsync שנשלח תלוי על כמה פרוטוקולים חדשים rsync פרוטוקול כגון 29. להגיד את זה כדי לעבור פרוטוקול מבוגר עושה את זה לא לבדוק שוב ושוב. - oneguynick
אני מניח שמספר 28 אינו חוקי עוד? - SPRBRN


ה rsync הפקודה תמיד מחשבת checkums על כל בית היא מעבירה.

אפשרות שורת הפקודה --checksum מתייחס רק אם בודקים של קבצים משמשים כדי לקבוע אילו קבצים להעביר או לא, כלומר:

-c, --checksum  לדלג על בסיס בדיקת, לא mod-time & גודל "

דף השער גם אומר את זה:

שים לב ש- rsync תמיד מוודא שכל קובץ שהועבר שוחזר כראוי בצד המקבל על-ידי בדיקת בדיקת הקובץ כולו שלו, אך אימות אוטומטי לאחר ההעברה אינו קשור לאפשרות זו לפני ההעברה "האם קובץ זה נחוץ להתעדכן?" לבדוק.

לכן rsync גם, תמיד, מחשבת בדיקה של כל הקובץ בצד המקבל, גם כאשר -c/ --checksum אפשרות "כבוי".


6
2017-11-28 01:20



בעוד ההודעה שלך הוסיף קצת מידע מעניין כאן, את rants, ועלבונות להקטין את הערך של ההודעה שלך. אתר זה אינו פורום לשידורים בלתי-בונה. אם היית מצליח לשנות את המקור, האם שלחת את השינויים שלך כתיקון? האם פרסמת את הגירסה שלך על github או משהו? אם אתה מרגיש כל כך חזק על זה, זה יכול להיות טוב יותר אם ניסית לעשות משהו קצת יותר בונה במקום להיות מעליב מיותר. - Zoredache
כן, הפסקה האחרונה לא היתה הכרחית. - Sherwin Flight


מה שאתה מעדיף. רק אל תשכח את זה -a כאשר אתה מחליט להשתמש cp.

אם אתה באמת צריך תשובה: הייתי משתמש rsync כי זה הרבה יותר גמיש. צריך לסגור לפני ההעתקה הושלמה? פשוט ctrl-C לחדש מיד את הגב. צריך לא לכלול כמה קבצים? רק תשתמש --exclude-from. צריך לשנות בעלות או הרשאות? rsync יעשה את זה בשבילך.


5
2017-07-20 14:40



מה עושה הדגל -p לעשות שוב? - Rory
זה יהיה בעלות Preserver, חותמות זמן והרשאות. - innaM
cp -a יהיה טוב יותר. - David Pashley
אכן. התשובה השתנתה בהתאם. - innaM


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

מצאתי גם:

http://matthew.mceachen.us/geek/gigasync/

אתה יכול גם באופן ידני לשבור את העץ ולהפעיל rsyncs מרובים.


5
2017-07-20 16:14



אם אתה משתמש בגירסה 3 זה לא שומר את העץ כולו בזיכרון אם הוא גדול, הוא משתמש באלגוריתם מצטבר recursion: samba.org/ftp/rsync/src/rsync-3.0.0-NEWS - Kyle Brandt♦


זה פתיל היה מאוד שימושי, כי היו כל כך הרבה אפשרויות כדי להשיג את התוצאה, החלטתי benchmark כמה מהם. אני מאמין התוצאות שלי יכול להיות מועיל לאחרים יש תחושה של מה עבד מהר יותר.

לזוז 532GB של נתונים שהופצו בין 1,753,200 קבצים היו לנו אותם זמנים:

  • rsync לקח 232 דקות
  • tar לקח 206 דקות
  • cpio לקח 225 דקות
  • rsync + parallel לקח 209 דקות

במקרה שלי העדפתי להשתמש rsync + parallel. אני מקווה שמידע זה יסייע לאנשים רבים יותר להחליט בין חלופות אלו.

הסמן המלא מתפרסם כאן


5
2018-05-11 19:14



דף 404 לא נמצא - Amedee Van Gasse
תודה @ AmeeVanGasse כתובת האתר תוקנו קצר לאחר דיווח :) - arjones
למה לא benchmarking cp? זוהי הכותרת של השאלה! - calandoa
@ קלנדואה אני חושב cp הוא לא בטוח, כלומר: כאשר זה שובר אתה צריך להתחיל מחדש, ככה אני מעדיף אפשרויות שיכולים לחדש, ergo rsync הוא האהוב עלי :) - arjones


כאשר עושה המקומי עותק ספרייה מקומית, הניסיון שלי הוא כי "cp -van src dest" הוא 20% מהר יותר מאשר rsync. ככל restartability, זה מה "n" עושה. אתה רק צריך rm את הקובץ שהועתק חלקית. לא כואב אלא אם כן זה ISO או כאלה.


2
2017-09-07 07:26





ARJ הוא כל כך ישן הספר! אני באמת בספק אם ARJ ו / או rsync ייתן ביצועים.

בהחלט מה שאני עושה תמיד להשתמש cpio:

find . -print | cpio -pdm /target/folder

זה כמעט מהיר מאשר CP, בהחלט מהר יותר זפת וללא מקטרת שום דבר.


2
2017-09-09 04:09



"Cpio המקורי למצוא כלי עזר נכתבו על ידי דיק הייט בעת שעבד AT & T יוניקס קבוצת תמיכה.הם הופיעו לראשונה בשנת 1977 ב PWB / UNIX 1.0" - FreeBSD של cpio דף גבר. - Chris S
cpio למרבה הצער יש גבול 8GB העליון עבור קבצים.
"ללא מקטרת"חוץ מזה find הפקודה, כפי שציינת אותו, יש בו צינור: find . -print | cpio -pdm /target/folder - warren