খারাপ ফাইল `rm machine এর পরে কেন আমার মেশিনটি বিদ্যুতায়িত করা আমার ফাইলগুলি সংরক্ষণ করলেন?


31

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

আমি extundeleteবা এই জাতীয় সরঞ্জামগুলির সাহায্যে ফাইলগুলি পুনরুদ্ধার করতে চাইলে আরও ডিস্কের ক্রিয়াকলাপটি আমার শত্রু ছিল তা জেনে আমি তত্ক্ষণাত যন্ত্রটি শারীরিকভাবে চালিত করে (অর্থাৎ পাওয়ার বাটন দিয়ে, এই haltজাতীয় কোনও আদেশের সাহায্যে নয়)। এটি একটি ল্যাপটপ যা কোনও গুরুত্বপূর্ণ কাজ চলছে বা কিছু খোলা নেই, সুতরাং এটি একটি গ্রহণযোগ্য অপারেশন ছিল। (যাইহোক, আমি তখন থেকেই শিখেছি যে এই জাতীয় পরিস্থিতিতে প্রথম কাজটি করার আগে প্রথমে অনুমান করা হবে যদি অনুপস্থিত ফাইলগুলি এখনও কোনও প্রক্রিয়াটি খোলা হতে পারে তবে https://unix.stackexchange.com/a/101247 - যদি সেগুলি হয় তবে আপনার মেশিনটি বিদ্যুৎ থেকে চালিত না করে এইভাবে পুনরুদ্ধার করা উচিত))

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

আমার প্রশ্নটি এখন এটি কীভাবে সম্ভব হয়েছিল তা বুঝতে হবে এবং rmডিস্কে আসলে প্রচার হওয়ার আগে সাধারণত বিলম্ব কী । আমি জানি যে ডিস্ক আইও তাত্ক্ষণিকভাবে প্রবাহিত হয়নি তবে এটি কিছু সময়ের জন্য স্মৃতিতে বসেছিল, তবে আমি ভেবেছিলাম যে ডিস্ক জার্নালটি নিশ্চিত করে দেবে যে মুলতুবি অপারেশনগুলি পুরোপুরি হারাবে না। https://unix.stackexchange.com/a/78766 নোংরা পৃষ্ঠাগুলি ফ্লাশ করার জন্য এবং জার্নাল অপারেশনগুলি ফ্লাশ করার জন্য একটি পৃথক প্রক্রিয়াতে ইঙ্গিত বলে মনে হচ্ছে তবে জার্নালটি কীভাবে একটির জন্য জড়িত হবে rmএবং পূর্বে প্রত্যাশিত বিলম্ব সম্পর্কে পর্যাপ্ত বিবরণ দেয় না অপারেশন ফ্লাশ করা হয়।

আরও কিছু বিবরণ: ডেটাটি একটি LUKS ভলিউমের ভিতরে একটি ext4 পার্টিশনে ছিল এবং মেশিনটি ব্যাকআপ নেওয়ার সময় আমি নিম্নলিখিতটি দেখলাম syslog:

Sep 24 10:24:58 gamma kernel: [   11.457007] EXT4-fs (dm-0): 1 orphan inode deleted
Sep 24 10:24:58 gamma kernel: [   11.458393] EXT4-fs (dm-0): recovery complete
Sep 24 10:24:58 gamma kernel: [   11.482475] EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts: (null)

তবে আমি এটির সাথে সম্পর্কিত বলে আত্মবিশ্বাসী নই rm

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

উত্তর:


22

দেখে মনে হচ্ছে আপনি কী ঘটেছে তা সম্পর্কে আপনার কাছে একটি উপযুক্ত উপলব্ধি।

হ্যাঁ, কারণ আপনার পরিবর্তনগুলি ডিস্কে প্রতিশ্রুতিবদ্ধ হওয়ার আগে আপনি হার্ড-পাওয়ার-সিস্টেমটি বন্ধ করেছিলেন, আপনি যখন ব্যাক আপ করবেন তখন সেগুলি সেখানে ছিল।

সমস্ত ডিস্কে ফ্ল্যাশ করার আগে সিস্টেম সমস্ত লেখায় ক্যাশে করে। এই আচরণটি নিয়ন্ত্রণ করে এমন বেশ কয়েকটি বিকল্প রয়েছে যা সমস্ত /proc/sys/vm/dirty_* [ কর্নেল ডক ] এ অবস্থিত । fsync() [ Man 2 fsync ] এর মাধ্যমে অ্যাপ্লিকেশন দ্বারা স্পষ্টভাবে ফ্লাশ করা না হলে ডেটা যখন যথেষ্ট পুরানো হয়, বা লেখার ক্যাশে ভরাট হয় তখন তা প্রতিশ্রুতিবদ্ধ হয়।
উপরে ব্যবহৃত হিসাবে "ডেটা" সংজ্ঞাটি ফাইল মোছার জন্য ডিরেক্টরিতে প্রবেশের পরিবর্তনটি অন্তর্ভুক্ত করে।

এখন, জার্নাল হিসাবে, এটি জার্নালটি কীসের একটি সাধারণ ভুল ধারণা। একটি জার্নালের উদ্দেশ্য পরিবর্তনগুলি পুনরায় প্লে করা নিশ্চিত করা নয়, বা সেই ডেটাটি হারিয়েছে না। একটি জার্নালটির উদ্দেশ্য হ'ল ফাইল সিস্টেমের নিজেই দুর্নীতি রোধ করা, এতে থাকা ফাইলগুলি নয়। জার্নালে কেবল পরিবর্তনগুলি করা হচ্ছে সে সম্পর্কিত তথ্য রয়েছে এবং (সাধারণত) পরিবর্তনের সম্পূর্ণ তথ্য নেই। সঠিক বিবরণটি ফাইল সিস্টেম এবং জার্নাল মোডের উপর নির্ভরশীল। Ext3 / 4 এর জন্য dataমাউন্ট বিকল্পটি দেখুন man 8 mount


পুনরায় বুট ছাড়াই মুলতুবি থাকা লেখাগুলি প্রতিরোধ করার কোনও উপায় আছে কিনা সে সম্পর্কে আপনার পরিপূরক প্রশ্নের উত্তর দিতে:

কার্নেল উত্স কোডের মাধ্যমে দ্রুত পঠন করা থেকে, দেখে মনে হচ্ছে আপনি জরুরী রিমাউন্ট-পঠনযোগ্য-কেবল অপারেশন করতে আপনি যাদু sysrq uকমান্ড ([ উইকিপিডিয়া ], [ কার্নেল ডক ]) ব্যবহার করতে পারেন। এটি প্রদর্শিত হচ্ছে এটি তত্ক্ষণাত সিঙ্ক ক্রিয়াকলাপ ছাড়াই সমস্ত ভলিউমকে কেবল পঠনযোগ্য পুনরায় মাউন্ট করবে ।

এটি ব্যবহার করতে, কেবল Alt+ SysRq+ টিপুন u


1
এই উত্তরের জন্য ধন্যবাদ! আমি জার্নালটি সম্পর্কে এখনও কিছুটা বিভ্রান্ত হয়ে পড়েছি: আমি কী এটিকে এমন কিছু হিসাবে ভাবতে পারি যা পরিবর্তনগুলি যখন ডিস্কে ফ্লাশ হয়ে যায় তখনই জড়িত হয়ে যায়, যাতে লেখার আগে অনুগ্রহের সময়টি অনুমান করার জন্য কেবল লেখার ক্যাচিংই প্রাসঙ্গিক ব্যবস্থা হয় rm? অন্য কথায়, জিনিসগুলি যখন জার্নালে প্রতিশ্রুতিবদ্ধ হয় কেবল যখন কোনও লেখা সম্পাদিত হয়? নাকি ছবিটি এর চেয়ে জটিল? Alt-sysrq-u হিসাবে, এটি একটি সুন্দর ঝরঝরে ধারণা। "এটি প্রদর্শিত হয়" দাবিটি দেওয়ার জন্য আপনার কাছে কি কোনও রেফারেন্স রয়েছে? (আপনি যে লিঙ্কগুলি দিয়েছিলেন তা অনুসরণ করে বলে মনে হয় না)) ধন্যবাদ! :)
a3nm

এছাড়াও, ম্যাজিক সিসার্কের এমন সীমাবদ্ধতাও রয়েছে যে আপনি এখনও এটি কোনও দূরবর্তী মেশিনে করতে পারবেন না।
a3nm

3
@ a3nm আপনি রিমোট মেশিনে সিসারকিউ ব্যবহার করতে পারেন। echo u > /proc/sysrq-trigger(আপনার প্রথমে এটি সক্রিয় করার প্রয়োজন হতে পারে)।
পাওলো আলমেডা

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

@ a3nm আপনার জার্নাল মন্তব্য সম্পর্কিত। লেখার ক্যাশে জার্নাল এবং ডিস্কের মধ্যে বসে। আপনি যখন ফাইল সিস্টেমে লেখেন, জার্নালটি আপডেট করা হয়, তারপরে ফাইল সিস্টেমটি কিন্তু দুটিই ডিস্কে প্রতিশ্রুতিবদ্ধ হয় না।
প্যাট্রিক

2

থেকে: https://www.kernel.org/doc/Docamentation/files systemms/ ext4.txt

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

এগুলি কীভাবে ফ্লাশ করবেন তা এখানে দেখুন: আপনি লিনাক্স সিস্টেমে বাফার এবং ক্যাশে কীভাবে খালি করবেন?

উপরের লিঙ্কটি থেকে উদ্ধৃত:

দ্রষ্টব্য: অপ্রয়োজনীয় জিনিসগুলির স্মৃতি পরিষ্কার করুন (কার্নারেল ২. 2..১.1 বা আরও নতুন)। সর্বদা কার্যকর জিনিসগুলি ডিস্কে ফেলে দেওয়ার জন্য প্রথমে সিঙ্ক চালানো নিশ্চিত করুন !!!

To free pagecache:

$ echo 1 > /proc/sys/vm/drop_caches

To free dentries and inodes:

$ echo 2 > /proc/sys/vm/drop_caches

To free pagecache, dentries and inodes:

$ echo 3 > /proc/sys/vm/drop_caches

এই উত্তরের জন্য ধন্যবাদ! তবে, আমি এটি বুঝতে পারি না: যেমন "সিঙ্ক" এর মধ্যে উল্লেখ করা হয়েছে commit=nrsec, কার্নেলটি মেমরি থেকে ডিস্কে পরিবর্তনগুলি ফ্ল্যাশ করার সিদ্ধান্ত নেওয়ার পরে এটি কি ঘটেছিল? অথবা সেটিংস কি commit=1গ্যারান্টি দেয় যে সেটিংস dirty_expire_centisecsএবং dirty_writeback_centisecsসেটিংস নির্বিশেষে সমস্ত পরিবর্তনগুলি 1 সেকেন্ডের পরে ফ্লাশ হয়ে যাবে ?
a3nm

কার্নেল প্রতি 1 সেকেন্ডের জন্য ডিস্কে যে কোনও ক্যাশে / বাফারগুলি ফ্লাশ করবে (সিঙ্ক করবে) commit=1। যতদূর আমি এটি বুঝতে পারি, syncভার্চুয়াল মেমরি সেটিংস নির্বিশেষে সবকিছু ঘটতে বাধ্য করে যদিও তা তাড়াতাড়ি ঘটতে পারে।
ডেভিড

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