একটি এনএফএসের উপরে ফ্লক (2) বনাম এফসিএনটিএল (2)


19

পার্ল x.x ডকুমেন্টেশনটিতে বলা হয়েছে যে এর ফ্লক (..) প্রয়োগের ফলে নীচের একটি নেটিভ কল ব্যবহার করা হবে, ১ থেকে শুরু হয়ে এবং যদি উপলভ্য না হয় তবে ৩ এর দিকে কাজ করবে:

  1. ঝাঁক (2)
  2. fcntl (2)
  3. lockf (3)

সেটা ঠিক আছে. তবে, আপনি তাদের অস্বীকৃতিটি লক্ষ্য করে থাকতে পারেন যে কোনও এনএফএসের মাধ্যমে ঝাঁক (2) ব্যবহার করা উচিত নয়। পার্ককে ঝাঁক (2) ব্যবহার করতে বাধ্য করতে ডকটি একটি -উড_ফ্লোক পতাকা ব্যবহার করার পরামর্শ দেয়। ফ্লকের ম্যান পৃষ্ঠা (২) (রেডহেটে) এনএফএস ইস্যু সম্পর্কে একই ধরণের দাবি অস্বীকার করে।

আমার প্রশ্ন, কেন?!?!? আমি কোনও গভীরতার নিবন্ধ বা হ'ল ঝাঁক (2) এর ব্যাখ্যা কোনও এনএফএসের তুলনায় অনিরাপদ খুঁজে পাচ্ছি না।

আমি সি এবং পার্লে দুটি টেস্ট স্ক্রিপ্ট লিখেছি, রেডহাট (যেখানে ফ্লক (2) ব্যবহৃত হচ্ছে) এবং সোলারিসে (যেখানে fcntl (2) ব্যবহৃত হচ্ছে) উভয় ক্ষেত্রে। আমি নিশ্চিত হয়েছি যে পার্ল যথাক্রমে ঝাঁক (2) এবং fcntl (2) ব্যবহার করছে ensure যেখানে কোনও লক সম্মানিত হচ্ছিল না তাতে আমি কোনও প্রতিলিপি করতে পারি না! কি দেয়??

উত্তর:


3

লেনার্ট পোয়েটারিং সম্প্রতি লিনাক্স ফাইল সিস্টেম লকিং আচরণে কিছু খনন করেছেন, যা এনএফএসের উপর লক করার জন্য বিশেষ করে গোলাপী ছবি আঁকেন না (বিশেষত ফলোআপ তিনি পোস্টের নীচে লিঙ্ক করেছেন)।

http://0pointer.de/blog/projects/locking.html


1
এটি হ'ল সঠিক ধরণের তথ্য যা আমি সন্ধান করছিলাম। ধন্যবাদ! বেশ কয়েক সপ্তাহের তদন্তের পরে, এটি একটি খুব অনুরূপ রেজোলিউশনে এসেছিল আমি, তবে আমার সন্দেহগুলি নিশ্চিত করার জন্য একটি নিবন্ধ পড়ে (এবং অন্যদের পরামর্শ দেয়) এটি দুর্দান্ত। এই পৃষ্ঠার মন্তব্যের লিঙ্কটিও
Jmoney38

15

আমি নিশ্চিত যে আপনি উত্তরাধিকার সংক্রান্ত উদ্বেগগুলি দেখছেন pretty স্মরণ করুন যে পার্ল 5 ম্যানুয়ালটি 1994 সালে প্রকাশিত হয়েছিল এবং এটি 1991 সাল থেকে পার্ল 4 এর ম্যানুয়ালটির একটি সম্পাদনা ছিল those সেই দিনগুলিতে সম্ভবত এটি সম্ভবত নামকরণ করা নাইটমারে ফাইল সিস্টেম সম্পর্কে বলা যেতে পারে যে "ভালুক নাচিয়ে যে কতটা ভাল নাচে বিস্মিত, কিন্তু এটি একেবারে নাচ "।

1991 এর যুগে এনএফএস 2 ধীরে ধীরে সূর্যের বাইরে অন্য প্ল্যাটফর্মে ক্রল হয়ে আসছিল এবং তুলনামূলকভাবে অপরিশোধিত ছিল। সুরক্ষা মডেলটি মূলত অস্তিত্বহীন ছিল (একটি ক্লায়েন্ট মেশিনের মূলটি একটি এনএফএস মাউন্টের সম্পূর্ণ বিষয়বস্তু পড়তে পারে) এবং লক করা - এনএফএস.লকডের মাধ্যমে - পরীক্ষামূলক এই পক্ষ ছিল। আপনি যদি দুটি পৃথকভাবে কথিত আন্তঃযোগাযোগ্য বাস্তবায়নের মধ্যবর্তী সময়ে ঝাঁক শব্দার্থকভাবে সঠিকভাবে কাজ করার আশা করতে বোকামি হয়ে থাকতেন। সেই সময়ে কোক্সের প্রভাবশালী ইথারনেট পিএইচওয়াই ছিল যা ব্যবহার করার ক্ষেত্রে অনেক নেটওয়ার্ক ব্যবহারকারী কখনওই অসন্তুষ্টি করেন নি (আপনি কী বোঝাতে চেয়েছিলেন যে আপনি 50𝛀 টারমিনেশন রেজিস্টার লাগাতে ভুলে গিয়েছিলেন?) যদি এটি আপনাকে যদি তখন ইন্ট্রনেটগুলির অবস্থার উপর আরও ভাল গ্রিপ দেয়।

