ফাইল ব্লকের আকার - স্ট্যাটাস এবং এলএসের মধ্যে পার্থক্য


9

আমি লক্ষ্য করেছি যে আমি যখন এটি করি:

ls -ls file

এটি ব্লক গণনা সরবরাহ করে, 8 টি ব্লক বলুন।

যখন আমি করি:

stat file

আমি লক্ষ্য করেছি যে ব্লকের গণনাটি 16 টি, এলএস দ্বারা প্রদত্ত সংখ্যার দ্বিগুণ।

আমার ফাইল সিস্টেমের ব্লকের আকার 4096 I

যদি তা হয়, তবে এই অসঙ্গতির কোনও কারণ আছে কি?

আমি একটি ext4 ফাইল সিস্টেমে উবুন্টু ১১.১০ চালাচ্ছি।

উত্তর:


9

অনেকগুলি ডিস্কের সেক্টর আকার 512 বাইট হয়, যার অর্থ ডিস্কে যে কোনও পড়া বা লেখা পুরো সময়ে 512-বাইট সেক্টর স্থানান্তর করে। ফাইল সিস্টেমগুলির ডিজাইন করা একেবারেই স্বাভাবিক, যেখানে কোনও সেক্টর ফাইলগুলির মধ্যে বিভক্ত হয় না (এটি ডিজাইনের জটিলতা সৃষ্টি করবে এবং ক্ষতিগ্রস্থ পারফরম্যান্স করবে); অতএব ফাইল সিস্টেমগুলির জন্য ফাইলগুলির জন্য 512-বাইট অংশগুলি ব্যবহার করার প্রবণতা রয়েছে। যেমন অত: পর ঐতিহ্যগত ইউটিলিটি lsএবং du512-বাইট অংশ ইউনিট মাপ নির্দেশ করে।

মানুষের জন্য, 512-বাইট ইউনিট খুব অর্থবহ নয়। 1 কেবি হ'ল আকারের একই ক্রম এবং আরও অনেক অর্থবহ। একটি ফাইল সিস্টেম ব্লক (একটি ক্ষুদ্রতম ইউনিট যা একটি ফাইল বিভক্ত হয়) আসলে প্রায়শই বেশ কয়েকটি ক্ষেত্র নিয়ে গঠিত: 1 কেবি, 2 কেবি এবং 4 কেবি সাধারণ ফাইল সিস্টেম ব্লক আকার; সুতরাং 512-বাইট ইউনিটটি ফাইল সিস্টেম ডিজাইনের দ্বারা দৃ strongly়ভাবে ন্যায়সঙ্গত নয় এবং কোনও ডিস্ক ড্রাইভারের বাইরে 512-বাইট ইউনিট ব্যবহার করার traditionতিহ্য ছাড়া অন্য কোনও ভাল কারণ নেই।

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

অনেক টুলস প্রদর্শন একক নির্বাচন করুন করার জন্য একটি বিকল্প আছে ls --block-size=512গনুহ জন্য lsসেটিং POSIXLY_CORRECT=1গনুহ জন্য পরিবেশে dfএবং গনুহ du512-বাইট ইউনিট (বা ক্ষণস্থায়ী পেতে -k1KB ইউনিট বলপূর্বক)। statজিএনইউ কোর্টিলস- এর কমান্ডটি "ব্লক সাইজ" ( %Bমান) হিসাবে প্রকাশ করে যা একটি অভ্যন্তরীণ ইন্টারফেসের একটি ওএস-নির্ভর মূল্য; ওএসের উপর নির্ভর করে এটি ফাইল সিস্টেম বা ডিস্ক কোড দ্বারা ব্যবহৃত আকারের সাথে সম্পর্কিত বা নাও থাকতে পারে (এটি সাধারণত হয় না - ব্লকের আকার এবং ক্লাস্টারের আকারের মধ্যে পার্থক্য দেখুন )। লিনাক্সে, কোনও অন্তর্নিহিত ড্রাইভার যা করুক না কেন মান 512 হয়। %Bকখনই গুরুত্ব দেয় না, এটি কেবল একটি উদ্বেগ যা এটি একেবারেই বিদ্যমান।


4

উত্স কোড এবং পসিক্স স্ট্যান্ডার্ডে খনন করার পরে, আমি @ এন্টজে-এম এবং @ গিলস দ্বারা উত্তরটি বেশিরভাগই সঠিক say

POSIX.1-2-2008 থেকে মন্তব্যটি উদ্ধৃত করার মতো মূল্য , সংক্ষেপ হিসাবে:

512-বাইট ইউনিটগুলির ব্যবহার historicalতিহাসিক অনুশীলন এবং POSIX.1-2008 এর এই ভলিউমে ls এবং অন্যান্য ইউটিলিটিগুলির সাথে সামঞ্জস্যতা বজায় রাখে। এটি হ্যান্ডেল করে না যে ফাইল সিস্টেম নিজেই 512-বাইট ব্লকের উপর ভিত্তি করে। আপত্তিজনক ব্যবস্থা হিসাবে -k বিকল্পটি যুক্ত করা হয়েছিল। এটি স্ট্যান্ডার্ড বিকাশকারীদের দ্বারা একমত হয়েছিল যে সিস্টেম ভি এর সম্পূর্ণ historicalতিহাসিক ধারাবাহিকতার (বিএসডি সিস্টেমগুলিতে মিশ্র 512/1024-বাইট ব্যবহারের বিপরীতে) 512 বাইটই সেরা ডিফল্ট ইউনিট ছিল এবং 1024- বাইট ইউনিট একটি ভাল আপস ছিল। যে ব্যবহারকারীরা আরও লজিকাল 1024-বাইট পরিমাণ পছন্দ করেন তারা 512-বাইট ইউনিটে নির্ভর করে অনেক historicalতিহাসিক স্ক্রিপ্টগুলি না ভেঙে খুব সহজেই df -k এ df -k করতে পারেন

ব্লকের আকারের জন্য ls -s:

পসআইএক্স বলে যে ডিফল্ট ব্লক আকারটি প্রয়োগ-সংজ্ঞায়িত হয়, যদি না -kঅপশন দেওয়া হয়।

বাস্তবায়িত ডিফল্ট ব্লক আকারটি GNU coreutils lsএখানে সংজ্ঞায়িত করা হয় GNU gnulib: gnulib/lib/human.c

/* The default block size used for output.  This number may change in
   the future as disks get larger.  */
#ifndef DEFAULT_BLOCK_SIZE
# define DEFAULT_BLOCK_SIZE 1024
#endif

একটি পুরানো প্রতিশ্রুতি থেকে আসে:

commit 96e78d1f64d7c8d2acc5ad27dc3e73b96ae80585
Author: Jim Meyering <jim@meyering.net>
Date:   Mon Jun 29 15:23:04 1998 +0000

প্রতিশ্রুতি বার্তা নিজেই 1024 নম্বর সম্পর্কে কিছুই বলেনি।

এবং মনে রাখবেন যে ব্লক আকারটি ব্যবহৃত হয়েছে duএবং dfএটি 1024, lsকেবল তাদের সাথে সমন্বিত থাকতে বেছে নিয়েছে। যদিও জন্য duএবং dfএটা POSIX মান করার জন্য একটি confliction আছে (তাই এখানে এনভায়রনমেন্ট ভেরিয়েবল POSIXLY_CORRECTআসে)। এটি জিএনইউ দলের সিদ্ধান্ত বলে মনে হয়, এই বিতর্ক সম্পর্কে উইকিপিডিয়া পৃষ্ঠা পসিক্স দেখুন

কমান্ডের জন্য stat

এটি পসিক্স স্ট্যান্ডার্ডের একটি অংশ নয়, তবে সিস্টেম কল । তবে ব্লকের আকারের ইউনিট মানক করা হয়নি ( sys_stat.h ):stat

স্ট্যাট স্ট্রাকচারের st_blocks সদস্যের ইউনিটটি POSIX.1-2-2008 এর মধ্যে সংজ্ঞায়িত করা হয়নি।

statকমান্ড কেবল দ্বারা উপলব্ধ তথ্য প্রদর্শন statসিস্টেম কল, এবং কয়েক বাদে 512 ব্লক আকার ব্যবহার করে (তারা অ লিনাক্স, যেমন এইচপি-ইউএক্স, আইবিএম, AIX ইত্যাদি দেখতে ম্যাক্রো সংজ্ঞায়িত gnulib/lib/stat-size.h)।

সুতরাং 512 সংখ্যাটি আরও aতিহাসিক পছন্দ এবং লিনাক্স কনভেনশন।

GNU coreutils(অত: পর lsকমান্ড) লিনাক্স কার্নেল (অত: পর একটি অংশ নয় statকল), তারা বিভিন্ন ব্যবস্থা দৃষ্টিভঙ্গি লক্ষ্য করে করা হয়, GNU coreutilsমানুষের জন্য আরো (সহজ পড়তে), এবং হার্ডওয়্যার বিমূর্ত লিনাক্স কার্নেলে (অত: পর হার্ডওয়্যার কাছাকাছি)।

সম্পাদনা করুন: 4096 ব্লকের আকার হ'ল "আইও ব্লক" আকার, প্রকৃত শারীরিক ব্লকের আকার সম্ভবত এখনও 512 বাইট এই প্রশ্নটিতে বর্ণিত ।


1

statকমান্ড হার্ড ডিস্কের শারীরিক blocksize ব্যবহার করে। মূলত 1956 সালে প্রতিষ্ঠার পর থেকে সমস্ত হার্ড-ডিস্ক 512 বাইট ব্লক ব্যবহার করেছে। তবে সম্প্রতি এটি অ্যাডভান্সড ফর্ম্যাটটির সাথে পরিবর্তন শুরু হয়েছে।

আমি সন্দেহ করি যে ls'1024 বাইট-ব্লকসাইজের একটি historicalতিহাসিক কারণও রয়েছে। ফাইলসিস্টেমের জন্য 1024 এর ব্লক সাইজ রাখা সম্ভবত একসময় প্রচলিত ছিল বা এটি আপনাকে কিলোবাইটের আকার দিতে ব্যবহৃত হয়েছিল। তবে (অন্তত সাথে GNU coreutils) আপনি --block-size=বিকল্পটির সাথে ব্লক আকার নির্দিষ্ট করতে পারেন ।

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