লিনাক্সের ফাইল সম্পাদনাগুলি কি সরাসরি ডিস্কে সংরক্ষণ করা হয়?


57

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

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

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

প্রশ্নটি স্পষ্টতই সেই ফাইল সিস্টেমগুলিকে বোঝায় যেগুলি তথ্য সংরক্ষণের জন্য একটি ডিস্ক রয়েছে, যদিও কোনও স্পষ্টতা বা তুলনা ভালভাবে গৃহীত হয়েছে।


8
এফএও: ভোটের সারি পর্যালোচকদের বন্ধ করুন। এটি উপকরণ শেখার জন্য কোনও অনুরোধ নয়Unix.meta.stackexchange.com/q/3892/22812
অ্যান্টনি জি - মনিকার পক্ষে ন্যায়বিচার

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

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

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

3
এটি সত্য যে এটি যেমন কিছুটা বিস্তৃত হতে পারে, @ জেফশ্যাচলার; আমি এটি কিছুটা সম্পাদনা করার চেষ্টা করতে যাচ্ছি; তবে, সত্যি বলতে যদি সাইটটি এই ধরণের প্রশ্নের জন্য না হয়, যা সরাসরি লিনাক্সের কার্যকারিতা সম্বোধন করে, তবে এটি কীসের জন্য?
জুয়ানরোকামন্ডে

উত্তর:


70

আমি যদি কোনও ফাইল সম্পাদনা করে সংরক্ষণ করার সাথে সাথে কম্পিউটারটি বন্ধ করে রাখি তবে আমার পরিবর্তনগুলি সম্ভবত হারিয়ে যাবে?

তারা হতে পারে। আমি "খুব সম্ভবত" বলব না, তবে সম্ভাবনা অনেকগুলি বিষয়ের উপর নির্ভর করে।


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

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


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

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

এ ছাড়াও fsync(), sync()এবং syncfs()সিস্টেম কলগুলিও রয়েছে যা সিস্টেমকে নিশ্চিত করে যে সমস্ত সিস্টেম-ব্যাপী একটি নির্দিষ্ট ফাইল সিস্টেমে সমস্ত লেখার বা সমস্ত লেখাগুলি ডিস্ককে আঘাত করেছে তা নিশ্চিত করতে বলে। ইউটিলিটি syncতাদের কল করতে ব্যবহার করা যেতে পারে।

