এটিতে 400 গিগাবাইটের বেশি ডেটা সহ আমার একটি ডিরেক্টরি রয়েছে। আমি যাচাই করতে চেয়েছিলাম যে সমস্ত ফাইল ত্রুটি ছাড়াই পঠন করা যায়, তাই আমি ভেবেছিলাম এমন একটি সহজ উপায় tar
এটি /dev/null
। তবে পরিবর্তে আমি নিম্নলিখিত আচরণটি দেখতে পাচ্ছি:
$ time tar cf /dev/null .
real 0m4.387s
user 0m3.462s
sys 0m0.185s
$ time tar cf - . > /dev/null
real 0m3.130s
user 0m3.091s
sys 0m0.035s
$ time tar cf - . | cat > /dev/null
^C
real 10m32.985s
user 0m1.942s
sys 0m33.764s
উপরের তৃতীয় কমান্ডটি বেশ আগে থেকেই বেশিক্ষণ দৌড়ানোর পরে Ctrl+ জোর করে বন্ধ করে দেওয়া হয়েছিল C। তদতিরিক্ত, প্রথম দুটি কমান্ড কাজ করার সময়, স্টোরেজ ডিভাইসের ক্রিয়াকলাপ সূচকটি .
প্রায় সর্বদা অলস ছিল। তৃতীয় কমান্ডের সাহায্যে সূচকটি নিয়মিত আলোকিত হয়, যার অর্থ চরম ব্যস্ততা।
সুতরাং এটি মনে হয়, যখন tar
এটির আউটপুট ফাইলটি এটি সন্ধান করতে সক্ষম হয় /dev/null
, অর্থাত্ যখন /dev/null
সরাসরি ফাইল হ্যান্ডেলটি খোলা থাকে যা এতে tar
লেখা হয়, তখন ফাইল বডিটি এড়িয়ে যায়। ( ডিরেক্টরিতে সমস্ত ফাইল 'লাল' হয়ে যায় মুদ্রণের v
জন্য বিকল্প যুক্ত করা )tar
tar
তো আমি ভাবছি কেন এমন হয়? এটা কি একরকম অপটিমাইজেশন? যদি হ্যাঁ, তবে কেন এমন tar
বিশেষ মামলার জন্য এমন সন্দেহজনক অপ্টিমাইজেশন কেন করতে চান?
আমি লিনাক্স 4.14.105 এএমডি 64 তে GNU টার 1.26 গ্লিবসি 2.27 ব্যবহার করছি with
pv
: tar -cf - | pv >/dev/null
। এটি ইস্যুটিকে pv
gtar -cf /dev/zero ...
যা পছন্দ তা পেতে ব্যবহার করুন ।
find . -type f -exec shasum -a256 -b '{}' +
। নেই শুধু এটা না আসলে পড়া এবং সমস্ত ডেটা চেকসাম, কিন্তু আপনি যদি আউটপুট সংরক্ষণ আপনি পরে এটা চেক করার জন্য যে ফাইলের বিষয়বস্তু পরিবর্তন হয়নি পুনরায় রান করতে পারেন।