ফাইলগুলি ডিস্কে ক্রমানুসারে সংরক্ষিত হয়?


22

আমি যেমন বুঝতে পেরেছি, "স্পার্স ফাইল" এর অর্থ ফাইলটির 'ফাঁক' থাকতে পারে তাই প্রকৃত ব্যবহৃত ডেটা লজিক্যাল ফাইলের আকারের চেয়ে ছোট হতে পারে।

লিনাক্স ফাইল সিস্টেমগুলি কীভাবে ডিস্কে ফাইল সংরক্ষণ করে? আমি মূলত ext4- এ আগ্রহী। কিন্তু:

  1. কোনও ফাইল কী ডিস্কে ক্রমানুসারে সংরক্ষণ করা যায় না ? তার অর্থ, আমি বলতে চাইছি যে ফাইলটির অংশটি শারীরিক ঠিকানা এক্স এবং পরবর্তী অংশে শারীরিক ঠিকানা ওয়াইতে রয়েছে যা এক্স + অফসেটের কাছাকাছি নয়)।
  2. আমি কি কোনওভাবে ফাইলের অনুক্রমটি নিয়ন্ত্রণ করতে পারি?
    আমি 10 গিগাবাইটের একটি ফাইল বরাদ্দ করতে চাই। আমি এটি ডিস্কে ক্রমিক হতে চাই এবং বিভিন্ন অফসেটের মধ্যে বিভক্ত না হয়ে থাকি।
  3. এটি বিভিন্ন ধরণের মধ্যে আলাদাভাবে কাজ করে?


1
সম্ভবত, যদি আমি আপনার উদ্দেশ্যটি সঠিকভাবে বুঝতে পারি তবে আপনি নিম্ন-স্তরের এপিআই-তে আরও আগ্রহী হবেন যেখানে আপনি স্টোরেজ ডিভাইসগুলির সাথে কাজ করেন w / o ফাইল-সিস্টেম স্তরটি পেরিয়ে যেতে হবে। আপনার এন্ট্রি-পয়েন্টটি তখন dmsetupপ্রোগ্রাম হতে পারে , ডিভাইস ম্যাপারের ইন্টারফেস। আপনি যদি ডাটাবেসের মতো স্টোরেজ পরিকল্পনা করে থাকেন তবে এটি ভাল পছন্দ হতে পারে।
wvxvw

4
এটি ফাইল সিস্টেমের একটি বাস্তবায়ন বিশদ। প্রায় সব ফাইল সিস্টেম কি ডিফল্টরূপে টুকরা ফাইল; কেবলমাত্র iso9660এবং এটি romfsকরতে অক্ষম এবং অবিচ্ছিন্ন স্টোরেজ প্রয়োজন (এর মধ্যে আমি অফ-হেড তালিকাভুক্ত করতে পারি)।
মীরাবিলোস

2
ফাইলটি ডিস্কে সুসংগত কিনা বা না, ডাটা রিড / রাইটিং সবসময় সুসংগত হবে যদি না আপনি ফাইলটির অন্য কোনও অংশে অনুসন্ধান করেন। তাহলে আপনি এই সম্পর্কে যত্ন কেন? যদি না
খণ্ডন

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

উত্তর:


41

কোনও ফাইল কী ডিস্কে ক্রমানুসারে সংরক্ষণ করা যায় না ? মানে, ফাইলটির কিছু অংশ শারীরিক ঠিকানা এক্স এর নীচে এবং অন্য অংশটি শারীরিক ঠিকানার অধীনে রয়েছে যা এক্স + অফসেটের কাছাকাছি নয়)।

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

আমি কি কোনওভাবে ফাইলের অনুক্রমটি নিয়ন্ত্রণ করতে পারি? আমি 10 জিবি বড় ফাইল বরাদ্দ করতে চাই। আমি এটি ডিস্কে ক্রমযুক্ত হতে চাই এবং বিভিন্ন অফসেটের মধ্যে বিভক্ত না হয়ে থাকি।

