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


אני צריך להעביר כמות עצומה של קבצי MP3 בין שני משרתים (אובונטו). לפי ענק אני מתכוון על מיליון קבצים שהם בממוצע 300K. ניסיתי scp אבל זה היה לוקח בערך שבוע. (בערך 500 KB / s) אם אני מעביר קובץ יחיד על ידי HTTP, אני מקבל 9-10 MB / s, אבל אני לא יודע איך להעביר את כולם.

האם יש דרך להעביר את כולם במהירות?


81
2018-06-02 19:55




איזה סוג של רשת יש לך בין השרתים. השתמשתי crossover GB Ethernet בין 1 NIC בכל מכונה. יש לי טוב מאוד דרך לשים את התצורה באמצעות SCP - Jim Blizard
ייתכן שתרצה לחקור מדוע SPP הוא כל כך איטי. זה עשוי להיות איטי יותר ואז דברים כמו FTP בגלל ההצפנה אבל זה לא צריך להיות הרבה יותר איטי. - Zoredache
יש לי 100 mbps ביניהם. SCP הוא איטי יותר על קבצים קטנים (רובם קטנים) - nicudotro


תשובות:


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

tar -c /path/to/dir | ssh remote_server 'tar -xvf - -C /absolute/path/to/remotedir'

לפי ההערה של מקינטוש להלן זו הפקודה שתשתמש עבור rsync

rsync -avW -e ssh /path/to/dir/ remote_server:/path/to/remotedir

109
2018-06-02 20:04



+1 אפשרות זפת הוא הרבה יותר יעיל עבור מספר גדול של קבצים קטנים כמו גם scp ו rsync יהיה הרבה יותר סיבובים לכל קובץ ברחבי הרשת. - Sekenre
רסינק עבד טוב יותר ממני מאשר זפת - nicudotro
כמו כן, אם יש לך הרבה CPU זמין (בשני הקצוות), אבל (לפחות) קישור איטי בין המארחים, זה עשוי להיות שווה לאפשר דחיסה (gzip או bzip) בפקודה זפת. - Vatine
@Jamie: אם אתה משתמש ssh-agent, אז זה צריך לשמש. אחרת, פשוט השתמש באפשרות '-i' כדי לציין היכן למצוא את המפתח הפרטי. עיין בדף האיש לפרטים נוספים. - Scott Pack
@niXar ~ תו בריחה מופעל רק אם SSH משתמש במסוף. זה לא המקרה כאשר אתה מציין פקודה מרחוק (אלא אם כן אתה עובר את -t אופציה). לכן הדאגה שלך אינה חוקית. - Gilles


כונן קשיח חיצוני ומסירה באותו יום שליח.


32
2018-06-02 20:00



Heh heh ... טכנולוגיית הרשת לא מכה את רוחב הפס של סטיישן עמוסה קלטות עושה 90 MPH, אה? (snicker) הנחתי שהוא על LAN כי הוא אמר שהוא מקבל 9-10MB / sec עם HTTP. - Evan Anderson
אני מקבל את זה סוג של מהירות דרך האינטרנט, אבל אני רק מזל איפה אני גר! אם זה על LAN, אז זול יותר עדיין! - Adam
אהה - לא הסתכל על המיקום שלך. כן - שמעתי כי קישוריות לאינטרנט בקוריאה הוא די מרהיב. תקוע כאן בארה"ב, אני שמח לקבל 900KB / sec מעל "נטו ... - Evan Anderson
כן, אבל אתה יכול לקבל burritos טעים בזמן שאתה ממתין להורדה כדי להשלים יש רק על שלוש וחצי מסעדות הגון מקסיקני אפילו בסיאול ... - Adam


אני אשתמש ב- rsync.

אם יש לך אותם מיוצאים באמצעות HTTP עם רישומים ספריות זמין, אתה יכול להשתמש wget ואת הטענה --mirror, יותר מדי.

