Ssh এর উপরে এখনও লেখা থাকা কোনও ফাইল কীভাবে অনুলিপি করবেন?


20

পরিস্থিতি এখানে:

  1. আমি ক্লায়েন্ট এ থেকে এসএফটিপি ব্যবহার করে একটি সার্ভারে একটি বড় ফাইল আপলোড করছি।
  2. আমার এই ফাইলটি সার্ভার থেকে ক্লায়েন্ট বি ওভার এসএসএসে ডাউনলোড করতে হবে।

আমি কী করতে চাই তা হ'ল সার্ভার থেকে ক্লায়েন্ট বিতে স্থানান্তর শুরু করা যখন ক্লায়েন্ট এ থেকে এখনও আপলোড হয় when

এটি করার সর্বোত্তম পদ্ধতি / সরঞ্জাম কী?

আপডেট :

এখনও অবধি উত্তর আকর্ষণীয় - আমি সেগুলি পড়তে এবং পরীক্ষা করতে নিশ্চিত হব। উত্তরের জন্য বোনাস পয়েন্টগুলি যা ক্লায়েন্ট এ কীভাবে ফাইল আপলোড করছে তা নিয়ন্ত্রণ করার উপর নির্ভর করে না। (উদাহরণস্বরূপ, ক্লায়েন্ট A এর কাছ থেকে আমরা কেবল জানি যে ফাইলটি একটি পরিচিত ফাইলনামে লেখা হচ্ছে))


ওহ, ভাল প্রশ্ন। এটি অবশ্যই সম্ভব, তবে আমি এটি প্রয়োগ করে এমন কিছুই সম্পর্কে অবগত নই
মাইকেল মরোজেক

উত্তর:


10

একক ফাইলের জন্য এসএফটিপি ব্যবহারের পরিবর্তে আপনি ফাইলটি এসএসএস ব্যবহার করে পাইপ করতে পারেন catবাpv প্রেরণকারী দিকে এবং teeমাঝের সার্ভারের মাধ্যমে উভয়কেই কোনও ফাইলে ডেটা প্রেরণ করতে এবং অন্য এসএসএস লিঙ্কের অপর পাশের একটি অনুলিপি প্রেরণ করতে পারেন শুধু একটি ফাইল ডেটা লিখুন। সঠিক ভুডু প্রয়োজনীয় যা আমি পাঠকের জন্য অনুশীলন হিসাবে ছেড়ে যাব, কারণ এখনই খেলার মতো সময় পাইনি (দুঃখিত)। এই পদ্ধতিটি কেবল তখনই কাজ করবে যদি দ্বিতীয় গন্তব্যটি এসএসএইচ এর মাধ্যমে সর্বজনীনভাবে অ্যাক্সেসযোগ্য হয় যা আপনি এটি ক্লায়েন্ট মেশিন হিসাবে বর্ণনা করার মতো নাও হতে পারে।

আরেকটি পদ্ধতির, যা "রান ও ওয়েট" কম, rsyncতবে সার্ভার এবং ক্লায়েন্ট বি এর মধ্যে ব্যবহার করা সহজ হতে পারে, প্রথমবার আপনি এটি চালানোর সময় এটি কোনও উপাত্তের আংশিক অনুলিপি পেতে পারে, তবে আপনি কেবল পুনরায় চালাতে পারবেন এটি পরে আরও ডেটা পেতে (ক্লায়েন্ট 1-> সার্ভার স্থানান্তর সম্পূর্ণ হয়ে গেলে একবারে একটি চূড়ান্ত রানের সাথে)। এটি কেবলমাত্র তখনই কাজ করবে যদি এসএফটিপি স্থানান্তরকালে সার্ভার ডেটা সরাসরি ফাইল-নামের মধ্যে রাখে (কখনও কখনও আপনি দেখবেন যে ডাটা একটি অস্থায়ী ফাইলে যাবে যা ফাইলটি পুরোপুরি স্থানান্তরিত হওয়ার পরে পুনরায় নামকরণ করা হবে - এটি তৈরি করার জন্য এটি করা হয় ফাইল আপডেট আরও বেশি পারমাণবিক তবে rsync ধারণাটি ব্যবহারযোগ্য নয়। আপনি স্কিপির পরিবর্তে সি 1-> এস ট্রান্সফারের জন্য আরএসসিএনসি ব্যবহার করতে পারেন (যদি আপনি এটি ব্যবহার করেন)--inplace হতে পারে, উপরে উল্লিখিত সমস্যা এড়ানোর বিকল্পটি ) - আরএসসিএনসি ব্যবহার করা আপনাকে যদি C1-> সার্ভার সংযোগের সমস্যার সম্মুখীন হয় তবে সমস্ত কিছু পুনরায় প্রেরণের প্রয়োজন থেকে সুরক্ষা দেয় would একটি বৃহত স্থানান্তর চলাকালীন ( rsync --inplace -a --progress <source> <dest>এই "ট্রান্সফার পুনরায় শুরু করুন" আচরণের জন্য, যখন আরএসসিএনসি উপলব্ধ থাকে তখন আমি স্কিপ / এসএফটিপি পরিবর্তে ব্যবহার করতে চাই ))