আপনি যখন ফাইল ফাইলটি তৈরি করবেন তখন আপনার ফাইলের টার্গেটের আকার সম্পর্কে বলতে পারবেন; এটি ফাইল সিস্টেমকে এটি সর্বোত্তমভাবে সঞ্চয় করতে সহায়তা করবে। অনেক আধুনিক ফাইল সিস্টেমগুলি বিলম্ব বরাদ্দ হিসাবে পরিচিত একটি প্রযুক্তি ব্যবহার করে, যেখানে গণনা সম্পাদন করা হয় যখন উপলব্ধ তথ্য সর্বাধিক করতে একটি নতুন ফাইলের অন ডিস্ক লেআউটটি যতদূর সম্ভব দেরি করা হয়। posix_fallocate(3)মোট কত ডিস্কের স্থান বরাদ্দ করা উচিত তা ফাইল সিস্টেমটি জানানোর জন্য আপনি এই প্রক্রিয়াটি ফাংশনটি ব্যবহার করে সহায়তা করতে পারেন । আধুনিক ফাইল সিস্টেমগুলি এই বরাদ্দটি যথাযথভাবে সম্পাদন করার চেষ্টা করবে।

এটি বিভিন্ন ধরণের মধ্যে আলাদাভাবে কাজ করে?

হ্যাঁ, বিভিন্ন ফাইল সিস্টেম আলাদাভাবে আচরণ করে। লগ-ভিত্তিক ফাইল সিস্টেমগুলি যেমন এনআইএলএফএস 2 যেমন এক্সট 4 এর মতো সীমা-ভিত্তিক ফাইল-সিস্টেমের মতো সঞ্চয়স্থান বরাদ্দ করে না এবং এটি কেবলমাত্র পরিবর্তনের এক উদাহরণ।


1
fallocate(3)ফাইল সিক্যুয়েন্সিটি নিশ্চিত করে ব্যবহার করবেন ? বা কেবল ফাইল সিস্টেমের ইঙ্গিত দেবে? ম্যান পেজ থেকে আমি এটি পুরোপুরি বুঝতে পারি না।
হুডাক

6
এটি অনুক্রমিক বরাদ্দ নিশ্চিত করতে পারে না, এটি কেবল একটি ইঙ্গিত। আপনি যদি 10 জিআইবি ফাইল লিখছেন তবে আপনার অবশ্যই এটি ব্যবহার করা উচিত!
স্টিফেন কিট

6
মূলত সমস্ত ফাইল সিস্টেম FAT এর চেয়ে আরও পরিশীলিত - এটি মূল বার্কলে ইউএফএস-এর সমস্ত পথে ফিরে যায় - ইচ্ছাকৃতভাবে বড় ফাইলগুলি ভেঙে একাধিক "বরাদ্দ গোষ্ঠী" জুড়ে ছড়িয়ে দেবে; এটি তাদের ডিস্কের সামগ্রিক খণ্ডটি হ্রাস করতে সহায়তা করে । এটি কীভাবে কাজ করে তা সামঞ্জস্য করার একটি উপায় থাকতে পারে তবে এটি করার জন্য আপনার প্রথমে ফাইল সিস্টেমটিকে নতুনভাবে পুনরায় তৈরি করতে হবে এবং সম্ভবত এটি সম্পূর্ণভাবে বন্ধ করার কোনও উপায় নেই।
zwol

2
@ হুডাক সব ক্ষেত্রে ক্রমানুসারে গ্যারান্টি দেওয়া অসম্ভব (সম্পূর্ণ ড্রাইভের সাথে কেসটি পূর্ণ হওয়ার সাথে দেখুন), এবং এসএসডি উত্থানের সাথে সততা থাকলে এটি আগের তুলনায় কম গুরুত্বপূর্ণ (যারা তাদের পক্ষে কমপক্ষে সামর্থ বহন করতে পারে তাদের জন্য) )।
মুজার