ল্যারি ওয়াল এবং ক্রুদের তত্কালীন এনএফএস লক্সের সঠিকতা সম্পর্কে হতাশাবাদী অনুমান করার সমস্ত কারণ ছিল এবং ভবিষ্যতের কোড জকিরা অপসারণ করতে ঘৃণ্য যে প্রতিরক্ষামূলক প্রোগ্রামিং কারণ এটি ত্রুটির অভাবে প্রমাণ করা এত কঠিন পুরানো কোডটি অপসারণ যা একটি লিগ্যাসি সিস্টেমের সাথে আন্তঃব্যবহারে পুনরায় চালু করা হয়েছে যা আপনি কখনও শুনেন নি।

তার পর থেকে, এনএফএসের যথেষ্ট উন্নতি হয়েছে এবং লকড লিনাক্স ২. of কার্নেলের বৈশিষ্ট্যটিতে স্থানান্তরিত হয়েছে। 2003+ সিস্টেমের সংগ্রহের জন্য, এনএফএস ফাইল লক করা সম্ভবত বিশ্বাসযোগ্য হতে পারে, বিশেষত যদি আপনার অ্যাপ্লিকেশনের মধ্যে এটি বেশিরভাগ প্ল্যাটফর্মের মধ্যে চলতে পারে তবে এটি ভালভাবে পরীক্ষা করা হয়।