উপরোক্ত সংক্ষিপ্তসার জন্য, চলমান:

rsync --inplace -a --progress <source> user@server:/<destination_file_or_folder>

ক্লায়েন্ট 1 এ তখন চলছে

rsync --inplace -a --progress user@server:/<destination_file_or_folder> <destination_on_cli2>

প্রথম স্থানান্তর সম্পূর্ণ না হওয়া অবধি ক্লায়েন্ট 2 এ বার বার করুন (তারপরে আপনি সবকিছু পেয়েছেন তা নিশ্চিত করার জন্য আরও একবার চালাবেন)। rsyncকেবলমাত্র সর্বনিম্ন স্থানান্তরিত করতে খুব ভাল এটি প্রতিবার পুরো অনেকটা স্থানান্তর করার পরিবর্তে কোনও অবস্থান আপডেট করতে হবে। প্যারানোয়ার জন্য আপনি --checksumআরএসইএনসি কমান্ডগুলিতে বিকল্পটি যুক্ত করতে চাইতে পারেন (এটি বড় ফাইলগুলির জন্য আরও বেশি সিপিইউ সময় লাগবে তবে এটি প্রয়োজন না হলে উল্লেখযোগ্যভাবে আরও ডেটা স্থানান্তরিত হবে না) এবং গতির জন্য --compressবিকল্পটি ডেটা যদি সহায়তা করে তবে আপনি স্থানান্তর করছেন ইতিমধ্যে সংকুচিত বিন্যাসে নেই।


5

আমি এই মুহুর্তে এটি চেষ্টা করতে পারি না, সুতরাং এটি ভালভাবে ব্যর্থ হতে পারে: আমার ধারণাটি হ'ল ক্লায়েন্ট বিতে ফাইলটি যে ডিরেক্টরিটি পৌঁছেছে সেটিকে মাউন্ট করুন, যেমন ক্লায়েন্ট বি এর ফাইল সিস্টেমে sshfs থেকে / mnt / সার্ভারের সাথে। তারপর

tail -c +0 -f /mnt/server/thefileinquestion > ~/finalfile