1
আরও মনে রাখবেন যে RAID সিস্টেমের মতো পরিস্থিতি রয়েছে, যেখানে এটি সম্ভব হলেও যদি সংঘবদ্ধ ফাইল থাকা কম দক্ষ হয়। আমি মনে করি এটি একটি ডিস্ক / স্টোরেজ সাবসিস্টেম কন্ট্রোলারের আসলেই উদ্দেশ্য: ফাইলগুলি স্টোরেজ করার সমস্ত কাজকে যথাসম্ভব যথাযথভাবে প্রত্যাশিতভাবে অফলোড করা।
জামেস্কেফ

17

কমান্ডটি filefragআপনাকে জানাবে যে কীভাবে আপনার ফাইলটি আপনার ডিভাইসে শারীরিকভাবে সংরক্ষণ করা হয়েছে:

# filefrag -v /var/log/messages.1 
Filesystem type is: ef53
File size of /var/log/messages.1 is 41733 (11 blocks, blocksize 4096)
 ext logical physical expected length flags
   0       0  2130567               1 
   1       1 15907576  2130568      1 
   2       2 15910400 15907577      1 
   3       3 15902720 15910401      7 
   4      10  2838546 15902727      1 eof
/var/log/messages.1: 5 extents found

আপনি যদি নিজের ফাইলটি একটি পাসে লিখেন তবে আমার অনুমান যে আপনার ফাইলটি খণ্ডিত হবে না।

fallocate(1) এর ম্যান পেজটি বেশ পরিষ্কার:

fallocate একটি ফাইল ব্লক preallocon ব্যবহার করা হয়। সিস্টেম কলগুলিকে সমর্থন করে এমন ফাইল- fallocateসিস্টেমগুলির জন্য, এটি ব্লকগুলি বরাদ্দ করে এবং তা অবিবেচনাযুক্ত হিসাবে চিহ্নিত করে দ্রুত সম্পন্ন করা হয়, যা ডেটা ব্লকগুলিতে কোনও আইও প্রয়োজন হয় না। এটি জিরো দিয়ে পূরণ করে কোনও ফাইল তৈরির চেয়ে অনেক দ্রুত।

লিনাক্স কার্নেল v2.6.31 হিসাবে, fallocateসিস্টেম কলটি btrfs, ext4, ocfs2, এবং xfs ফাইল সিস্টেম দ্বারা সমর্থিত।

এটি কি অনুক্রমিক? সিস্টেমটি প্রথমে ব্লকগুলি ধারাবাহিকভাবে বরাদ্দ দেওয়ার চেষ্টা করবে। যদি এটি না পারে তবে এটি আপনাকে সতর্ক করবে না।


'Ef53' টাইপ কী? আমি এটি আমার ফাইলগুলিতেও দেখেছি। তবে আমার এফএস টাইপটি হ'ল ext4
হুডাক

2
EF53 হ'ল "SUPER_MAGIC" সংখ্যা 2, ext3 এবং ext4 এর। প্রতিটি ফাইল-সিস্টেমের সমস্ত ম্যাজিক সংখ্যার জন্য কার্নেল উত্সগুলিতে "অন্তর্ভুক্ত / uapi / লিনাক্স / ম্যাজিক এইচ" দেখুন।
ভুজ

দেবিয়ান অন, filefragলুকিয়ে আছে /usr/sbin। তবে এটি সাধারণ ব্যবহারকারীদের জন্য (অন্তত ext4- এ) কাজ করে বলে মনে হচ্ছে। straceসতর্কতার অভাব যদি আপনার মধ্যে বাধা হয়ে দাঁড়ায় তবে কীভাবে নিজের জন্য টুকরো টুকরো করা যায় তা দেখার জন্য এটির ক্রিয়াকলাপটি শিক্ষামূলক হতে পারে ।
টবি স্পিড

6

আপনি বিরল ফাইলগুলি উল্লেখ করেছেন, এবং অন্য কোনও উত্তর তাদের উল্লেখ করেনি।

বেশিরভাগ ফাইল অপ্রয়োজনীয় নয়। কোনও ফাইল তৈরির সর্বাধিক সাধারণ উপায় হ'ল এটি শুরু থেকে শেষ অবধি একসাথে লিখে। কোন গর্ত নেই।

