سؤال أفضل طريقة لنقل الملفات عبر شبكة LAN بين جهازي كمبيوتر Linux


أرغب في نقل الملفات (مجلد الموسيقى) بين جهازي كمبيوتر Linux. بعد البحث عن أفضل طريقة للقيام بذلك ، رأيت أن هناك الكثير طرق للقيام بذلك. أعلم أن هذا قد تم طرحه كثير، في كل مكان و كل الوقت. تكمن المشكلة الرئيسية في ذلك في عدم وجود إجماع واضح في الآونة الأخيرة على أفضل طريقة للقيام بهذه المهمة في عام 2011 للمبتدئين في لينوكس (حتى حسب بعض المعايير).

إذن ، بروح مواقع ويب Stack Exchange ، لا أريد أن يكون ذلك مرتبطًا بموقفي الخاص ، ولكن أكثر من دليل للآخرين أيضًا حول كيفية نقل الملفات بين جهازي كمبيوتر Linux عبر شبكة محلية. أعتقد أن الويكي سيكون مفيدا للكثيرين.

هذا ما وجدته حتى الآن:

  • سه
  • سشفس
  • اللجنة الدائمة
  • بالنشر
  • NFS
  • السامبا
  • معط

ما هو أسهل؟ أكثر مرونة؟ أبسط؟ أفضل حل؟ ما هي إيجابيات وسلبيات كل منها؟ هل هناك خيارات (أفضل) أخرى؟ ما هي البارامترات في اختيار أفضل طريقة (قد يعتمد الحل على عدد الملفات ، والملفات ، والسهولة مقابل المرونة ، ...)؟


70
2017-08-22 04:12


الأصل


يمكن لأي شخص أن يفسر أين يأتي rsync للعب في كل هذا؟ - Konerak
jonallard ، من فضلك لا تضيف الأجوبة الى سؤال (ليس من المعقول فعلاً القيام بذلك ، هل هو كذلك؟) - إذا كنت تشعر أن بعض الإجابات تحتاج إلى معلومات إضافية ، يمكنك اقتراح تعديلات عليها ، أو إنشاء إجابتك الخاصة التي تلخص كل شيء! - slhck


الأجوبة:


في بيئة Linux ، لكل من الأمان وسهولة الاستخدام ، فإن ssh هي أفضل طريقة للذهاب. تعد SSH و SSHFS و SCP و SFTP في قائمة الخدمات كلها فقط خدمات مختلفة مبنية على أعلى بروتوكول SSH. من السهل جدًا استخدام SCP ، فهو يعمل تمامًا مثل CP ، ولكن يمكنك توفير أسماء المستخدمين والآلات في المسار. لذا ، قد نفعل مثل CP cp ~/music/ ~/newmusic/، ولكن يمكننا القيام به بنفس السهولة scp ~/music/ user@host:~/newmusic لإرسالها إلى جهاز الكمبيوتر باسم المضيف. هذا كل شيء - لا نحتاج إلى إعداد أي شيء. ستتم مطالبتك بكلمة مرور الحساب على الجهاز الآخر إذا لم يكن لديك شهادة أو أي إعداد آخر للمصادقة (تشارك scp تلك الإعدادات مع ssh ، بالطبع).

SFTP هي أداة تجعل من السهل القيام بالكثير من العمليات على نظام الملفات عن بعد - إنها تعمل مثل FTP ، ولكنها تعمل من خلال SSH بحيث أنها آمنة ولا تتطلب سوى خادم SSH. man sftp سوف يخبرك كل شيء عن كيفية استخدامه. لا أستخدم SFTP فقط لنقل مجلد بين جهازي ، يكون أكثر فائدة عندما يكون لديك الكثير من العمليات للقيام به ، مثل إذا كنت تقوم بإعادة ترتيب الملفات على كمبيوتر آخر.

