سؤال كيفية نسخ عدد كبير من الملفات بسرعة بين خادمين


أنا بحاجة إلى نقل كمية هائلة من ملفات MP3 بين اثنين من يخدم (أوبونتو). عن طريق ضخم أعني حوالي مليون ملف والتي هي في المتوسط ​​300K. حاولت مع scp لكنه كان سيستغرق حوالي أسبوع. (حوالي 500 كيلوبايت / ثانية) إذا قمت بنقل ملف واحد بواسطة HTTP ، فإنني أحصل على 9-10 ميجابايت / ثانية ، لكن لا أعرف كيفية نقلها كلها.

هل هناك طريقة لنقلها جميعًا بسرعة؟


81
2018-06-02 19:55


الأصل


ما نوع الشبكة التي لديك بين الخوادم. لقد استعملت كروس إيثرنت GB بين 1 NIC في كل جهاز. حصلت على جيد جدا من خلال وضع هذا التكوين باستخدام SCP - Jim Blizard
قد ترغب في التحقيق في السبب الذي يجعل scp بطيئًا جدًا. قد يكون أبطأ ثم أشياء مثل ftp بسبب التشفير ولكن يجب أن يكون أبطأ بكثير. - Zoredache
لدي 100 ميجابت في الثانية بينهما. scp أبطأ على الملفات الصغيرة (معظمها صغير) - nicudotro


الأجوبة:


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

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
عملت rsync أفضل بالنسبة لي من القطران - nicudotro
أيضا ، إذا كان لديك الكثير من وحدة المعالجة المركزية المتاحة (على كلا الطرفين) ، ولكن (على الأقل) حلقة بطيئة بين المضيفين ، قد يكون من المفيد تمكين الضغط (gzip أو bzip) في الأمر tar. - Vatine
@ Jamie: إذا كنت تستخدم وكيل ssh ، فيجب استخدامه. وإلا فما عليك سوى استخدام الخيار "-i" لتحديد مكان العثور على المفتاح الخاص. انظر صفحة الرجل لمزيد من التفاصيل. - Scott Pack
niXar ~ يتم تمكين حرف الهروب فقط إذا كان SSH يستخدم جهاز طرفي. هذه ليست الحالة عند تحديد أمر بعيد (إلا إذا قمت بتمرير -t اختيار). لذلك قلقك غير صالح. - Gilles


القرص الصلب الخارجي وتسليم البريد في نفس اليوم.


32
2018-06-02 20:00



هيه هيه ... لا تكنولوجيا الشبكات يدق عرض النطاق الترددي لمحطة عربة محملة بأشرطة القيام 90 ميلا في الساعة ، أية؟ (snicker) افترضت أنه كان على شبكة LAN لأنه قال أنه كان يحصل على 9-10 ميجابايت / ثانية مع HTTP. - Evan Anderson
أحصل على هذا النوع من السرعة عبر الإنترنت ، لكني محظوظة في المكان الذي أعيش فيه! إذا كان موجودًا على شبكة LAN ، فلا يزال أرخص ثمناً! - Adam
آه - لم تنظر إلى موقعك نعم ، سمعت أن الاتصال بالإنترنت في كوريا رائع جدًا. تمسك هنا في الولايات المتحدة ، ويسعدني أن أحصل على 900 كيلوبايت / ثانية على "الشبكة ... - Evan Anderson
نعم ، ولكن يمكنك الحصول على burritos لذيذ بينما كنت تنتظر تنزيل لإكمال وهناك فقط حوالي ثلاثة مطاعم مكسيكية نصف كريمة حتى في سيول ... - Adam


سأستخدم rsync.

إذا كنت قد حصلت على تصديرها عبر HTTP باستخدام قوائم الدليل المتاحة ، فيمكنك استخدام wget والوسيطة --mirror أيضًا.

أنت ترى بالفعل أن HTTP أسرع من SCP لأن SCP يقوم بتشفير كل شيء (وبالتالي اختناقات على وحدة المعالجة المركزية). سينتقل كل من HTTP و rsync بشكل أسرع بسبب عدم تشفيرهما.

إليك بعض المستندات حول إعداد rsync على Ubuntu: https://help.ubuntu.com/community/rsync

تتحدث تلك المستندات عن نفق rsync على SSH ، ولكن إذا كنت تتحرك فقط على البيانات على شبكة محلية خاصة لا تحتاج إلى SSH. (أفترض أنك على شبكة LAN خاصة. إذا كنت تحصل على 9-10 ميجابايت / ثانية عبر الإنترنت ، فأنا أريد أن أعرف نوع الاتصالات التي لديك!)