אתה כבר רואה כי HTTP הוא מהיר יותר מאשר SCP כי SCP הוא הצפנת כל דבר (ובכך bottlenecking על המעבד). HTTP ו- rsync ינועו מהר יותר מכיוון שהם לא מוצפנים.

הנה כמה מסמכים על הגדרת rsync על אובונטו: https://help.ubuntu.com/community/rsync

אלה מסמכים מדברים על מנהור rsync על SSH, אבל אם אתה רק העברת נתונים סביב LAN פרטית אתה לא צריך SSH. (אני מניח שאתה על LAN פרטית.אם אתה מקבל 9-10MB / sec דרך האינטרנט אז אני רוצה לדעת איזה סוג של קשרים יש לך!)

הנה כמה מסמכים בסיסיים אחרים שמאפשרים לך להגדיר שרת Rsync לא מאובטח יחסית (ללא תלות ב- SSH): http://transamrit.net/docs/rsync/


16
2018-06-02 19:57



בעוד SCP משתמש באמת כמה CPU להצפנת הנתונים, אני לא חושב שיש לו 100% השימוש CPU, ולכן המעבד אינו צוואר בקבוק. שמתי לב יותר מדי פעמים כי SCP אינו יעיל כשמדובר העברות מהיר. - Cristian Ciupitu
בהתחשב בכך שהוא ראה 300K עבור SCP ו 9MB עבור HTTP, הנחתי כי צוואר הבקבוק הקשורים SCP (בדרך כלל CPU) נכנס לשחק. זה בהחלט יכול להיות משהו אחר, אם כי. W / o לדעת את מפרט החומרה של המכונות המדוברות קשה לומר. - Evan Anderson
rsync יהיה כמעט בוודאות באמצעות ssh לתחבורה, כמו זו התנהגות ברירת המחדל, ולכן כל תקורה שנגרמה על ידי הצפנה ב SPP יהיה גם להיות נוכח rsync - Daniel Lawson
"אתה כבר רואה כי HTTP הוא מהיר יותר מאשר SCP כי SCP הוא הצפנת הכל" → WRONG. אלא אם כן יש לו 10 שרתים ישנים, הוא לא CPU קשור למשימה זו. - niXar
@RamazanPOLAT - יש לך שורת פקודה ארוכה מדי. ציין את בחירת הקובץ בצורה שונה וזה יעבוד בסדר בשבילך. בדרך כלל אתה יכול פשוט לציין את ספריית המקור w / o תו כללי בסוף. אתה יכול גם להשתמש --include ו --exclude טיעונים כדי לקבל יותר ניואנס. - Evan Anderson


ללא דיונים רבים, להשתמש netcat, רשת swissarmy סכין. אין פרוטוקול תקורה, אתה העתקה ישירות לשקע הרשת. דוגמא

srv1$ tar cfv - *mp3 | nc -w1 remote.server.net 4321

srv2$ nc -l -p 4321 |tar xfv -

14
2018-06-02 20:17



למרבה הצער, ממה שמתי לב netcat הוא מאוד לא יעיל גם אם זה לא צריך להיות. - Cristian Ciupitu
אני מבזבז אותך כי זה באמת, עצה נורא. יש תשובה נכונה אחת: rsync. אני יכול לרשום את כל הסיבות למה זה יותר טוב אבל זה לא יתאים בדף זה, שלא לדבר על תיבת תגובה זעירה. - niXar
@niXar: אם כל מה שאתה רוצה לעשות הוא העברת קובץ יחיד (אין צורך סינכרון נוסף), אז tarpipe הוא כל מה שאתה צריך. - Witiko
@niXar netcat בסדר אם אתה עושה את זה בסביבה מאובטחת כמו vlan פרטית ו / או על VPN. - Lester Cheung


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

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


8
2018-06-02 20:41





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

rsync -ax -e 'ssh -c blowfish' /local/path user@host:/remote/path


7
2018-06-02 20:56