উপরের সমস্তগুলি মেমোরি থেকে আঁকড়ে ধরা হয়েছিল এবং সম্ভবত গবেষণার মাধ্যমে প্রমাণ করা যেতে পারে (যেমন: http://nfs.sourceforge.net/ ) তবে প্রমাণ হিসাবে - যেমন তারা বলেছে - লকটিতে রয়েছে, এবং যদি আপনি এটি পরীক্ষা না করেন , এটি ভাঙ্গা অনুমান করা হয়।


এটি একটি দুর্দান্ত বিশ্লেষণ। আসলে, আমি এখন পর্যন্ত একই সিদ্ধান্তে এসেছি। আপনি সেই লিঙ্কটি পোস্ট করার পরে আমি আবার এনএফএস সোর্সফোজের পৃষ্ঠাতে পড়েছি এবং অবশেষে আমি যা খুঁজছি তা পেয়েছি! এখানে সরাসরি ঘোড়ার মুখ থেকে গভীরতর বিশ্লেষণ করা হল!
Jmoney38

2
ওহো, আমি এন্টার টিপুন ... এনএফএস.সোর্সফোর্জন.নেটে যান , নীচের দিকে ডি 10 বিভাগে এই সমস্যাটি বিশদভাবে আলোচনা করা হয়েছে।
Jmoney38

3

অন্য একটি, সরাসরি লিনাক্স-এনএফএস এফকিউ থেকে: এনএফএস.এসফ নেট

আমি একাধিক ক্লায়েন্টে ব্যবহৃত ফাইলগুলি লক করতে ফ্লক () / BSD লকগুলি ব্যবহার করার চেষ্টা করছি, তবে ফাইলগুলি দূষিত হয়ে যায়। কিভাবে? এ। ফ্লক () / বিএসডি লকগুলি কেবলমাত্র স্থানীয়ভাবে লিনাক্স এনএফএস ক্লায়েন্টগুলিতে 2.6.12 এর আগে কাজ করে। ফাইল লকগুলি অন্য ক্লায়েন্টদের কাছে দৃশ্যমান কিনা তা নিশ্চিত করতে fcntl () / POSIX লক ব্যবহার করুন।

একটি এনএফএস ফাইলে অ্যাক্সেসকে সিরিয়ালাইজ করার কয়েকটি উপায় এখানে রয়েছে।

Fcntl () / POSIX লকিং API ব্যবহার করুন। এই ধরণের লকিং এনএলএম প্রোটোকলের মাধ্যমে বা এনএফএসভি 4 এর মাধ্যমে একাধিক ক্লায়েন্ট জুড়ে বাইট-রেঞ্জ লকিং সরবরাহ করে। একটি পৃথক লকফিল ব্যবহার করুন এবং এর সাথে কঠোর লিঙ্ক তৈরি করুন। ক্রিয়েট (2) ম্যান পৃষ্ঠার ও_এক্সসিএল বিভাগে বর্ণনাটি দেখুন। এটি লক্ষণীয় যে 2.6 কার্নেলগুলির প্রথমদিকে, O_EXCL তৈরি করা লিনাক্স এনএফএস ক্লায়েন্টগুলিতে পারমাণবিক ছিল না। আপনি যদি ২.6.৫ এর চেয়ে নতুন কার্নেল চালা না করেন তবে O_EXCL একাধিক এনএফএস ক্লায়েন্টের মধ্যে পারমাণবিক আচরণ তৈরি এবং প্রত্যাশা করবেন না।

এটি একটি পরিচিত সমস্যা যা পার্ল ডিফল্টরূপে ফ্লক () / BSD লকিং ব্যবহার করে। এটি অন্যান্য অপারেটিং সিস্টেমগুলি যেমন সোলারিস থেকে পোর্ট করা প্রোগ্রামগুলি ভেঙে ফেলতে পারে যা আশা করে যে পল / বিএসডি লকগুলি পসিএক্স লক্সের মতো কাজ করবে।

লিনাক্সে, হার্ড লিঙ্কের পরিবর্তে ফাইল লকিং ব্যবহার করে ক্লায়েন্টের ক্যাশে সার্ভারের সাথে চেকপয়েন্টে যুক্ত করার অতিরিক্ত সুবিধা রয়েছে। যখন কোনও ফাইল লক অর্জিত হয়, ক্লায়েন্ট সেই ফাইলটির জন্য পৃষ্ঠা ক্যাশেটি ফ্লাশ করে দেবে যাতে পরবর্তী কোনও পাঠক সার্ভার থেকে নতুন ডেটা পান। যখন কোনও ফাইল লক প্রকাশ হয়, তখন সেই ক্লায়েন্টের ফাইলটিতে যে কোনও পরিবর্তন ঘটে তা লকটি প্রকাশের আগেই সার্ভারে ফিরে যায় যাতে সেই ফাইলটি লক করার অপেক্ষায় থাকা অন্যান্য ক্লায়েন্টরা পরিবর্তনগুলি দেখতে পারে।

২.6.১২ এ এনএফএস ক্লায়েন্ট পসিক্স বাইট রেঞ্জ লকের ক্ষেত্রে বিএসডি-স্টাইলের লকগুলি অনুকরণ করে এনএফএস ফাইলগুলিতে ফ্লক () / বিএসডি লক্সের জন্য সমর্থন সরবরাহ করে। অন্যান্য এনএফএস ক্লায়েন্ট যারা একই ইমুলেশন মেকানিজম ব্যবহার করে বা fcntl () / POSIX লক ব্যবহার করে, তারপরে লিনাক্স এনএফএস ক্লায়েন্ট দেখতে পারা একই লক দেখতে পাবে।

স্থানীয় লিনাক্স ফাইল সিস্টেমে, পসিক্স লক এবং বিএসডি লকগুলি একে অপরের কাছে অদৃশ্য। সুতরাং, এই অনুকরণের কারণে, একটি লিনাক্স এনএফএস সার্ভারে চলমান অ্যাপ্লিকেশনগুলি এখনও এনএফএস ক্লায়েন্টদের দ্বারা লক করা ফাইলগুলি একটি fcntl () / POSIX লক দ্বারা লক হিসাবে দেখতে পাবে, ক্লায়েন্টের অ্যাপ্লিকেশনটি BSD- স্টাইল ব্যবহার করছে বা একটি পসিক্স- শৈলী লক সার্ভার অ্যাপ্লিকেশন যদি ফ্লক () বিএসডি লক ব্যবহার করে তবে এটি এনএফএস ক্লায়েন্টদের ব্যবহৃত লকগুলি দেখতে পাবে না।


সুতরাং দুটি এনএফএস ক্লায়েন্ট কী কার্নেল ৩.১৩ চালাচ্ছেন? * একে অপরের পল (গুলি) দেখুন?
পুনরায় পোস্টার

আমি যদি সঠিকভাবে বুঝতে পারি তবে উত্তরটি নেই। যদি না আমি কিছু মিস করি, flockনা করে, না করে এবং এনএফএস মাউন্টগুলিতে লক না করে।
ড্যানিয়েল ফারেল

এটি কমপক্ষে এনএফএস 4 এ করে।
rjh

3

এটি এখন পুরানো। এনএফএস 4 প্রোটোকলের অভ্যন্তরে লকিং সমর্থন করে (কোনও লকড ডিমন বা আরপিসি কলব্যাক প্রক্রিয়া প্রয়োজন নয়) এবং পার্লের পদ্ধতিটি কার্যকরভাবে flock()কাজ করে - আমরা এটি উত্পাদনে ব্যবহার করছি।

কার্নেলের খুব পুরানো সংস্করণগুলি flockএনএসএফ-এ নো-অপ্প হিসাবে প্রয়োগ করা হয়েছে (সিস্কাল), এবং বাইট রেঞ্জ লকিংয়ের মতো অন্যান্য জিনিসগুলি যথাযথভাবে সমর্থনযোগ্য নয়। হিস্টিরিয়া এখান থেকেই আসে।


ইঙ্গিতটির জন্য অনেক ধন্যবাদ। এনএফএস 4 দিয়ে মাউন্ট করা আমার সমস্যার সমাধান করেছে। Fstab কনফিগারেশনটি সঠিকভাবে পাওয়ার জন্য অ্যাক্সেস.redhat.com/docamentation/en-us/red_hat_enterprise_linux/… অনুসরণ করেছে
মারাস্পিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.