إليك بعض المستندات الأساسية الأخرى التي تسمح لك بإعداد خادم rsync غير آمن نسبيًا (ث / عدم الاعتماد على SSH): http://transamrit.net/docs/rsync/


16
2018-06-02 19:57



بينما تستخدم SCP بالفعل بعض وحدات المعالجة المركزية لتشفير البيانات ، لا أعتقد أنه لديه استخدام CPU بنسبة 100٪ ، وبالتالي فإن وحدة المعالجة المركزية ليست عنق زجاجة. لقد لاحظت الكثير من الأوقات أن SCP غير فعال عندما يتعلق الأمر بالتحويلات السريعة. - Cristian Ciupitu
وبالنظر إلى أنه كان يرى 300 ألف لـ SCP و 9 ميغابايت لـ HTTP ، افترضت أن عنق الزجاجة المرتبط بالـ SCP (وحدة المعالجة المركزية عادةً) كان يدخل حيز التنفيذ. يمكن أن يكون بالتأكيد شيء آخر ، على الرغم من. بدون معرفة مواصفات الأجهزة للأجهزة المعنية من الصعب أن نقول. - Evan Anderson
من شبه المؤكد أن rsync سيستخدم ssh في النقل ، حيث أن هذا هو السلوك الافتراضي ، لذا فإن أي حمل ناتج عن التشفير في scp سيكون موجودًا أيضًا في rsync - Daniel Lawson
"تشاهد بالفعل أن HTTP أسرع من SCP لأن SCP يشفر كل شيء" → خطأ. ما لم يكن لديه خوادم تبلغ من العمر 10 سنوات ، فهو ليس وحدة المعالجة المركزية ملزمة بهذه المهمة. - niXar
RamazanPOLAT - لديك سطر أوامر طويل جدًا. حدد اختيار الملف بشكل مختلف وسيعمل بشكل جيد من أجلك. عادة ما يمكنك فقط تحديد الدليل المصدر بدون حرف بدل في النهاية. يمكنك أيضا استخدام --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
@ netXar netcat على ما يرام إذا كنت تفعل هذا في بيئة آمنة مثل الشبكة الخاصة vlan و / أو عبر VPN. - Lester Cheung


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

خوارزمية جديدة تدرجية - recursion   يستخدم الآن عندما يتحدث rsync         إلى إصدار 3.x آخر. هذا يبدأ نقل تسير بسرعة أكبر         (قبل العثور على جميع الملفات) ، ويتطلب ذاكرة أقل بكثير.         اطلع على الخيار --recursive في الصفحة الرئيسية لبعض القيود.


8
2018-06-02 20:41





rsync ، مثل الآخرين قد أوصت بالفعل. إذا كانت قيمة وحدة المعالجة المركزية (CPU) من التشفير هي عنق زجاجة ، استخدم خوارزمية أخرى أقل تركيزًا على وحدة المعالجة المركزية ، مثل السمكة المنتفخة. مثلا شيء مثل

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


7
2018-06-02 20:56



+1 لنقطة حول تغيير الشفرات - Daniel Lawson
لن تكون وحدة المعالجة المركزية عنق زجاجة ، إلا إذا كان لديك 10G ethernet ووحدة المعالجة المركزية عمرها 10 سنوات. - niXar
مجرد تعليق: الشفرة "-c arcfour" أسرع. - Arman
niXar: ولكن إذا كان لديك بالفعل مهمة تستهلك وحدة المعالجة المركزية على جهازك ، فهو مصدر قلق. - Isaac


عند نسخ عدد كبير من الملفات ، وجدت أن أدوات مثل tar و rsync غير فعالة أكثر مما تحتاج لأن تكون بسبب الحمل المفرط لفتح وإغلاق العديد من الملفات. لقد كتبت أداة مفتوحة المصدر تُعرف باسم archive سريعًا ، وهي أسرع من القطران لهذه السيناريوهات: https://github.com/replicon/fast-archiver. يعمل بشكل أسرع عن طريق إجراء عمليات متعددة للملفات المتزامنة.

في ما يلي مثال على أرشيف سريع مقابل tar على نسخة احتياطية لأكثر من مليوني ملف ؛ يأخذ أرشيف سريع 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

لنقل الملفات بين الخوادم ، يمكنك استخدام أرشيف سريع مع 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