تمدّد SSHFS نظام SFTP في نظام الملفات: فهو يسمح لك بتركيب مضيف ظاهري في نظام الملفات الخاص بك ، وبالتالي فإن أشياء الشبكة تحدث بشكل شفاف تمامًا. SSHFS مخصص للإعدادات شبه الدائمة ، وليس فقط لنقل الملفات لمرة واحدة. يتطلب الأمر المزيد من الجهد للحصول على الإعداد ، والذي يمكنك القراءة عنه موقع المشروع.

إذا كنت بحاجة إلى العمل في بيئة نظام تشغيل مختلط ، فإن سامبا يصبح أفضل رهان لك. يدعم Windows و OS X Samba بشكل تلقائي تمامًا ، كما يعمل نظام Linux أيضًا على الرغم من أنه من الصعب في بعض الأحيان استخدامه.


59
2017-08-22 04:35



بالضبط نوع الإجابة التي كنت أتمنى: كاملة ، شاملة ، مفصلة ، إلى هذه النقطة. - jonallard
شيء واحد رغم ذلك ، ل scp للعمل ، هل نحن بحاجة إلى إنشاء نوع من خادم ssh ، المستمع أو إلغاء حظر شيء على الجانب الآخر؟ أتلقى أخطاء "رفض الاتصال". - jonallard
يستخدم scp ssh ، لذا سيعمل إذا كان SSH يعمل. هذا يعني ، بالطبع ، أنك تحتاج إلى تشغيل خادم SSH (افتراضي في كل توزيعة linux أعلم بها) ويجب أن يكون الاتصال ممكناً (يجب أن يكون للجدران النارية ، NAT ، إلخ الاستثناءات المناسبة). - jcrawfordor
كما يبدو openssh-server يجب أن يتم تثبيتها في Ubuntu Natty. - jonallard
لاحظ أن ssh يستخدم التشفير ، مما يسبب بعض النفقات الإضافية الإضافية. إذا كانت أجهزة الكمبيوتر المتضمنة تحتوي على وحدات المعالجة المركزية (CPU) بطيئة إلى حد ما ، فقد يحدث ذلك فرقًا. في هذه الحالة netcat أو ما شابه (انظر إجابة كاسبار) قد يكون أفضل. بالطبع إذا كنت لا تحتاج بالفعل إلى التشفير (في شبكة محلية محمية). - sleske


بلدي المفضل الشخصي للحالات التي لا يهم الأمن أداة netcat + قطران:

لإرسال دليل ، قم بالضغط على داخل الدليل الذي تريد إرسال محتوياته على الكمبيوتر الذي يقوم بالإرسال والقيام بما يلي:

tar -cz . | nc -q 10 -l -p 45454

على الكمبيوتر الذي يستلم المحتويات ، قم بالضغط على المكان الذي تريد أن تظهر فيه المحتويات وأن تفعل:

nc -w 10 $REMOTE_HOST 45454 | tar -xz

يحل محل $REMOTE_HOST مع الملكية الفكرية / اسم المضيف للكمبيوتر القيام الإرسال. يمكنك أيضًا استخدام منفذ مختلف بدلاً من 45454.

ما يحدث في الواقع هنا هو أن الكمبيوتر "المتلقي" يتصل بالكمبيوتر المرسل على المنفذ 45454 ويستلم محتويات tar'd و gzip'd من الدليل ، ويمر بذلك مباشرة إلى tar (و gzip) لاستخراجه إلى الدليل الحالي.

مثال سريع (باستخدام مضيف محلي كمضيف بعيد)

الكمبيوتر 1

caspar@jumpy:~/nctest/a/mydir$ ls
file_a.txt  file_b.log
caspar@jumpy:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454

الكمبيوتر 2

caspar@jumpy:~/nctest/b$ ls
caspar@jumpy:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
caspar@jumpy:~/nctest/b$ ls
file_a.txt  file_b.log

55
2017-08-22 04:53