তারপর এর রয়েছে O_DIRECTপতাকাopen() , যা অনুমিত হয় "ইনপুট / আউটপুট প্রয়োজন এবং এই ফাইল থেকে ক্যাশে প্রভাব হ্রাস করার চেষ্টা করুন।" ক্যাচিং অপসারণ কার্যকারিতা হ্রাস করে, তাই এগুলি বেশিরভাগ অ্যাপ্লিকেশন (ডাটাবেস) দ্বারা ব্যবহৃত হয় যা তাদের নিজস্ব ক্যাশে করে এবং এটির নিয়ন্ত্রণে থাকতে চায়। ( O_DIRECTবিষয়গুলি ছাড়াই নয়, ম্যান পেজে এটি সম্পর্কে মন্তব্যগুলি কিছুটা মজাদার।


পাওয়ার-আউট-এ কী ঘটে তা ফাইল সিস্টেমের উপরও নির্ভর করে। এটি কেবল যে ফাইল ডেটা সম্পর্কে আপনার উদ্বেগ করা উচিত তা নয়, ফাইল সিস্টেম মেটাডেটা। ডিস্কে ফাইল ডেটা থাকা খুব বেশি ব্যবহার হয় না যদি আপনি এটি খুঁজে না পান। একটি ফাইলকে আরও বড় আকারে প্রসারিত করার জন্য নতুন ডেটা ব্লক বরাদ্দ করা দরকার এবং সেগুলি কোথাও চিহ্নিত করা দরকার।

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


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


আপনার some cases whereলিঙ্কটি এ জাতীয় কোনও ক্ষেত্রে বলার জন্য উপস্থিত হয় না - পরিবর্তে এটি বলছে যে অ্যাপসটি ব্যবহার না করার সময় সমস্যা ছিল fsync। বা আপনি যে বিষয়গুলি দেখিয়েছেন সেগুলি খুঁজে পাওয়ার জন্য আমার মন্তব্যগুলির দিকে নজর দেওয়া উচিত?
রুসলান

1
syncসমস্ত ক্যাশে ফ্লাশ করার জন্য কার্নেলটিকে পোঁচ দেওয়ার জন্য আপনি সিস্টেম শেল কমান্ড হিসাবে সরাসরি ব্যবহার করতে পারেন ।
ক্র্যাসিক

3
অনুশীলনে, একটি হালকা লোড সিস্টেমে, ফাইলটি মুহুর্তের মধ্যে ডিস্কটিতে আঘাত করবে। কেবলমাত্র যদি আপনার সম্পাদক fsync()ফাইল লেখার পরে ব্যবহার করেন। এর জন্য লিনাক্স ডিফল্ট /proc/sys/vm/dirty_writeback_centisecs500 (5 সেকেন্ড), এবং পাওয়ারটপ এটিকে 1500 (15 সেকেন্ড) এ সেট করার পরামর্শ দেয়। ( kernel.org/doc/Docamentation/sysctl/vm.txt )। হালকাভাবে লোড হওয়া সিস্টেমে, কার্নেলটি কেবল পৃষ্ঠা-ক্যাশে একেবারে নোংরা বসতে দেবে যা write()ডিস্কে ফ্লাশ করার অনেক আগে, যেখানে এটি মুছে ফেলা হয়েছে বা শীঘ্রই আবার সংশোধিত হবে সেই ক্ষেত্রে উপযুক্ত হবে।
পিটার কর্ডস

2
+1 কারণ ড্রাইভ নিজেই ওএসের সাথে একই মিথ্যা তৈরি করতে পারে । আমার উপলব্ধি হ'ল এই ধরণের ক্যাশে করে চালানো ড্রাইভেগুলির পর্যাপ্ত শক্তি ক্যাপাসিট্যান্স রয়েছে যাতে তাদের ক্যাশে এমনকি বিপর্যয়কর ক্ষয়ক্ষতি হ্রাসেও সংরক্ষণ করা যায়। এটি ওএস-নির্দিষ্ট নয়; উইন্ডোজটির ব্যবহারকারীদের প্লাগ-ইনগল করার আগে ক্যাশে ফ্লাশিং সম্পাদনের জন্য "নিরাপদে ইউএসবি সরান" প্রক্রিয়া রয়েছে।
স্টুড

1
@ স্টুডোগ, আমি এতটা নিশ্চিত নই, বিশেষত ভোক্তা হার্ডওয়্যারে on তবে এটি কেবল প্যারানাইয়া হতে পারে। এটি পরীক্ষা করা আকর্ষণীয় হবে, যদিও।
ইলক্কাচু

14

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

কয়েকটি উদাহরণ হ'ল:

  • tmpfs, একটি ফাইল সিস্টেম যা কেবল র‌্যামে বিদ্যমান (বা আরও স্পষ্টভাবে, বাফার ক্যাশে)
  • ramfs, একটি ফাইল সিস্টেম যা কেবল র‌্যামে বিদ্যমান
  • যে কোনও নেটওয়ার্ক ফাইল সিস্টেম (এনএফএস, সিআইএফএস / এসএমবি, এএফএস, এএফপি,…)
  • কোনো ভার্চুয়াল ফাইল সিস্টেম ( sysfs, procfs, devfs, shmfs, ...)

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


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

3
@ পাইপ যেমন উল্লেখ করেছে, এমন ফাইলসীম রয়েছে যেগুলি ডিস্কে ডেটা সংরক্ষণ করে না কারণ তারা ডেটা সংরক্ষণের জন্য ডিস্ক ব্যবহার করে না, তাদের কাছে যা আছে তারা সরাসরি এটিকে সংরক্ষণ করতে পারে কি না সে বিষয়ে সিদ্ধান্ত নেয় না। তবে উত্তরটি আকর্ষণীয় দেখাচ্ছে
জুয়ানরোকামন্ডে

1
@ পাইপ আমি নিশ্চিত যে "বেসসারভিজারিং" শব্দটি ব্যবহার করা হচ্ছে বেসসারিজারিং! কর্তৃপক্ষের সাথে জার্মান বেসারউইজার হিসাবে বলছি।
ভোলকার সিগেল

11

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

বেশিরভাগ সিস্টেমে লেখাগুলিকে সিঙ্ক্রোনাস করার বিকল্প দেয়। এর অর্থ হ'ল ধীরে ধীরে ব্যয় করে কোনও অ্যাপ্লিকেশনটির সাফল্যের নিশ্চয়তা পাওয়ার আগে ডেটা ডিস্কে থাকবে।

সংক্ষেপে, আপনার কম্পিউটারকে যথাযথভাবে বন্ধ করে দেওয়ার এবং ইউএসবি স্টোরেজটি অপসারণের জন্য যথাযথভাবে প্রস্তুত করার একটি কারণ রয়েছে।


ধন্যবাদ তোমার উত্তরের জন্য! লিনাক্সে কোনও নির্দিষ্ট ফাইলের ডিস্ক লেখার জন্য জোর করার কোনও উপায় আছে কি? কোনও টিউটোরিয়াল বা ডক্স পৃষ্ঠার লিঙ্ক হতে পারে, এমনকি একটি এসই প্রশ্নও ঠিক হবে :)
জুয়ানরোকামন্ডে

