ওভার এনএফএসের পরিবর্তে স্থানীয় চলমান আরএম-আরএফ ব্যবহার করা ভাল?


10

ডিরেক্টরিটিতে কোনও ডিরেক্টরি করার আগে ডিরেক্টরি রয়েছে এমন মেশিনে লগইন করতে rm -rf, বা rm -rfএনএফএসের উপরে কেবল ডিরেক্টরিটি তৈরি করার ক্ষেত্রে এটি কি অনেক সময় পার্থক্য করতে পারে ?

উত্তর:


11

অবশ্যই ssh ভাল হয়।

এনএফএস বিভিন্ন দূরবর্তী প্রক্রিয়া কল এবং ডেটা সিঙ্ক্রোনাইজেশন অপেক্ষার সময়গুলির সাথে একটি জটিল নেটওয়ার্ক প্রোটোকল ব্যবহার করে। Ssh এর ক্ষেত্রে এগুলি প্রয়োগ হয় না।

তদুপরি, অনেক তালা আছে। এনএফএস-এ ফাইল মুছে ফেলা এই পদ্ধতিতে কাজ করে:

  1. আপনার rmকমান্ড unlink()সিস্টেলকে দেয়
  2. nfs ড্রাইভার এটিকে একটি সানরপিসি অনুরোধে রূপান্তরিত করে, এটিকে এনএফএস সার্ভারে প্রেরণ করে
  3. এনএফএস সার্ভার এই সানরপিসি অনুরোধটিকে একটি unlink()কলে ফিরিয়ে দেয়
  4. unlink()দূরবর্তী দিকে এই কলটি কার্যকর করে
  5. এটি সফল হওয়ার পরে, ক্লায়েন্টকে "ঠিক আছে, এটি হয়ে গেছে" এর সমতুল্য আরপিসি উত্তর বার্তা দেয়
  6. ক্লায়েন্ট-সাইডের কার্নেল ড্রাইভার এটিকে unlink()আপনার আসল কলের প্রস্থান কোড 0 এ রূপান্তর করেrm
  7. rm পরের ফাইলটিতে পুনরাবৃত্তি হয়, যাও 1

এখন, গুরুত্বপূর্ণ বিষয় হল: 2-7 মধ্যে, rmঅপেক্ষা করতে হয়েছে। এটি পরের unlink()কলটিকে অযৌক্তিকভাবে প্রেরণ করতে পারে , তবে এটি ইভেন্ট-ওরিয়েন্টেড সরঞ্জাম নয়, একক থ্রেডযুক্ত। এটি যদি পারত তবে এটির জন্য এখনও জটিল এনএফএসের মাউন্ট ফ্ল্যাগের প্রয়োজন হবে। ফলাফল না পাওয়া পর্যন্ত এটি অপেক্ষা করে।

এনএফএস - এবং যে কোনও নেটওয়ার্ক ফাইল সিস্টেম সর্বদা খুব ধীর হয়।


অনেক ক্ষেত্রে, আপনি একটি কৌশল দিয়ে পুনরাবৃত্ত মোছার পরিমাণটি অর্ধ-অসীম গতি করতে পারেন:

  1. প্রথমে ডিরেক্টরিটিকে অন্য নামে ( mv -vf oldfilms oldfilms-) নামান
  2. পটভূমিতে মুছুন ( rm -rf oldfilms- &)

অনেকগুলি (তবে সমস্ত নয়) দিক থেকে এই ডিরেক্টরি অপসারণটি এমনভাবে দেখাবে যা বাস্তবভাবে শূন্য সময়ে ঘটেছিল।


এক্সটেনশন: যেমন @ এল.প্যাসকাদো তাঁর দুর্দান্ত মন্তব্যে উল্লেখ করেছেন, আসলে 2-7 কে কোনও ফাইলের জন্য 3x চালাতে হবে :

  • এটি ফাইল বা ডিরেক্টরি কিনা তা নির্ধারণ করতে (একটি lstat()সিস্টোল সহ),
  • তারপরে সেই অনুযায়ী করুন do সাধারণ ফাইলগুলির unlink()ক্ষেত্রে, ডিরেক্টরিগুলির ক্ষেত্রে, এর মধ্যে opendir()সমস্ত ফাইল / ডিরেক্টরি মুছে ফেলা হয়, তারপরে closedir(), শেষ পর্যন্ত rmdir()
  • অবশেষে, readdir()কল সহ পরবর্তী ডিরেক্টরি এন্ট্রিতে পুনরাবৃত্তি করুন।

এটির জন্য ফাইলগুলির জন্য 3 এনএফএস আরপিসি কমান্ড এবং ডিরেক্টরিগুলির জন্য অতিরিক্ত 3 টি প্রয়োজন।


2
এনএফএসের ঘটনাটি আরও খারাপ। যেহেতু প্রশ্নের -rপতাকার উল্লেখ rmরয়েছে, প্রথমে ফাইলটি ডিরেক্টরি ( lstatএনএফএসের মাধ্যমে) কিনা তা opendirখতিয়ে দেখতে হবে, এটি (এনএফএসের মাধ্যমে) খুলুন , এর বিষয়বস্তু ( readdirএনএফএসের মাধ্যমে) পড়ুন, এবং কেবল তখনই ভিতরে থাকা প্রতিটি ফাইলের উত্তরে বর্ণিত প্রকৃত মুছে ফেলা সম্পাদন করতে হবে এবং সাব-ডিরেক্টরিতে পুনরাবৃত্তি করা, বন্ধ ডিরেক্টরি (এনএফএস এর closedirমাধ্যমে), এবং তারপরে পুনরাবৃত্তি করুন, প্রতিটি পাওয়া দিরের জন্য ।
el.pescado

5

হ্যাঁ. ভাল হয়ত. এটা নির্ভর করে. সংখ্যক ফাইল এবং ডিরেক্টরিগুলির জন্য, এটি খুব বেশি পার্থক্য করতে পারে না।

এনএফএস মাউন্ট করা ডিরেক্টরিতে ফাইল অপারেশন বাল্কে করা ধীর গতিতে। আপনার যদি নিজেই এনএফএস সার্ভারে লগ ইন করার এবং প্রকৃত ডিরেক্টরিতে সেগুলি করার সুযোগ থাকে তবে এটি আরও দ্রুত হবে।

আসুন আমি সিভিএস থেকে চেক আউট করেছি এবং এনএফএসের উপরে মাউন্ট করেছি ওপেনবিএসডি পোর্ট সংগ্রহগুলি সরিয়ে এটি পরীক্ষা করে দেখি:

এনএফএস সার্ভারে:

$ cd /export/shared/ports

$ du -hs .
2.6G    .

$ find . | wc -l
  179688

$ time rm -rf /export/shared/ports/*
0m20.87s real     0m00.12s user     0m04.62s system

ক্লায়েন্টে (ব্যাকআপ থেকে মূল ফাইলগুলি পুনরুদ্ধার করার পরে):

$ time rm -rf /usr/ports/*
6m49.73s real     0m01.55s user     1m08.96s system
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.