/ usr / বিন / লেজ: পড়ার জন্য `+0 'খুলতে পারে না: এরকম কোনও ফাইল বা ডিরেক্টরি নেই
কোর্টিলস

দুঃখিত, একটি -c অনুপস্থিত ছিল। আমি উপরের উত্তরে এটি স্থির করেছি।
fschmitt

ঠিক আছে, আমি এর সাথে একটি সমস্যা দেখতে পাচ্ছি হ'ল কমান্ডটি (-f -> ফলো ...) শেষ করে না। একজনকে একটি সিগকিউইটি বা এর মতো কিছু জারি করতে হবে, যখন আপনি নিশ্চিত হন যে চূড়ান্তভাবে লেখাটি সম্পূর্ণ লিখিত আছে। বিটিডব্লিউ, আপনার লেজ সংস্করণ এবং এফএস এর উপর নির্ভর করে লেজ অভ্যন্তরীণভাবে ফাইলের পোলিং করে (যেমন প্রতি সেকেন্ডে)।
maxschlepzig

আমার একটি কেস হয়েছে: আমার এইচডিডি তে একটি ভিডিও ফাইল রেকর্ডিং, তবে আমি একটি বাহ্যিক ইউএসবি ফ্ল্যাশ মেমরির অনুলিপি করতে চেয়েছিলাম যাতে রেকর্ডিং বন্ধ হওয়ার সাথে সাথে আমি এটি কোনও ব্যক্তির হাতে তুলে দিতে পারি। আমি একাধিক চেষ্টা করেছিলাম rsync --appendএবং তারপরে চেক করেছি md5sumতবে ফাইলগুলি কখনও মেলেনি। tail -c +0আমার জন্য কাজ করেছে। আমি pv -pteraলেজের অগ্রগতিও নিরীক্ষণ করতাম , এটি আমাকে কাজ করে কিনা তা দেখার অনুমতি দেয়। এটি এখনও কাজ করেছে তা যাচাই করতে আমি এখনও এমডি 5 পরীক্ষা করে শেষ করি নি, তবে দুর্দান্ত দেখাচ্ছে।
আনফা

@ ইউএনএফএ দয়া করে নীচে উত্তর যুক্ত করে আপনার মন্তব্য আপডেট করুন (অর্থাত্ কোনও মন্তব্য নয়)।
Xofo

1

আমি এই কাজ করা উচিত:

user@clientA:~$ cat file | ssh server "cat > dest"

এবং তারপর

user@clientB:~$ ssh server "tail +0 -f dest" > file

আপনার থ্রুপুট দেখতে চাইলে পিভি কমান্ড যুক্ত করুন।


তুমি কি লিখতে tail -c +0চাও?
মিষ্টান্ন

1

আপনি এটির জন্য একটি ফিফো ব্যবহার করতে পারেন। সরলতার জন্য প্রথমে দুটি এক্সটার্ম জড়িত এসএসএস ছাড়াই:

এক্সটার্ম এ:

$ mkfifo fif
$ cat test.tar.gz | tee copy.tar.gz > fif

এক্সটার্ম বি তে:

$ cat fif > dest.tar.gz
$ cmp test.tar.gz dest.tar.gz
$ echo $?
0
$ cmp test.tar.gz copy.tar.gz
$ echo $?
0

Ssh এর সাহায্যে এই লাইনের সাথে কিছু হওয়া উচিত - সম্ভবত আপনাকে এস-এস-তে এস্কেপ-চরিত্রটি অক্ষম করতে হবে (-আর কেউ নেই):

ক্লায়েন্ট এ:

 $ ssh server mkfifo fif
 $ cat src.tar.gz | ssh "tee fif > copy.tar.gz"

ক্লায়েন্ট বি:

 $ ssh server cat fif > dest.tar.gz

1

আমার এমন পরিস্থিতি রয়েছে যা জিজ্ঞাসা করা মূল পোস্টারের মতো সমাধানের প্রয়োজন। আমি আমার কম্পিউটারে একটি হকি গেমটি এক জায়গায় রেকর্ড করছি এবং আমি এটি অন্য টিভিতে আমার টিভিতে দেখতে চাই। দুটি অবস্থানের মধ্যে লিঙ্কটি অনুলিপিটি প্রায় 1.3Mb / s এ যেতে দেয় এবং রেকর্ডিং ভিডিওটি 1.5Mb / s এর হয়। সুতরাং, আমি ফাইলটি রেকর্ডিং শুরু হওয়ার সাথে সাথে অনুলিপি করতে চাই। এইভাবে আমার 3 ঘন্টা গেমটি প্রায় 3.5 ঘন্টার মধ্যে অনুলিপি করবে। সুতরাং, আমি এটি অনুলিপি শুরু করার সাথে সাথে এটি অনুলিপি করি এবং এটি শুরু হওয়ার 30 মিনিটের পরে আমি এটি দেখা শুরু করতে পারি। তারপরে আমি কোনও বাধা ছাড়াই এটি দেখতে পারি, প্রায় আসল সময়ে। এটি, যতক্ষণ না আমি এটির নতুন ফাইলটি লেখার হিসাবে এটি অনুলিপি করতে পারি। আরএসআইএনসি এবং এসসিপি-এর মতো সরঞ্জামগুলির সমস্যাটি হ'ল তারা যখন আপনি অনুলিপিটি আরম্ভ করেন এবং একবার যখন সেই পরিমাণ ডেটা অনুলিপি করেন, তখন এটি প্রস্থান করে; এমনকি যদি সেই অনুলিপি চলাকালীন ফাইলটি দ্বিগুণেরও বেশি বেড়েছে। এবং, যদি, আমি এটি বন্ধ হয়ে যাওয়ার পরে এটি অনুলিপি করার জন্য কেবল একটি লুপে আরএসসিএনসি ব্যবহার করি, যখন পরবর্তী আরএসসিএনসিটি লক্ষ্য ফাইলটি পুনর্নির্মাণ করে এবং এটি আমার ভিডিও প্লেয়ারকে মেরে ফেলেছে এবং আমি এটি দেখা পুনরুদ্ধার করতে হবে এবং আমি যেখানেই ছিলাম দ্রুত এগিয়ে যেতে হবে প্রোগ্রামে যখন এটি হঠাৎ এটি হত্যা করে। আমি আরও ভাল সমাধান চেয়েছিলাম এবং আমি এর সন্ধান করতে সক্ষম হইনি, সুতরাং এর পরিবর্তে আমি এটি একসাথে তৈরি করেছি:

dd if=2031_20160514030000.mpg |
pv --size 4653819304 |
ssh -C -c arcfour,blowfish-cbc -p 5555 myserver.com 'dd of=/media/TV/2031_20160514030000.mpg'

সুতরাং এটি কি করে?

প্রথমত, ফাইলটি বড় হওয়ার সাথে সাথে কপি করার জন্য আমি dd ব্যবহার করি। যেহেতু ফাইলটি ডিডির চেয়ে দ্রুত বৃদ্ধি পায় এটি নেটওয়ার্কের মাধ্যমে প্রেরণ করতে পারে, তাই ডিডি কখনও ফাইলের শেষ পর্যন্ত ধরে না। এরপরে, আমি এটি "পাইপ ভিউয়ার (পিভি)" তে পাইপ করি এবং এই ফাইলগুলি সাধারণত কত বড় হয় তার উপর ভিত্তি করে ফাইলটি কত বড় হতে চলেছে তার একটি অনুমান আমি দিই। এটি প্রয়োজনীয় নয়, তবে আমি একটি অগ্রগতি মিটার দেখতে পছন্দ করি। তারপরে, আমি আমার এসএসএস সংযোগে স্ট্রিমটি পাইপ করি। কমপক্ষে ব্যয়বহুল এনক্রিপশনের জন্য (আবার কিছুটা গতি বাড়ানোর জন্য -C), এসএসএস সংযোগটি সংক্ষেপণের জন্য (নেটওয়ার্ক ব্যান্ডউইথকে হ্রাস করতে এবং এটির গতি বাড়ানোর চেষ্টা করার -c arcfour,blowfish-cbcজন্য ) ব্যবহার করে,-pএটি আমার ফায়ারওয়াল বন্দরের জন্য যা আমি গন্তব্যটিতে ব্যবহার করছি এবং ফাইলটি এটি গ্রহণ করার সাথে সাথে শেষ পর্যন্ত ssh টার্গেটে ডিডি কমান্ডটি চালায়। আমি খুশি বলে এই সমাধানটি দুর্দান্ত কাজ করে। ফাইলটি তৈরি হওয়ার সময় এবং খুব অল্প সময়ের মধ্যেই অনুলিপি করার সময় আমি হকি খেলাটি দেখতে পারি।


0

আমি নিশ্চিত না যে টেইল-ফ পদ্ধতিটি কাজ করে (যদিও এটি ফাইলের পাঠ্য হলে সম্ভবত তা ঘটে)। কারণটি হ'ল আমি জানি না কীভাবে টেল-ফ, এবং এসএফটিপি স্থানান্তর করে এবং মেটা তথ্যের উপর নির্ভর করে।

যদি এস.টি.পি.পি. মেটা সম্পর্কিত তথ্য প্রথমে স্থানান্তর করে এবং লেজ -f মেটা তথ্যের উপর নির্ভর করে এটির জন্য যে কোনও ফাইল নেই, তবে ইওএফ বা নাল দিয়ে লেজটি খারাপ হতে পারে।

আপনি যদি আপলোডের পথটি অর্থাৎ কম্পিউটার 1 কম্পিউটারে কম্পিউটার 2 আপলোড 3 কম্পিউটারে 3 আপলোডের বিষয়ে চিন্তা না করেন তবে আপনি sftp এর পরিবর্তে শীর্ষ ব্যবহারের বিটটোরেন্ট চেষ্টা করতে পারেন। মনে হচ্ছে এটিই এর জন্য নকশা করা হয়েছিল।


0

আপনি ফাইলটি শুরু থেকে পড়ার চেষ্টা করতে পারেন তবে আপনার নিশ্চিত হওয়া দরকার যে আপনি এটি কমপক্ষে একই গতি হিসাবে লিখতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.