তবে আপনাকে "1,000,000,000,000 পজিশনে চলে যান এবং সেখানে একটি বাইট লেখার অনুমতি দেওয়া হয়"। এটি এমন একটি ফাইল তৈরি করবে যা দেখে মনে হচ্ছে এটি কোনও ইটাবাইট বড়, তবে বাস্তবে কেবল ডিস্কে (সম্ভবত) 4 কে ব্যবহার করে। এটি একটি বিরল ফাইল।

অল্প পরিমাণে ডেটা বিস্তৃত করে শূন্যতার বাইরে রেখে আপনি একই ফাইলটির জন্য এটি বহুবার করতে পারেন many

যদিও এটি কার্যকর হতে পারে, সেখানে দুটি ডাউনসাইড রয়েছে।

প্রথমটি হ'ল ফাইলটি খণ্ডিত হয়ে যাবে, যা আপনি উদ্বিগ্ন।

দ্বিতীয়টি হ'ল সমস্ত প্রোগ্রাম এই ফাইলগুলি ভালভাবে পরিচালনা করে না। যেমন কিছু ব্যাকআপ সফ্টওয়্যার শূন্যতার ব্যাকআপ নেওয়ার চেষ্টা করবে এবং এর মাধ্যমে একটি ব্যাকআপ তৈরি হবে যা প্রয়োজনের চেয়ে অনেক বড়, সম্ভবত ব্যাকআপ মাধ্যমের জন্য খুব বড়।


এমনকি একটি বিচ্ছিন্ন ফাইলও প্রায়শই ডিস্কের সাথে মিলবে না।
বর্মার

2

আমি কি কোনওভাবে ফাইলের অনুক্রমটি নিয়ন্ত্রণ করতে পারি? আমি 10 গিগাবাইটের একটি ফাইল বরাদ্দ করতে চাই। আমি এটি ডিস্কে ক্রমিক হতে চাই এবং বিভিন্ন অফসেটের মধ্যে বিভক্ত না হয়ে থাকি।

এটি অর্জনের জন্য কমপক্ষে কয়েকটি উপায় রয়েছে।

  1. প্রচুর অতিরিক্ত স্থান সহ একটি ফাইল সিস্টেম ব্যবহার করুন এবং স্পেসটি পূর্ববর্তী করুন (যেমন ফাইলের আকার 10 গিগাবাইট না হওয়া অবধি কোনও অ্যাপ্লিকেশন নির্দিষ্ট প্রান্তের ডেটা মার্কার ব্যবহার করুন এবং এলোমেলো ডেটা যুক্ত করুন)। অসংগঠিত ডেটার ফলাফলের গ্যারান্টিযুক্ত এটি নয়।

  2. Ext4 ইত্যাদির পরিবর্তে একটি কাঁচা ( রান্না করা ) ফাইল সিস্টেম ব্যবহার করুন D ট্রেড অফ হ'ল প্রয়োজনমতো আপনার নিজস্ব ক্যাচিং / জার্নালিং / পুনরুদ্ধার ইত্যাদি করতে হবে।

উদাহরণস্বরূপ, আপনি যেখানে এটি থেকে বেশি লাভ করেন সেগুলি তুলনামূলকভাবে বিরল - আমি প্রথমে অন্য কোথাও পারফরম্যান্স অনুকূল করতে চাই।


আরো দেখুন

এটি কি সত্য যে ডাটাবেস পরিচালন সিস্টেমগুলি সাধারণত ফাইল সিস্টেমকে বাইপাস করে?


-1

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


1
"ডিফ্রেগমেন্টার চালাও"? এমন কোন প্রোগ্রাম আছে? আমি যখন অনুসন্ধান করেছি তখন কেবলমাত্র জিনিসটি aptitude search ~ddefragছিল ddrescueviewএবং nidsটিসিপি বিভাগটি পুনরায় অপ্রয়োজনীয় লাইব্রেরি। আপনার উত্তরটি খুব কার্যকর নয় যদি আপনি না বলেন যে প্রোগ্রামটি কী বলা হয়, বা কোন যুক্তিগুলি পাস করার প্রয়োজন।
টবি স্পিড

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