4
আপনি fsync()কোনও প্রোগ্রাম থেকে সিস্কল দিয়ে ফাইলটি লিখতে বাধ্য করতে পারেন । শেল থেকে, syncকমান্ডটি ব্যবহার করুন ।
র‌্যালফ্রেডল

2
লিনাক্সের কয়েকটি সংস্করণে কিছু ফাইল সিস্টেম রয়েছে (বা কমপক্ষে ছিল), যেখানে syncকোনও অপ-বিকল্প হিসাবে প্রয়োগ করা হয়েছিল। এমনকি ফাইল সিস্টেম যে জন্য না সঠিকভাবে বাস্তবায়ন sync, এখনও সমস্যা হল কিছু ডিস্ক firmwares বাস্তবায়ন হয় FLUSH CACHEকোন সমিতি বা অবিলম্বে তা থেকে ফিরে যান এবং ব্যাকগ্রাউন্ডে এটা সঞ্চালন।
Jörg ডব্লু মিট্টাগ

9

1. ফ্ল্যাশ-ভিত্তিক স্টোরেজ

এটি কি ডিস্কের ধরণের (প্রচলিত হার্ড ড্রাইভ বনাম সলিড-স্টেট ডিস্ক) বা এমন কোনও ভেরিয়েবলের উপর নির্ভর করে যা আমি অবগত নই? এটি কি কেবল লিনাক্সে ঘটে (যদি তা হয়) তবে এটি অন্যান্য ওএসে উপস্থিত রয়েছে?

আপনার পছন্দ থাকলে, ফ্ল্যাশ-ভিত্তিক স্টোরেজটিকে ক্লিন শাটডাউন না করে শক্তি হারাতে দেওয়া উচিত নয়।

এসডি কার্ডের মতো স্বল্পমূল্যের স্টোরেজে, আপনি পুরো মুছে ফেলা (4KB এর চেয়ে কয়েকগুণ বেশি) হারানোর আশা করতে পারেন, এমন ফাইল হারাবেন যা বিভিন্ন ফাইল বা ফাইল সিস্টেমের প্রয়োজনীয় কাঠামোর অন্তর্ভুক্ত হতে পারে।

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

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

2017: https://dl.acm.org/citation.cfm?id=2992782&preflayout=flat

২০১৩: https://www.usenix.org/system/files/conferences/fast13/fast13-final80.pdf?wptouch_preview_theme=en सक्षम

2. হার্ড ডিস্ক ড্রাইভ স্পিনিং

স্পিনিং এইচডিডিগুলির বিভিন্ন বৈশিষ্ট্য রয়েছে। সুরক্ষা এবং সরলতার জন্য, আমি ধরে নিচ্ছি যে তাদের ফ্ল্যাশ-ভিত্তিক স্টোরেজের মতো ব্যবহারিক অনিশ্চয়তা রয়েছে।

আপনার কাছে সুনির্দিষ্ট প্রমাণ না থাকলে, যা আপনি পরিষ্কারভাবে ব্যবহার করেন না। এইচডিডি স্পিনিংয়ের জন্য আমার তুলনামূলক পরিসংখ্যান নেই।

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

তবে আমি নিশ্চিত নই যে লিনাক্স ফাইল সিস্টেমগুলি সমস্ত ক্ষেত্রে এটি অর্জন করে, বা এটি এমনকি সম্ভব কিনা।

এই ধরণের ত্রুটির পরে পরবর্তী বুটের জন্য একটি ফাইল সিস্টেম মেরামতের প্রয়োজন হতে পারে। এটি লিনাক্স হ'ল এটি সম্ভব যে ফাইল সিস্টেম মেরামত এমন কিছু প্রশ্ন জিজ্ঞাসা করবে যা আপনি বুঝতে পারছেন না, যেখানে আপনি কেবল Y টিপতে পারেন এবং আশা করেন যে এটি নিজেই সমাধান হয়ে যাবে।

২.১ যদি আপনি না জানেন তবে fsync () চুক্তিটি কী

Fsync () চুক্তিটি সুসংবাদ এবং খারাপ খবর উভয়েরই উত্স। আপনাকে অবশ্যই সুখবরটি বুঝতে হবে।

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

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

সুতরাং, অ্যাপ্লিকেশনগুলি উপস্থিত রয়েছে যা fsync () সঠিকভাবে ব্যবহার করে না।

এই ফাইল সিস্টেমের পরবর্তী সংস্করণটি সাধারণত fsync () হ্যাং এড়ায় - একই সাথে এটি fsync () এর সঠিক ব্যবহারের উপর নির্ভর করতে শুরু করে।

