কেন ডেডি মাঝে মাঝে ডেটা লেখা পর্যন্ত অপেক্ষা করে না?


20

কখনও কখনও, আমি যখন ফ্ল্যাশ ড্রাইভে চিত্রগুলি লিখি, তখন এটি ঘটে:

$ sudo dd if=install57.fs of=/dev/sdc
573440+0 records in
573440+0 records out
293601280 bytes (294 MB) copied, 0.549231 s, 535 MB/s

মূলত, লিনাক্স সমস্ত কিছুকে ক্যাশে করে, কিছুই লিখে না এবং ddপ্রস্থান করে। আমি টাইপ করার পরে syncএটি ডেটা লেখা শুরু করে (ফ্ল্যাশ ড্রাইভ এলইডি জ্বলতে শুরু করে)।

কেন এমন হয়?


3
আপনি কি নিশ্চিত /dev/sdcযে আপনার সিস্টেমে একটি আসল ডিভাইস এবং আপনি কোনও ফাইলে লিখছেন না /dev/sdc? একটি করুন ls --color /dev- /dev/sdcএটি কোনও ডিভাইস হলে হলুদ হওয়া উচিত।
লরেন্স

উত্তর:


21

পরিবর্তে এটি ব্যবহার করুন:

sudo dd if=install57.fs of=/dev/sdc conv=fsync

এটি fsync()প্রতিটি write()সিস্টেমে কল করার পরে কল করে। এটি ddকোনও কিছু ক্যাশে না করতে বাধ্য করে । Fsync ( man 2 fsync) এর মানচিত্রের এই অংশটি দেখুন :

fsync() transfers ("flushes") all modified in-core data of (i.e., modified buffer cache 
pages for) the file referred to by the file descriptor fd to the disk device (or other 
permanent storage device) where that file resides. The call blocks until the device reports 
that the transfer has completed. It also flushes metadata information associated with the 
file (see stat(2)).

এটি কার্নেলের ডিফল্ট আচরণ। লিনাক্স কার্নেলগুলি লিখিতভাবে ক্যাচগুলি পরিচালনা করে এবং পরিচালনা করে: যখন write()সিস্কল জারি করা হয়, তখন ডেটাটি দ্রুত ক্যাশে লিখিত হয় এবং একটি লিখিত-সমাপ্ত স্থিতি প্রক্রিয়াতে প্রেরণ করা হয়। যখন বাফারের প্রয়োজন হয় বা যখন বাসে ফ্রি সময় থাকে তখন ডেটা ক্যাশে থেকে হার্ড ডিস্কে লেখা হয়।


1
আমি পছন্দ করি যে আপনার উত্তর এবং আমার প্রায় সম্পূর্ণ ভিন্ন পদ্ধতির কভার। ভাল, +1।
ক্রিসইনএডমন্টন

1
@ ক্রিসইন এডমন্টন ডিটো +1
বিশৃঙ্খলা

সমস্ত উত্তর এই প্রশ্নে ভাল।
ফ্রান্সিসকো তপিয়া

@ চাওস কেবল পরিষ্কার করতে: এটি কার্নেলের ডিফল্ট আচরণ। -আপনার অর্থ conv=fsyncকি ডিফল্ট যে ডিভাইসগুলিতে ব্লক করার সময় ddকিছুই ক্যাশে করে না? এটির
জোনাথন

10

এটি ঘটে কারণ লিনাক্স এবং অন্যান্য অপারেটিং সিস্টেমগুলি ক্যাশে উভয়ই পড়তে এবং লেখায়। বেশিরভাগ ক্ষেত্রে, এটি আপনার অপারেটিং সিস্টেমটিকে আরও প্রতিক্রিয়াশীল করে তোলে।

আপনি যদি ক্যাশেড ডেটা লিখিত হয়েছে তা নিশ্চিত করতে চান, আপনি syncযেমন জানেন তেমন ব্যবহার করতে চান । লিনাক্স টিউন করতে পারেন এমন একটি উল্লেখযোগ্য সংখ্যক সেটিংসও প্রকাশ করে। এই নিবন্ধটি কিছু সেটিংসের একটি ভাল ওভারভিউ দেয়। আপনি vm.dirty_background_bytes 0 তে সেট করতে পারেন, উদাহরণস্বরূপ, কার্নেলটি তত্ক্ষণাত ফ্লাশারের থ্রেড থেকে কিক্সড হয়েছে তা নিশ্চিত করার জন্য।


7

সিঙ্ক (8) - লিনাক্স ম্যান পৃষ্ঠা :

(তুলনামূলক ধীর) ডিস্ক পড়া ও লেখার বিষয়টি এড়াতে কার্নেল মেমরিতে ডেটা রাখে। এটি কার্যকারিতা উন্নত করে, তবে কম্পিউটার ক্র্যাশ হলে ডেটা হারিয়ে যেতে পারে বা ফলস্বরূপ ফাইল সিস্টেমটি দূষিত হতে পারে। সিঙ্ক নিশ্চিত করে যে মেমরির সমস্ত কিছুই ডিস্কে লেখা আছে।

দ্রষ্টব্য: unmount(বা বের করে দেওয়া) স্বয়ংক্রিয়ভাবে কল করে syncযা সাধারণ ফাইল সিস্টেমের ব্যবহারে এটি "আড়াল করে"।

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