تذكرني kinda من sendnet و recnet من خدمات ipx Novel من الأيام القديمة ... - sum1stolemyname
## netcat + bzip2 قد يكون أسرع قليلاً على الاتصالات البطيئة ## إرسال الخادم # cat file.txt | bzip2 -c | nc -l 1234 ## Receiving server # nc $ send_ip 1234 | bzip2 -cd> file.txt - shantanuo
Caspar: ماذا عن تحرير هذه الإجابة لاقتراح ضغط bzip2 أو lzma؟ - einpoklum
ال -q الخيار يشير إلى أنك تستخدم اكبر برهان-أداة netcat، في حين حكومة الوحدة الوطنية، أداة netcat هو أيضا شائع جدا (الافتراضي في القوس لينكس). هل يمكن أن توسع إجابتك لتشمل بناء جملة حكومة الوحدة الوطنية، أداة netcat؟ - Sebastian
يقول رجل nc الحالي حول الخيار -l: "من الخطأ استخدام هذا الخيار بالتزامن مع -p ، -s ، أو -z options" ، ولكن من الغريب أنه لا يلقي خطأ عند استخدامه. أعتقد أن استخدام "nc -l 45454" يجب أن يعمل جيدًا أيضًا. - Claudiu


للتحركات مرة واحدة ، ينصح scp.

ولكن إذا وجدت أن هذا dir قد يعمل وتحتاج إلى تحريكه عدة مرات للحفاظ على الموقف الآخر محدثًا ، فيمكنك استخدام rsync (مع ssh).

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

#!/bin/bash

user="nisse"
host="192.168.0.33"

echo "Sync: /home/media/music/"
rsync --archive --delete -v --progress -e "ssh -l $user " /home/media/music/ $host:/home/media/music/

سيؤدي ذلك إلى نقل dir يسمى "/ home / media / music /" من الكمبيوتر المحلي إلى الكمبيوتر المسمى 192.168.0.33 باستخدام "nisse" المستخدم. وحذف أي شيء على الهدف غير موجود على جهاز الكمبيوتر المحلي.


19
2017-08-22 06:49



+ لـ rsync ، والذي يبدو أسرع قليلاً وهو لطيف جدًا إذا كان عليك مزامنة الدليل لاحقًا - Wiesław Herr
هذا يبدو واعدًا جدًا (ويمكن إعادة استخدامه بسهولة) ولكن لدي dirs وملفات بمسافات وأنا أتلقى rsync error: syntax or usage error (code 1) at main.c (1348) [sender = 3.1.1] -- أي اقتراحات؟ - Torben Gundtofte-Bruun


الأسرع على الأرجح netcat (كما وصفه caspar).

أنا أحب مزيج من tar و sshوهو آمن ومازال سريعًا:

على المصدر

tar -cf - . | ( ssh user@target && cd /target/path && tar -xf - )

القيام بذلك كجذر ، فإنه يحافظ على أذونات الملف. او استعمل -p على كلا الجانبين. أيضا -S يمكن اعتباره إذا كان لديك ملفات متفرقة.

من الممكن تقليل تشفير الحمل ssh إذا كنت تستخدم arcfour مثل التشفير الذي يعمل مع openSSH:

tar -cpSf - . | ( ssh -c arcfour user@targethost && cd /target/path && tar -xpSf - )

لتحديث المسار البعيد ، rsync مثالي:

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path

7
2017-08-22 08:57



FWIW ، قمت مؤخراً باختبار نقل بين جهازي كمبيوتر محمول حديثين متصلين بشكل مباشر باستخدام rsync مع خيار arcfour ولا جدال محدد. لاحظت عدم وجود اختلاف في السرعة. - Randy Syring


أود أن أوصيكم بدراسة البدائل بدلاً من ذلك مباشرة مع SSH لنقل الملفات داخل الشبكة المحلية الخاصة بك حيث أن الحمل هو IMMENSE. كنت سأذهب مع حل كاسبار إذا لم يعمل هذا الشخص لأي سبب من الأسباب:

في المصدر:

$ python3 -m http.server {PICK_YOUR_PORT}

في الوجهة:

$ wget -r {ip / hostname}:{port}/{File / Directory}

هذا لن يكون فقط أخف من استخدام SSH ولكن أسرع بكثير مع سرعات تتراوح بين 45 ~ 65MiB على معيار CAT6 UTP.
إذا كنت تريد حقاً تحقيق أقصى استفادة من الاتصال ، فحاول استبداله wget مع lftp واستخدام pget -n20 و mirror -r أوامر.


