আমি কীভাবে কোনও ফাইলের "স্বল্পতা" আউটপুট করব?


15

ফাইল নামমাত্র আকারের কতটুকু তথ্য দিয়ে পূর্ণ হয় তা কীভাবে আউটপুট করব? ভালো লেগেছে vmtouchশো ফাইলের কত স্মৃতি বর্তমানে ...

আমি আশা করি কর্মপ্রবাহটি এমন হবে:

$ fallocate -l 1000000 data 
$ measure_sparseness data
100%
$ fallocate -p -o 250000 -l 500000  data
$ measure_sparseness
50%

কার্যকরী: ব্যবহার করুন du -bshএবং du -shতাদের তুলনা করুন।


1
সম্পর্কিত: filefragকোনও ফাইলসিস্টেমের xfs_bmap -vplজন্য এবং এক্সএফএসের জন্য স্পার্স ফাইল এবং গর্ত-খোঁচা দিয়ে চারপাশে খেলা করার সময় ডেটা কোথায় থাকে (এবং যেখানে প্রাক-বরাদ্দকৃত লিখিত লিখিত এক্সটেন্টগুলি থাকে) তা প্রদর্শনের মূল সরঞ্জাম।
পিটার কর্ডস

filefrag data-> একাধিক FIBMAP: Invalid argument-> data: 1 extent found...
vi।

কোন ফাইল সিস্টেমে? filefrag -eএক্সএফএস এবং কমপক্ষে ext4 এ পুরোপুরি কাজ করে। আমি অন্যের উপর পরীক্ষা করিনি। এটি FIBMAP- এ ফ্যালব্যাক সহ FIEMAP (ব্যাপ্তি-মানচিত্র) ব্যবহার করে। যদি সেগুলি ioctlকাজ করে না, তবে এটি কার্যকর হবে না।
পিটার কর্ডস

Tmpfs এ। আমার filefragনেই -eবিকল্প।
vi।

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

উত্তর:


19

findহয়েছে %Sবিন্যাস সুনির্দিষ্টভাবে উল্লেখ করা যা এমনকি "বিরলতা" নামকরণ করা হয়

         %S     File's  sparseness.   This  is  calculated as (BLOCKSIZE*st_blocks / st_size).  The exact value you will get for an ordinary file of a certain
                 length is system-dependent.  However, normally sparse files will have values less than 1.0, and files which use indirect  blocks  may  have  a
                 value which is greater than 1.0.   The value used for BLOCKSIZE is system-dependent, but is usually 512 bytes.   If the file size is zero, the
                 value printed is undefined.  On systems which lack support for st_blocks, a file's sparseness is assumed to be 1.0.
$ fallocate -l 1000000 data
$ find data -printf '%S\n'
1.00352
$ fallocate -p -o 250000 -l 500000  data
$ find data -printf '%S\n'
0.507904

মজাদার. কোনও সিস্টেমে সর্বাধিক নিয়মিত ফাইলগুলির মধ্যে 1.0 এর উপরে স্বল্পতা থাকবে, ডিরেক্টরিগুলি, সফ্টলিঙ্কগুলি এবং সকেট সর্বদা ঠিক 1.0 থাকে।
গ্রোচমাল

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

@grochmal, ext4 এই (লিনাক্সের) করুন: ln -s foo link, এর "বিরলতা" link: 0. সকেট এবং FIFOs আছে দৈর্ঘ্য শূন্য, তাই findশো বিরলতা 1.
ilkkachu

1

আপনার যদি findসেই বিকল্প না থাকে তবে 70 এর দশক থেকে ইউনিক্সের সাথে কাজ করার একটি পদ্ধতি হ'ল:

ls -ls file

যা ব্যবহার করা ব্লকের আসল সংখ্যা এবং এখন পর্যন্ত লেখা সর্বোচ্চ বাইট প্রিন্ট করবে। সে থেকে আপনি সহজেই কতগুলি ব্লক বরাদ্দ করা হয়নি তা গণনা করতে পারেন।


0

যদিও finds 'এর %Sসংক্ষিপ্ত আউটপুট প্রিন্ট করবে আরো বিস্তারিত জন্য আপনি চেহারা এ করতে চাইতে পারেন sparsetestযা আমি লিখেছে - ওপেন সোর্স ও GitHub উপর এখানে । আপনি প্রতিটি ছিদ্র (যেমন) মুদ্রণ করতে চাইলে নির্দ্বিধায় এটিকে নির্দ্বিধায় করুন।

ব্লগ বিক্ষিপ্ত বরাদ্দ সঙ্গে সমস্যা দেখাচ্ছে নিবন্ধ এখানে ব্যবহার sparsetestইস্যু ডিবাগ করতে।


এটি ফাইলের vmtouch -vক্যাশেড অঞ্চলের প্রিন্ট ম্যাপের মতো কোনও ফাইলে এক্সটেন্টসের একটি "মানচিত্র" মুদ্রণ করতে পারে ?
vi।

@Vi। আমি এটি বেশ ভাল আগে লিখেছিলাম এবং কিছু বিবরণ ভুলে গিয়েছি - এটি আসলে যা করছে তা হল একটি স্পার ফাইল তৈরি করা, এটিতে ডেটা লেখা, এবং পরে পরিসংখ্যান মুদ্রণ করা। আপনি কেবল পরিসংখ্যান তৈরির বিট চান। গর্তগুলি মুদ্রণ করতে আপনার lseekসাথে SEEK_HOLEএবং প্রয়োজন হবে SEEK_DATA। করাটা সহজ.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.