+1 עבור נקודה על שינוי הצופן - Daniel Lawson
המעבד לא הולך להיות צוואר בקבוק, אלא אם כן יש לך 10G Ethernet ו 10 בן CPU. - niXar
רק הערה: cipher "-c arcfour" הוא מהיר יותר. - Arman
@niXar: אבל אם כבר יש לך משימה CPU רב על המחשב שלך, זה חשש. - Isaac


בעת העתקת מספר רב של קבצים, מצאתי כי כלים כמו זפת ו rsync הם יותר יעיל ממה שהם צריכים להיות בגלל תקורה של פתיחת וסגירת קבצים רבים. כתבתי קוד פתוח כלי שנקרא מהר Archiver כי הוא מהר יותר זפת עבור תרחישים אלה: https://github.com/replicon/fast-archiver; זה עובד מהר יותר על ידי ביצוע פעולות מרובות בו זמנית.

הנה דוגמה של Archiver מהיר לעומת זפת על גיבוי של מעל שני מיליון קבצים; מהר Archiver לוקח 27 דקות ארכיון, לעומת זפת לוקח 1 שעה 23 דקות.

$ time fast-archiver -c -o /dev/null /db/data
skipping symbolic link /db/data/pg_xlog
1008.92user 663.00system 27:38.27elapsed 100%CPU (0avgtext+0avgdata 24352maxresident)k
0inputs+0outputs (0major+1732minor)pagefaults 0swaps

$ time tar -cf - /db/data | cat > /dev/null
tar: Removing leading `/' from member names
tar: /db/data/base/16408/12445.2: file changed as we read it
tar: /db/data/base/16408/12464: file changed as we read it
32.68user 375.19system 1:23:23elapsed 8%CPU (0avgtext+0avgdata 81744maxresident)k
0inputs+0outputs (0major+5163minor)pagefaults 0swaps

כדי להעביר קבצים בין שרתים, תוכל להשתמש ב- Archiver מהיר עם ssh, כך:

ssh postgres@10.32.32.32 "cd /db; fast-archive -c data --exclude=data/\*.pid" | fast-archiver -x

4
2017-08-26 20:51





בהעברת 80 TB של נתונים (מיליוני קבצים זעירים) אתמול, המעבר מ rsync ל tar  הוכיח להיות הרבה יותר מהר, כאשר הפסקנו לנסות

# slow
rsync -av --progress /mnt/backups/section01/ /mnt/destination01/section01

ועבר tar במקום ...

# fast
cd /mnt/backups/
tar -cf - section01 | tar -xf - -C /mnt/destination01/ 

מאחר שרתיבים אלה נמצאים באותו LAN, היעד הוא NFS מותקן על מערכת המקור, אשר עושה את הדחיפה. לא לעשות את זה אפילו מהר יותר, החלטנו לא לשמר את atime of

mount -o remount,noatime /mnt/backups
mount -o remount,noatime /mnt/destination01

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

rsync_vs_tar


3
2018-04-04 10:32



האקר אני בוטח אומר לי "זפת מעל tc במקום nfs אולי אפילו מהר יותר". כלומר tar cf - directory | ttcp -t dest_machine מ ftp.arl.mil/mike/ttcp.html - Philip Durbin
שאלה לא קשורה, אבל איפה זה גרף מ? - CyberJacob


אני משתמש בזפת netcat גישה גם, אלא אני מעדיף להשתמש socat - הרבה יותר כוח כדי לייעל את המצב שלך - למשל, על ידי tweaking MSs. (גם, לצחוק אם אתה רוצה, אבל אני מוצא socat טיעונים קל יותר לזכור כי הם עקביים). אז בשבילי, זה מאוד נפוץ מאוד בזמן האחרון אני כבר העברת דברים לשרתים חדשים:

host1$ tar cvf - filespec | socat stdin tcp4:host2:portnum

host2$ socat tcp4-listen:portnum stdout | tar xvpf -

כינויים הם אופציונליים.


3
2018-06-03 06:38