সংখ্যা যুক্ত করা সহজ। সমস্যাটি হ'ল যুক্ত করার মতো বিভিন্ন সংখ্যা রয়েছে।
একটি ফাইল কত ডিস্ক স্পেস ব্যবহার করে?
মৌলিক ধারণা যে ধারণকারী একটি ফাইল এন বাইট ব্যবহার এন ফাইলের মেটাডেটা (অনুমতি, টাইমস্ট্যাম্প, ইত্যাদি), এবং তথ্যের জন্য ওভারহেড একটি বিট সিস্টেমে প্রয়োজন যে: ডিস্কের স্থান বাইট, প্লাস কিছু নিয়ন্ত্রণ তথ্যের জন্য একটি বিট ফাইলটি কোথায় সঞ্চয় করা আছে তা সন্ধান করুন। তবে অনেক জটিলতা রয়েছে।
অণুবীক্ষণিক জটিলতা
লাইব্রেরির প্রতিটি ফাইলকে বইয়ের সিরিজ হিসাবে ভাবেন। ছোট ফাইলগুলি কেবল একটি ভলিউম তৈরি করে তবে বৃহত্তর ফাইলগুলি এনসাইক্লোপিডিয়াসহ অনেকগুলি খণ্ডে গঠিত। ফাইলগুলি সনাক্ত করতে সক্ষম হতে, একটি কার্ড ক্যাটালগ রয়েছে যা প্রতিটি ভলিউমের উল্লেখ করে। কভারগুলির কারণে প্রতিটি ভলিউমের কিছুটা ওভারহেড থাকে। যদি কোনও ফাইল খুব ছোট হয় তবে এই ওভারহেড তুলনামূলকভাবে বড়। এছাড়াও কার্ড ক্যাটালগ নিজেই কিছু জায়গা নেয়।
কিছুটা বেশি প্রযুক্তিগত, একটি সাধারণ সাধারণ ফাইল সিস্টেমে, স্থানটি ব্লকে বিভক্ত । একটি সাধারণ ব্লকের আকার 4KiB। প্রতিটি ফাইল একটি পূর্ণসংখ্যক ব্লক গ্রহণ করে। ফাইলের আকারটি ব্লকের আকারের একাধিক না হলে শেষের ব্লকটি কেবল আংশিকভাবে ব্যবহৃত হয়। সুতরাং 1 বাইট ফাইল এবং 4096-বাইট ফাইল উভয়ই 1 টি ব্লক গ্রহণ করে, যেখানে 4097-বাইট ফাইল দুটি ব্লক গ্রহণ করে। আপনি du
কমান্ডটি দিয়ে এটি পর্যবেক্ষণ করতে পারেন : আপনার ফাইল সিস্টেমে যদি 4KiB ব্লক আকার থাকে, তবে du
1-বাইট ফাইলের জন্য 4KiB প্রতিবেদন করবে।
যদি কোনও ফাইল বড় হয়, তবে কেবলমাত্র ফাইলগুলি তৈরি করে এমন ব্লকগুলির তালিকা সংরক্ষণ করার জন্য অতিরিক্ত ব্লকগুলির প্রয়োজন হয় (এগুলি পরোক্ষ ব্লক ; আরও পরিশীলিত ফাইল সিস্টেমগুলি এক্সটেন্টের আকারে এটি অনুকূলিত করতে পারে )। ls -l
জিএনইউ বা রিপোর্ট অনুযায়ী ফাইল আকারে এগুলি প্রদর্শিত হয় না du --apparent-size
; du
, যা আকারের বিপরীতে ডিস্ক ব্যবহারের প্রতিবেদন করে, সেগুলির জন্য অ্যাকাউন্ট করে।
কিছু ফাইল সিস্টেম একই ব্লকে বেশ কয়েকটি ফাইল লেজ প্যাক করতে সর্বশেষ ব্লকের অবশিষ্ট ফাঁকা স্থানটি পুনরায় ব্যবহার করার চেষ্টা করে । কিছু ফাইল সিস্টেম (যেমন ext4 হিসাবে লিনাক্স ৩.৮ ছোট ফাইলগুলির জন্য 0 টি ব্লক ব্যবহার করে (মাত্র কয়েকটি বাইট) যা পুরোপুরি ইনোডে ফিট করে।
ম্যাক্রোস্কোপিক জটিলতা
সাধারণত উপরে যেমন দেখা যায়, মোট আকারটি du
ফাইলের দ্বারা ব্যবহৃত ব্লক বা এক্সটেন্টগুলির মাপের সমষ্টি।
du
ফাইলটি সংকুচিত করা হলে রিপোর্ট করা আকারটি আরও কম হতে পারে। ইউনিক্স সিস্টেমগুলি traditionতিহ্যগতভাবে একটি ক্রুড ফর্মকে সংক্ষেপণের জন্য সমর্থন করে: যদি কোনও ফাইল ব্লকে কেবল নাল বাইট থাকে, তবে জিরোগুলির একটি ব্লক সংরক্ষণের পরিবর্তে, ফাইল সিস্টেম সেই ব্লকটিকে পুরোপুরি বাদ দিতে পারে। এর মতো বাদ দেওয়া ব্লকযুক্ত একটি ফাইলকে স্পার্স ফাইল বলা হয় । কোনও ফাইলে নাল বাইটের একটি বৃহত সিরিজ থাকে যখন স্পার্স ফাইলগুলি স্বয়ংক্রিয়ভাবে তৈরি হয় না, তখন অ্যাপ্লিকেশনটিকে অবশ্যই ফাইলটি স্পার হওয়ার জন্য ব্যবস্থা করতে হবে।
যেমন কিছু ফাইল সিস্টেম Btrfs এবং ZFS সাধারণ সমর্থন কম্প্রেশন ।
উন্নত জটিলতা
Zfs এবং btrfs এর মতো খুব আধুনিক ফাইল সিস্টেমের দুটি প্রধান বৈশিষ্ট্য ফাইলের আকার এবং ডিস্কের ব্যবহারের মধ্যে সম্পর্ককে আরও দূরের করে তোলে: স্ন্যাপশট এবং ডুপ্লিকেশন।
স্ন্যাপশটগুলি নির্দিষ্ট তারিখে ফাইল সিস্টেমের হিমশীতল অবস্থা। এই বৈশিষ্ট্যটি সমর্থন করে এমন ফাইল সিস্টেমগুলিতে বিভিন্ন তারিখে নেওয়া একাধিক স্ন্যাপশট থাকতে পারে। এই স্ন্যাপশটগুলি অবশ্যই রুমে নেয়। এক পর্যায়ে, আপনি যদি ফাইল সিস্টেমের সক্রিয় সংস্করণ থেকে সমস্ত ফাইল মুছে ফেলেন, সেখানে স্ন্যাপশট বাকি থাকলে ফাইল সিস্টেম খালি হবে না।
স্ন্যাপশটের পরে বা দুটি স্ন্যাপশটের মধ্যবর্তী সময়ে পরিবর্তিত হয়নি এমন কোনও ফাইল বা ব্লক স্ন্যাপশটে এবং সক্রিয় সংস্করণে বা অন্যান্য স্ন্যাপশটে অভিন্নভাবে উপস্থিত রয়েছে। এটি অনুলিপি অনুলিপি মাধ্যমে প্রয়োগ করা হয় । কিছু প্রান্তের ক্ষেত্রে এটি সম্ভব যে অপ্রতুল সহজলভ্য স্থানের কারণে কোনও ফাইল ফাইল ফাইল মুছে ফেলা ব্যর্থ হবে - কারণ সেই ফাইলটি সরিয়ে ফেলা হলে ডিরেক্টরিতে একটি ব্লকের একটি অনুলিপি তৈরি করতে হবে এবং সেই ব্লকটির আর কোনও জায়গা নেই।
বন্টন হ'ল স্টোরেজ অপ্টিমাইজেশান কৌশল যা অভিন্ন ব্লকগুলি সঞ্চয় করা এড়িয়ে চলে। সাধারণ ডেটা সহ, সদৃশগুলি সন্ধান করা সর্বদা চেষ্টা করার মতো নয়। Zfs এবং btrfs উভয়ই optionচ্ছিক বৈশিষ্ট্য হিসাবে প্রতিলিপি সমর্থন করে।
du
ফাইল আকারের যোগফলের চেয়ে আলাদা কেন ?
আমরা উপরে দেখেছি যে du
প্রতিটি ফাইলের জন্য রিপোর্ট করা আকারটি সাধারণত ফাইলটি ব্যবহৃত ব্লক বা এক্সটেন্টগুলির মাপের সমষ্টি। লক্ষ্য করুন যে ডিফল্টরূপে, ls -l
বাইটগুলিতে আকারগুলি তালিকাভুক্ত করে, তবে du
কিবিতে মাপের তালিকাবদ্ধ করে, বা আরও কিছু traditionalতিহ্যবাহী সিস্টেমে 512-বাইট ইউনিট (সেক্টর) ( du -k
কিলোবাইট ব্যবহারের জন্য বাধ্য করে ) lists বেশিরভাগ আধুনিক ইউনিট সমর্থন করে ls -lh
এবং du -h
কে, এম, জি ইত্যাদি ব্যবহার করে "মানব-পঠনযোগ্য" নম্বরগুলি যথাযথ হিসাবে (কিবি, এমআইবি, জিআইবি) ব্যবহার করে।
আপনি যখন du
কোনও ডিরেক্টরি চালান , তখন ডিরেক্টরি ডিরেক্টরিতে সমস্ত ফাইলের ডিস্ক ব্যবহারের তালিকাটি নিজেরাই করে including একটি ডিরেক্টরিতে ডেটা থাকে (ফাইলগুলির নাম এবং ফাইলের মেটাডেটা যেখানে রয়েছে তার পয়েন্টার), তাই এটির জন্য কিছুটা সঞ্চয় স্থান প্রয়োজন। একটি ছোট ডিরেক্টরি একটি ব্লক গ্রহণ করবে, একটি বৃহত্তর ডিরেক্টরিতে আরও ব্লক প্রয়োজন। ডিরেক্টরি দ্বারা ব্যবহৃত স্টোরেজের পরিমাণটি কখনও কখনও কেবল এতে থাকা ফাইলগুলির উপরই নির্ভর করে না তবে সেগুলি যেভাবে সন্নিবেশ করা হয়েছিল এবং সেই সাথে কিছু ফাইল মুছে ফেলা হয় তার উপরও নির্ভর করে (কিছু ফাইল সিস্টেমের সাহায্যে এটি গর্ত ছেড়ে দিতে পারে - ডিস্কের স্থান এবং কার্য সম্পাদনের মধ্যে একটি আপস) ), তবে পার্থক্যটি ক্ষুদ্র হবে (এখানে এবং সেখানে একটি অতিরিক্ত ব্লক)। আপনি যখন দৌড়াবেনls -ld /some/directory
, ডিরেক্টরি আকারের তালিকাভুক্ত করা হয়। (দ্রষ্টব্য যে আউটপুটটির শীর্ষে "মোট এনএনএন" লাইনটি ls -l
কোনও সম্পর্কহীন সংখ্যা নয়, এটি কিবি বা সেক্টরে প্রকাশিত তালিকাভুক্ত আইটেমগুলির ব্লকের আকারগুলির সমষ্টি))
মনে রাখবেন du
এতে ডট ফাইল রয়েছে যা ls
আপনি বিকল্প -A
বা -a
অপশনটি ব্যবহার না করে দেখায় না ।
কখনও কখনও du
প্রত্যাশিত যোগফলের চেয়ে কম রিপোর্ট করে। ডিরেক্টরি গাছের ভিতরে শক্ত লিঙ্কগুলি থাকলে এটি ঘটে : du
প্রতিটি ফাইলকে একবারে গণনা করে।
ZFS
লিনাক্সের মতো কিছু ফাইল সিস্টেমে কোনও ফাইলের du
বর্ধিত বৈশিষ্ট্য দ্বারা দখল করা পুরো ডিস্ক স্পেসের প্রতিবেদন করা হয় না।
সাবধান থাকুন যে কোনও ডিরেক্টরিতে du
যদি মাউন্ট পয়েন্ট থাকে তবে -x
অপশন না দিলে এই মাউন্ট পয়েন্টগুলির সমস্ত ফাইলও গণনা করবে । সুতরাং উদাহরণস্বরূপ যদি আপনি আপনার মূল ফাইল সিস্টেমের ফাইলগুলির মোট আকার চান তবে চালান du -x /
, না du /
।
যদি একটি ফাইল-সিস্টেম একটি খালি নয় ডিরেক্টরিতে মাউন্ট করা হয় তবে সেই ডিরেক্টরিতে থাকা ফাইলগুলি মাউন্ট করা ফাইল সিস্টেমের মাধ্যমে লুকানো থাকে। তারা এখনও তাদের স্থান দখল করে, কিন্তু du
তাদের খুঁজে পাবে না।
মুছে ফেলা ফাইল
যখন কোনও ফাইল মুছে ফেলা হয় , এটি কেবল ডিরেক্টরি এন্ট্রি সরিয়ে দেয়, অগত্যা ফাইলটি নিজেরাই নয়। আসলে কোনও ফাইল মুছতে এবং এইভাবে তার ডিস্কের স্থানটি দাবি করতে দুটি শর্ত প্রয়োজন:
- ফাইলটির লিঙ্কের গণনা অবশ্যই 0 এ নেমে যেতে হবে: যদি কোনও ফাইলে একাধিক হার্ড লিঙ্ক থাকে তবে একটি অপসারণ করা অন্যকে প্রভাবিত করে না।
- যতক্ষণ না কোনও প্রক্রিয়া ফাইলটি খোলা থাকে ততক্ষণ ডেটা থেকে যায়। সমস্ত প্রক্রিয়া ফাইল বন্ধ হয়ে গেলে কেবল ফাইলটি মুছে ফেলা হয়। আউটপুট
fuser -m
বা lsof
মাউন্ট পয়েন্টে ফাইলগুলি মুছে ফেলা সত্ত্বেও, সেই ফাইল সিস্টেমটিতে একটি ফাইল খোলা রয়েছে এমন প্রক্রিয়াগুলি অন্তর্ভুক্ত করে।
- এমনকি যদি কোনও প্রক্রিয়া মুছে ফেলা ফাইলটি খোলা না থাকে, সেই ফাইলটি কোনও
loop
ডিভাইসের ব্যাকএন্ড হয় তবে ফাইলটির স্থান পুনরুদ্ধার করা যাবে না । losetup -a
(হিসাবে root
) আপনাকে বলতে পারে loop
বর্তমানে কোন ডিভাইসগুলি সেট আপ করা হয়েছে এবং কোন ফাইলটিতে। লুপ ডিভাইসটি losetup -d
ডিস্কের জায়গাটি পুনরায় দাবি করার আগে অবশ্যই (দিয়ে ) নষ্ট করা উচিত ।
আপনি যদি কিছু ফাইল ম্যানেজার বা জিইউআই পরিবেশে কোনও ফাইল মুছে ফেলেন তবে এটি কোনও আবর্জনার জায়গায় ফেলে দেওয়া যেতে পারে যেখানে এটি মুছে ফেলা হতে পারে। যতক্ষণ না ফাইলটি মুছে ফেলা যায় ততক্ষণ তার স্পেস গ্রাস করা হয়।
df
ঠিক এই সংখ্যাগুলি কি ?
একটি সাধারণ ফাইল সিস্টেমের মধ্যে রয়েছে:
- ফাইল (ডিরেক্টরি সহ) ডেটা এবং কিছু মেটাডেটা (অপ্রত্যক্ষ ব্লক এবং কিছু ফাইল সিস্টেমে বর্ধিত বৈশিষ্ট্য সহ) সহ ব্লক।
- ফ্রি ব্লক
- মূল ব্যবহারকারীদের জন্য সংরক্ষিত ব্লক।
- সুপারব্লকস এবং অন্যান্য নিয়ন্ত্রণ তথ্য।
- Inodes
- একটি জার্নাল
শুধুমাত্র প্রথম ধরণের দ্বারা রিপোর্ট করা হয় du
। যখন এটি আসে df
, তখন "ব্যবহৃত", "উপলব্ধ" এবং মোট কলামগুলি কী সিস্টেম ফাইলের উপর নির্ভর করে (অবশ্যই ব্যবহৃত ব্লকগুলি (অপ্রত্যক্ষগুলি সহ) সর্বদা "ব্যবহৃত" কলামে থাকে এবং অব্যবহৃত ব্লকগুলি সর্বদা " উপলব্ধ "কলাম)।
কোনো ext2 / ext3 / ext4 এই মধ্যে ফাইল-সিস্টেম রিজার্ভ রুট ব্যবহারকারী স্থান 5%। সিস্টেমটি পূরণ না করে চালিয়ে যেতে (বিশেষত লগিংয়ের জন্য, এবং সমস্যা সমাধানের সময় সিস্টেম প্রশাসককে কিছুটা তথ্য সঞ্চয় করতে দেওয়া) এটি রুট ফাইল সিস্টেমে কার্যকর। এমনকি ডেটা পার্টিশনের জন্য যেমন /home
, সংরক্ষিত স্থান রাখা দরকারী কারণ প্রায়-পূর্ণ ফাইল সিস্টেমটি খণ্ডিত হওয়ার প্রবণ। লিনাক্স কোনও ফাইল রচনা করার সময় ক্রমাগত অনেকগুলি ব্লক প্রাক-বরাদ্দ করে (যা বিশেষত হার্ড ডিস্কের মতো যান্ত্রিক ডিভাইসগুলি ঘোরানোর ক্ষেত্রে ফাইল ভাঙ্গনকে ধীরে ধীরে কমিয়ে দেয়) চেষ্টা করে, তবে যদি সেখানে বেশিরভাগ ব্লক না থাকে তবে এটি কাজ করতে পারে না ।
প্রথাগত ফাইল সিস্টেম, আপ ও ext4 কিন্তু Btrfs, একটি নির্দিষ্ট সংখ্যা রিজার্ভ সহ inodes যখন ফাইলসিস্টেম তৈরি করা হয়। এটি ফাইল সিস্টেমের নকশাটিকে উল্লেখযোগ্যভাবে সরল করে তোলে, তবে এর ন্যূনতম দিকটি রয়েছে যে ইনোডের সংখ্যাটি সঠিকভাবে আকারের করা দরকার: অনেকগুলি ইনোডের সাহায্যে স্থান নষ্ট হয়; খুব কম ইনোডের সাহায্যে, ফাইলসিসম স্থান ছাড়িয়ে যাওয়ার আগে ইনোডের বাইরে চলে যেতে পারে। কমান্ডটি df -i
জানিয়েছে যে কয়টি ইনোড ব্যবহার হচ্ছে এবং কতগুলি উপলব্ধ রয়েছে (ফাইল সিস্টেম যেখানে ধারণাটি প্রযোজ্য নয় সেখানে 0 রিপোর্ট করতে পারে)।
tune2fs -l
একটি ext2 / ext3 / ext4 ফাইল সিস্টেম সমন্বিত ভলিউমটিতে চালনা করা মোট সংখ্যা এবং বিনামূল্যে ইনোড এবং ব্লকগুলির সংখ্যা সহ কিছু পরিসংখ্যানের প্রতিবেদন করে।
আরেকটি বৈশিষ্ট হল ব্যাপার গুলান পারেন সাবভলিউমগুলি দেখুন (সমর্থিত Btrfs নামের অধীনে, এবং ZFS মধ্যে ডেটাসেট )। একাধিক সাবভলিউম একই স্থান ভাগ করে নিলেও পৃথক ডিরেক্টরি গাছের শিকড় রয়েছে।
যদি কোনও নেটওয়ার্ক সিস্টেমের (এনএফএস, সাম্বা, ইত্যাদি) উপর মাউন্ট করা থাকে এবং সার্ভার সেই ফাইল সিস্টেমের একটি অংশ রফতানি করে (যেমন সার্ভারের একটি /home
ফাইল সিস্টেম রয়েছে এবং রফতানি হয়/home/bob
), তবে df
ক্লায়েন্টের উপর পুরো ফাইল সিস্টেমের ডেটা প্রতিফলিত হয়, না খালি ক্লায়েন্টে রফতানি করা এবং মাউন্ট করা অংশের জন্য।
আমার ডিস্কে স্থানটি কী ব্যবহার করছে?
আমরা উপরে দেখেছি যে রিপোর্ট করা মোট আকার df
সর্বদা ফাইল সিস্টেমের সমস্ত নিয়ন্ত্রণ ডেটা অ্যাকাউন্টে নেয় না। প্রয়োজন হলে ফাইল সিস্টেমের সঠিক আকার পেতে ফাইল-সিস্টেম-নির্দিষ্ট সরঞ্জামগুলি ব্যবহার করুন। উদাহরণস্বরূপ, ext2 / ext3 / ext4 সহ, tune2fs -l
ব্লক গণনা দ্বারা ব্লক আকারটি চালান এবং গুণিত করুন।
আপনি যখন একটি ফাইল সিস্টেম তৈরি করেন, এটি সাধারণত বদ্ধ বিভাজন বা ভলিউমের উপলব্ধ স্থানটি পূরণ করে। কখনও কখনও আপনি যখন একটি ছোট ফাইল সিস্টেমের সাথে শেষ করতে পারেন যখন আপনি ফাইল সিস্টেমগুলি ঘুরতে বা ভলিউমের আকার পরিবর্তন করছেন।
লিনাক্সে, lsblk
উপলব্ধ স্টোরেজ ভলিউমের একটি সুন্দর ওভারভিউ উপস্থাপন করে। অতিরিক্ত তথ্যের জন্য বা আপনার কাছে না থাকলে আপনার lsblk
কী পার্টিশন রয়েছে তা যাচাই করতে বিশেষ ভলিউম পরিচালনা বা পার্টিশন সরঞ্জাম ব্যবহার করুন। লিনাক্স উপর সেখানে কারো lvs
, vgs
, pvs
জন্য , LVM , fdisk
ঐতিহ্যগত পিসি-শৈলী ( "উপস্থিত MBR") পার্টিশন (পাশাপাশি GPT যেমন সাম্প্রতিক সিস্টেম) জন্য, gdisk
জন্য GPT পার্টিশন, disklabel
বাসদ disklabels জন্য বিভক্ত , ইত্যাদি লিনাক্স অধীনে, cat /proc/partitions
একটি দ্রুত সারাংশ প্রদান করে। সাধারণ ইনস্টলেশনে অপারেটিং সিস্টেম দ্বারা ব্যবহৃত কমপক্ষে দুটি পার্টিশন বা ভলিউম থাকে: একটি ফাইল সিস্টেম (কখনও কখনও আরও) এবং একটি অদলবদল ভলিউম।
কিছু কম্পিউটারের বিআইওএস বা অন্যান্য ডায়াগনস্টিক সফ্টওয়্যার সমন্বিত একটি পার্টিশন থাকে । ইউইএফআই সহ কম্পিউটারগুলির একটি ডেডিকেটেড বুটলোডার পার্টিশন রয়েছে।
পরিশেষে, নোট করুন যে বেশিরভাগ কম্পিউটার প্রোগ্রামগুলি 1024 = 2 10 এর শক্তির উপর ভিত্তি করে ইউনিট ব্যবহার করে (কারণ প্রোগ্রামাররা বাইনারি এবং 2 এর শক্তিগুলি পছন্দ করে)। সুতরাং 1 kB র = 1024 বি, 1 মেগাবাইট = 1048576 বি, 1 গিগাবাইট = 1073741824, 1 টিবি = 1099511627776 বি, ... সরকারিভাবে, এই ইউনিট হিসাবে পরিচিত হয় kibibyte KiB, mebibyte MiB, ইত্যাদি, কিন্তু অধিকাংশ সফ্টওয়্যার মাত্র ট বা kB র রিপোর্ট, এম বা এমবি ইত্যাদি অন্যদিকে, হার্ড ডিস্ক নির্মাতারা পদ্ধতিগতভাবে মেট্রিক (1000-ভিত্তিক ইউনিট) ব্যবহার করে। যাতে 1 টিবি ড্রাইভটি কেবল 931 জিআইবি বা 0.904 টিবি হয়।
tune2fs
ব্লক ডিভাইসে ফাইল সিস্টেমের পাঠ্য অ্যাক্সেস থাকা দরকার যা সাধারণত রুট হওয়া দরকার কারণ এটি আপনাকে যে কোনও ফাইলের সামগ্রী পড়তে দেয়।