এই সব বেশ খারাপ। এই ইতিহাস বোঝা সম্ভবত বরখাস্ত সুর এবং উদ্দীপনা দ্বারা সহায়তা করে না যা অনেকগুলি বিরোধী কার্নেল বিকাশকারীদের দ্বারা ব্যবহৃত হয়েছিল।

বর্তমান রেজোলিউশনটি হ'ল বর্তমান সর্বাধিক জনপ্রিয় লিনাক্স ফাইল সিস্টেম পুনরায় নাম () প্যাটার্নকে সমর্থন করতে ডিফল্ট fsync () এর প্রয়োজন ছাড়াইপূর্ববর্তী সংস্করণটির সাথে "বাগের জন্য বাগ সামঞ্জস্য" প্রয়োগ করে। এটি মাউন্ট বিকল্পের সাথে অক্ষম করা যেতে পারে noauto_da_alloc

এটি সম্পূর্ণ সুরক্ষা নয়। মূলত এটি পুনর্নবীকরণের সময় () সময়ে মুলতুবি থাকা আইওকে ফ্লাশ করে তবে নাম পরিবর্তন করার আগে আইওর সম্পূর্ণ হওয়ার জন্য এটি অপেক্ষা করে না। এটি উদাহরণস্বরূপ 60 সেকেন্ডের বিপদ উইন্ডোর তুলনায় অনেক ভাল! আরও দেখুন উত্তর কোনটি ফাইল সিস্টেম যখন পুনঃনামকরণ সঙ্গে একটি বিদ্যমান ফাইল প্রতিস্থাপন ক্র্যাশ-নিরাপত্তার জন্য fsync () প্রয়োজন ()?

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


5

হালকাভাবে লোড হওয়া সিস্টেমে, কার্নেল সর্বাধিক লিখিত ফাইল ডেটা পৃষ্ঠা-ক্যাশে বসতে দেবে সম্ভবত write()এটির পরে যেখানে এটি আবার মুছে ফেলা হয় বা আবার সংশোধিত হবে সেই ক্ষেত্রে উপযুক্ত হবে a

লিনাক্সের dirty_expire_centisecsডিফল্ট 3000 (30 সেকেন্ড) হয় এবং সদ্য-লিখিত ডেটা "মেয়াদ শেষ" হওয়ার কত আগে তা নিয়ন্ত্রণ করে। ( Https://lwn.net/Articles/322823/ দেখুন )।

দেখুন https://www.kernel.org/doc/Documentation/sysctl/vm.txt আরো সম্পর্কিত tunables জন্য, এবং আরো প্রচুর জন্য google। (যেমন গুগল অন dirty_writeback_centisecs)।

এর জন্য লিনাক্স ডিফল্ট /proc/sys/vm/dirty_writeback_centisecs500 (5 সেকেন্ড) , এবং পাওয়ারটপ বিদ্যুৎ খরচ হ্রাস করতে এটি 1500 (15 সেকেন্ড) এ সেট করার পরামর্শ দেয়।


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

যদি প্রচুর ডেটা লেখা হয়, তবে ডিস্কে লিখনব্যাক একটি থ্রেশহোল্ড দ্বারা ট্রিগার করা যেতে পারে যে পেজক্যাসে ডেটা কতটা নোংরা (এখনও ডিস্কের সাথে সিঙ্ক করা হয়নি) হতে পারে।

আপনি যদি আরও কিছু না করে থাকেন, তবে, আপনার হার্ড-ড্রাইভের ক্রিয়াকলাপটি একটি ছোট্ট ফাইলে সেভ করার পরে 5 (বা 15) সেকেন্ডের জন্য চলবে না।


যদি আপনার সম্পাদক fsync()ফাইলটি লেখার পরে ব্যবহার করেন তবে কার্নেলটি দেরি না করে ডিস্কে এটি লিখবে। (এবং fsyncডেটা আসলে ডিস্কে না পাঠানো হবে না)


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

আপনার রচনার আগে মুলতুবি থাকা / পড়তে থাকলে কোনও ঘোরাঘুরি (চৌম্বক) ডিস্কে, আপনি কোনও SATA রাইট কমান্ডের ডেটা আসলে পাওয়ার-অফ থেকে নিরাপদ হওয়ার আগে প্রতি কয়েক থেকে 7 থেকে 10 এমএসের বিলম্ব দেখতে পান। (এই প্রশ্নের অন্যান্য কিছু উত্তর ডিস্ক রাইটিং ক্যাশে সম্পর্কে আরও বিশদে যায় এবং এফএস জার্নালযুক্ত বাধাগুলি লিখতে পারে যা দুর্নীতি এড়াতে ব্যবহার করতে পারে))

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