6
2018-04-27 06:30





إذا كان لا بد من القيام به على شبكة الاتصال المحلية ، فما استقاموا لكم فاستقيموا استخدام rsync، حيث ستنتقل من المكان الذي توقفت فيه إذا تعطلت. كما أن لديها بعض الحيل الأخرى لتقليل كمية البيانات التي يتم نقلها ، على الرغم من أنني أشك في أن العديد / أي منها سيكون ذا صلة بحالة نسخ مكتبة الموسيقى إلى موقع بكر. إذا كان الأمان يمثل مصدر قلق ، فقم بالتعيين فقط RSYNC_RSH=ssh أولاً وسيتم نفق البيانات عبر ssh.

إذا كنت أفعل ذلك بالفعل ، على الرغم من ذلك ، ربما لن أستخدم LAN على الإطلاق. سأقوم بنسخ الملفات على قرص صلب USB من واقع خبرتي ، يمكن أن يكون هذا بسهولة عدة مرات من السرعة بشكل أسرع من المرور عبر الشبكة المحلية ، على الرغم من الحاجة إلى نسخ الملفات مرتين - يتم تصنيف USB 2.0 إلى 480Mbps ، وهو أسرع من أي شيء أقل من إيثرنت جيجابت ، بالإضافة إلى أنه أقل حساسية للظروف مما سيؤدي إلى تدهور أداء الشبكة المحلية. كما أنها مستقلة تمامًا عن نظام التشغيل ، بشرط أن تستخدم نظام الملفات الذي يمكن لجميع الأجهزة المعنية التعامل معه - أوصي بـ VFAT / FAT32 ، نظرًا لأن ذلك عالمي إلى حد كبير.


3
2017-08-22 10:00



أنا من المعجبين بـ (sneakernet) ، ولكن من الجدير بالإشارة أنه في حين أن USB 2 من المفترض أن يكون قادرا على الحصول على 480Mbps ، إلا أنني شاهدت أنه يحصل على 30MB / s (حوالي 240Mbps). ربما لدي فقط أجهزة USB رخيصة <-> SATA ؛) أيضا ، FAT32 هو عالمي إلى حد كبير ولكن هو عدم الذهاب لنسخ أشياء مثل صور DVD بسبب القيد 4gb fileize ؛ تجدر الإشارة إلى أن الناس لا يشعرون بالإحباط بسبب رسالة الخطأ "خارج الفضاء" التي يعطيها Windows (على الأقل). - Caspar
Caspar: تنبيهات جيدة! شكرا على ذكرهم. أنا دائما أنسى حد حجم الملف FAT32 ... - Dave Sherohman


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


2
2017-08-22 09:03





أنا أستعمل انسجاموهو عبارة عن مزامنة ملفات رائعة عبر العديد من البروتوكولات المختلفة. يمكنك تكوينه للاستخدام scp، rcp، ftp أو حتى محليًا على نظام الملفات بين مجلدين. أستخدمه لمزامنة مكتبة الموسيقى الخاصة بي ، حيث أنه يمكنه نقل ملفات متعددة في وقت واحد عبر الشبكة وهو مضبوط بالفعل في تكوينه. أحتفظ بمجموعة الموسيقى الخاصة بي بنسخة احتياطية ومتزامنة مع أكثر من 2-3 أجهزة كمبيوتر. سيقوم فقط بنسخ الملفات التي تم تغييرها ، ويقوم بذلك عن طريق الاحتفاظ بفهرس على طرفي عملية النقل بحيث يكون قادراً على معرفة متى قام العميل بتغيير الملف أو عند تغيير ملف الخادم.

قد تختلف الأميال الخاصة بك ، لكنها بالتأكيد أفضل بكثير من scpتجميع مجموعتك الموسيقية بأكملها في كل مرة تقوم فيها بإضافة أغنية جديدة :)


1
2017-11-25 23:14