আমি কীভাবে এক্সট 4 ফাইল সিস্টেমে ইনডসের সংখ্যা বাড়াতে পারি?


61

গত সপ্তাহে আমার একটি সমস্যা হয়েছিল (আমার কাছে নতুন)। আমার কাছে একটি ext4 (ফেডোরা 15) ফাইল সিস্টেম রয়েছে। সার্ভারে চলমান অ্যাপ্লিকেশনটি হঠাৎ বন্ধ হয়ে গেল। প্রথম দেখাতে সমস্যাটি খুঁজে পেলাম না।

df50% উপলব্ধ স্থান দেখায়। প্রায় এক ঘন্টা অনুসন্ধানের পরে আমি একটি ফোরাম পোস্ট দেখলাম যেখানে লোকটি ব্যবহার করেছিল df -i। বিকল্পটি ইনোডের ব্যবহারের জন্য দেখায়। সিস্টেমটি ইনোডের বাইরে ছিল, একটি সাধারণ সমস্যা যা আমি বুঝতে পারি নি। পার্টিশনটিতে কেবল ৩.২ এম ইনোড ছিল।

এখন, আমার প্রশ্নগুলি: আমি কি সিস্টেমে আরও ইনোড রাখতে পারি? ডিস্ক ফর্ম্যাট করার সময় / সেট করা উচিত? 3.2M ইনোডের সাহায্যে আমার কাছে কতগুলি ফাইল থাকতে পারে?


1
প্রতিটি ফাইল বা ডিরেক্টরি একটি ইনোড ব্যবহার করে। একটি ফাইলের একটি হার্ড লিঙ্ক একটি ইনোড তৈরি করে নাen.wikedia.org/wiki/Inode
পল টমবলিন

উত্তর:


33

দেখে মনে হচ্ছে আপনার কাছে স্বাভাবিক প্রত্যাশার চেয়ে অনেক বেশি ফাইল রয়েছে।

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

এ জাতীয় বিশাল ইনোড টেবিল সহ নতুন ফাইল সিস্টেম তৈরি করতে আপনাকে mke2fs (8) এর '-N' বিকল্পটি ব্যবহার করতে হবে।

আমি প্রথমে '-n' বিকল্পটি ব্যবহার করার পরামর্শ দিই (যা fs তৈরি করে না তবে ব্যবহার-পূর্ণ তথ্য প্রদর্শন করে) যাতে আপনি আনুমানিক আনুমানিক সংখ্যা পেতে পারেন। তারপরে আপনার যদি প্রয়োজন হয় তবে একটি নির্দিষ্ট ইনোড নম্বর সহ আপনার ফাইল সিস্টেমটি তৈরি করতে '-N' ব্যবহার করুন।


11
আপনি mke2fs -iইনোডের সংখ্যা নির্দিষ্ট করতে ব্যবহার করতে পারেন । এর ডকুমেন্টেশন ইঙ্গিত দেয় যে "ফাইল সিস্টেম তৈরির পরে ইনোডের সংখ্যা বাড়ানো সম্ভব নয়"।
গিলস

2
@ পাইওভিস্কুই: প্রতিটি ফাইল ইনোডে গ্রাস করে যা ফাইল সিস্টেমের একটি পয়েন্টার। যদি ফাইলটি অন্য কোনও ফাইলের একটি হার্ড-লিঙ্ক হয় তবে এর একই ইনোড রয়েছে।
হানান এন।

6
@ গিলস -iঅপশনগুলি ইনোডের আকার নির্দিষ্ট করে, সেখানে কতগুলি নেই। -Nবিকল্প সংখ্যা inodes সেট করে।
theillien

1
আইওনড এবং ফাইল নম্বরগুলির মধ্যে সম্পর্ক 1: 1 অগত্যা নয়। প্রথম ইনোডে ফাইলগুলি যেখানে স্টোর করা আছে সেগুলিতে পয়েন্টারগুলির একটি তালিকা রয়েছে। যদি ব্লকের তালিকাগুলি একটি ইনোডের মধ্যে ফিট না করে তবে ইনোডে ইনোডগুলিতে পয়েন্টারগুলির একটি তালিকা রয়েছে যা ফাইলগুলি যেখানে সঞ্চিত রয়েছে সেই ব্লকগুলির তালিকা করে। যদি এটি সেখানে ফিট না করে তবে এটির জন্য ব্লক ইত্যাদির তালিকার গভীরতর 3 সেট
ইনোড যায়

2
পছন্দ করেছেন একটি একক ইনোডে বেশ কয়েকটি প্রত্যক্ষ পয়েন্টার থাকে এবং একটি একক, ডাবল এবং ট্রিপল পরোক্ষ পয়েন্টার থাকে। যদি ব্লকের তালিকাটি সরাসরি পয়েন্টারগুলিতে ফিট না করতে পারে তবে একক পরোক্ষ পয়েন্টার ডেটার একটি ব্লকে নির্দেশ করবে (অন্য কোনও ইনোড নয়) যাতে আরও পয়েন্টার থাকে। যদি এর চেয়ে বেশি পয়েন্টার প্রয়োজন হয় তবে ডাবল পরোক্ষ পয়েন্টারগুলি একটি ব্লকে যেখানে একক পরোক্ষ পয়েন্টার থাকে এবং ডাবল পরোক্ষ পয়েন্টার সহ একটি ব্লকে ট্রিপল পরোক্ষ হয়। সুতরাং একটি ফাইল প্রকৃতপক্ষে আকারের নির্বিশেষে কেবল একটি ইনোড ব্যবহার করে।
ব্যবহারকারী 125355

11

অন্য কাজ হিসাবে আমি একটি সঙ্কুচিত (!) tarসংরক্ষণাগারটিতে ফাইলের বিশাল সংগ্রহগুলি প্যাক archivemountকরার এবং তারপরে এটি ফাইল সিস্টেম হিসাবে মাউন্ট করার জন্য বিবেচনা করার পরামর্শ দিতে পারি। একটি ফাইল সংরক্ষণাগার চিত্রের চেয়ে একটি শেয়ার সংরক্ষণাগার ভাগ করে নেওয়া ভাল এবং মেঘ বা অন্য কোনও সঞ্চয়স্থানে ব্যাক আপ করার সময় অনুরূপ কর্মক্ষমতা সরবরাহ করে।


যদি সংগ্রহটি কেবল পঠনযোগ্য বলে মনে করা হয় squashfsতবে এটি একটি বিকল্প হতে পারে তবে এটির জন্য কার্নেলের মধ্যে কিছু নির্দিষ্ট বিকল্প সক্রিয় করা দরকার xzএবং একই পারফরম্যান্সের সাথে সংক্ষেপণের জন্য ট্যারে উপলব্ধ।


2
ভাল পরামর্শ।
piovisqui

11

৩.২ মিলিয়ন ইনোডের সাহায্যে আপনার কাছে ৩.২ মিলিয়ন ফাইল এবং ডিরেক্টরি থাকতে পারে, মোট (তবে একটি ফাইলে একাধিক হার্ডলিঙ্কগুলি কেবল একটি ইনোড ব্যবহার করে)।

হ্যাঁ, পার্টিশনে ফাইল সিস্টেম তৈরি করার সময় এটি সেট করা যেতে পারে। বিকল্পগুলি -T usage-type, -N number-of-inodesবা -i bytes-per-inodeসমস্তই ইনোডের সংখ্যা নির্ধারণ করতে পারে। আমি সাধারণত ব্যবহার -iআউটপুট তুলনা পর du -sএবং find | wc -lফাইলের একটি অনুরূপ সংগ্রহের জন্য এবং কিছু ঢিলা জন্য অনুমতি।

না, এটি বিদ্যমান ফাইল সিস্টেমের জায়গায় স্থান পরিবর্তন করা যাবে না। যাহোক:

  • আপনি যদি LVM চালিয়ে যাচ্ছেন বা ফাইল সিস্টেমটি স্যানের LUN এ চলেছে (হয় সরাসরি LUN- এ, অথবা LUN- র শেষ পার্টিশন হিসাবে), বা আপনার পার্টিশনের পরে ডিস্কে ফাঁকা স্থান রয়েছে, আপনি পার্টিশনটি বৃদ্ধি করতে পারেন এবং তারপরে resize2fsফাইল সিস্টেমটি প্রসারিত করতে ব্যবহার করুন । মোটামুটিভাবে যোগ হওয়া জায়গার অনুপাতে এটি আরও ইনোড যুক্ত করে। আপনি যদি ভবিষ্যতের ফাইলগুলির প্রায় একই আকারের সমতুল্য অবস্থান ধরে ধরে ইনোডগুলি চালিয়ে যাওয়া এড়াতে চান তবে এটি ব্যবহার করে একটি উচ্চ পর্যায়ে সংরক্ষিত ব্লক শতাংশ নির্ধারণ করুন tune2fs -m
  • আপনার যদি পর্যাপ্ত জায়গা থাকে এবং ফাইল সিস্টেমটি অফলাইনে নিতে পারেন তবে তা অফলাইনে নিয়ে যান, আরও ইনোড সহ একটি নতুন ফাইল সিস্টেম তৈরি করুন এবং সমস্ত ফাইলের অনুলিপি করুন।
  • যদি ফাইলগুলির কেবল একটি উপসেটটি প্রচুর পরিমাণ ইনোড ব্যবহার করে এবং আপনার পর্যাপ্ত ফাঁকা জায়গা থাকে তবে ফাইল সিস্টেমে কোনও ফাইল ব্যাক লুপ ডিভাইসে একটি ফাইল সিস্টেম তৈরি করুন, আরও ইনোড সহ একটি ফাইল সিস্টেম তৈরি করুন (এবং সম্ভবত ছোট ব্লকগুলিও) এটিতে, এবং আপত্তিজনক ডিরেক্টরিগুলিকে এতে সরান। এটি সম্ভবত একটি পারফরম্যান্স হিট এবং একটি রক্ষণাবেক্ষণ ঝামেলা, কিন্তু এটি একটি বিকল্প।
  • এবং অবশ্যই, যদি আপনি অনেক অপ্রয়োজনীয় ফাইলগুলি মুছতে পারেন তবে এটিরও সহায়তা করা উচিত।

6

এই পরিস্থিতির জন্য আমার কাছে বিকল্প সমাধান রয়েছে। বলুন 10G বিভাজনে আপনার কাছে 1000 ইনোড রয়েছে । তবে ইনোডস সীমাবদ্ধতার কারণে আপনি পার্টিশনের সমস্ত স্থান ব্যবহার করার কথা মনে করছেন না । তবে এই সমাধানগুলিতে আপনি বিন্যাস না করেই পার্টিশনের অবশিষ্ট স্থানটি ব্যবহার করতে সক্ষম হবেন ।

$ df -i  # see list ( I need just one free inode here so move just one file into other PARTITION)
/dev/part1  1000 999 1 99.9%     /data

$ dd if=/dev/zero of=/data/new_data
$ mkfs.ext4 /data/new_data
$ mkdir /data1
$ mount /data/new_data /data1

স্থায়ী মাউন্ট জন্য

$ echo "/data/new_data /data1 ext4 defaults 0 1" >> /etc/fstab

2
U&L এ আপনাকে স্বাগতম। আমি আপনার উত্তরটি এখানে কোডের আরও সাধারণ প্রতিনিধিত্ব করার জন্য পুনরায় ফর্ম্যাট করার জন্য একটি $কমান্ড এবং আউটপুট (যদি তারা কেবল কমান্ড থাকত, তবে প্রম্পটটি সাধারণত বাদ দেওয়া হত) serুকিয়ে কোড প্রেরণ করে ber আমি সাহসী পর্যায়ে জোর দেওয়াতে SHOUTING কেও পরিবর্তন করেছি, যা আমি মনে করি আপনার উদ্দেশ্য। আমি যদি জিনিসগুলিকে ভুল উপস্থাপন করি তবে আপনি পরিবর্তনগুলি রোল করতে পারবেন
অ্যান্থন

আমি মনে করি এই সমাধানটির যুক্তি রয়েছে তবে ডিডি চালানোর সময় আপনার আকারটি পরিচালনা করতে হবে।
পিয়োভিস্কুই

3
বিবরণগুলি ভুল, আপনার লুপ ডিভাইস এবং অ্যাপ্লিকেশনটির উপর নির্ভর করে এমনকি ইউনিয়নও ব্যবহার করতে হবে তবে কয়েক মিলিয়ন ফাইলের সাথে তাড়াহুড়ো করার সময় ব্যাকআপ থেকে ফর্ম্যাট করা এবং পুনরুদ্ধার করা এটাই একমাত্র সমাধান solution এমন পরিস্থিতি রয়েছে যেখানে এই দিনটি বাঁচাতে পারে!
মেডোক

6

অ্যাপ্ট বা প্রবণতা আপগ্রেড ব্যবহার করার সময় সম্প্রতি এই সমস্যাটিতে ছড়িয়ে পড়ে।

df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.8G  5.1G  2.3G  70% /

df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 521497   2791  100% /

জারি করা আদেশ:

du /|sort -k1 -n

প্রকাশিত বেশিরভাগ ফাইলই এর মধ্যে কয়েকটি কার্নেল সংস্করণের জন্য সাবফোল্ডারে ছিল:

/usr/src/linux-headers

এই সাবফোল্ডারগুলি সরানো হয়েছে এবং ইনোড সমস্যা স্থির হয়েছিল।

df -i

Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/xvda1     524288 104986 419302   21% /

"du / | সাজানো-কে 1-এন" ইনোডগুলি দেখায়?
এতিম

এটি হ'ল ডিরেক্টরিগুলি বাছাই করার জন্য, কোনটিতে সবচেয়ে বেশি ফাইল রয়েছে ফোল্ডারগুলি দেখানো হয়েছে যেগুলি ফোল্ডারগুলি প্রচুর পরিমাণে ইনোড গ্রহণ করছে তবে প্রকৃত স্থানের ব্যবহার কম: 30% ফ্রি ডিস্ক স্পেসের পরিস্থিতি এখনও উপরে দেখানো হয়েছে 100% ইনোড ব্যবহার।
kph0x1

আমি সত্যই "ডু" দেখিয়েছি যে কোনও পতাকা সহ কতগুলি ফাইল রয়েছে? আপনি কি আরও বিস্তারিত ব্যাখ্যা করতে পারেন?
এতিমরা

duকমান্ডের জন্য কোনও পতাকা নেই । ব্যবহার উপরোক্ত উদাহরণস্বরূপ ফাইল-সিস্টেমের মূলের জন্য, কেবলমাত্র স্থানের দিকে তাকানো। কোন ডিরেক্টরিতে সর্বাধিক ফাইল রয়েছে তা দেখানোর জন্য আউটপুটটি বাছাই করা হয়। ফাইলগুলির জন্য উপরের উদাহরণে একটি গণনা করা হয়নি, আপনার প্রশ্নের অংশটি 'কতগুলি ফাইল'। কার্নেলের উত্সগুলি duআউটপুটে প্রদর্শিত অপরাধী ছিল যদিও; উদাহরণস্বরূপ, অনেকগুলি ছোট ফাইল, পূর্ববর্তী সংকলনগুলি থেকে সাব-ফোল্ডারগুলি, ইনোডগুলি মুক্ত করার জন্য জিনিসটি অপসারণের জন্য আদর্শভাবে উপযুক্ত। এখনও একটি ম্যানুয়াল রয়ে গেছে, duআউটপুট সম্পর্কে মানুষের পর্যালোচনা , /usr/src/linux-headersতখন স্পষ্ট ছিল।
kph0x1

1
du কেবলমাত্র বাইট দেখায় - ফাইল নয়। এবং আপনি কেবল ডু কমান্ড থেকে আউটআউটটি সাজানোর জন্য পাইপ করছেন। সুতরাং কীভাবে সাজানো -k1 -n আপনার প্রস্তাবিত আউটপুটটিকে সাজান? কেবলমাত্র আমি দেখতে পাচ্ছি যে "du / | সাজানো-কে 1-এন" কেবলমাত্র প্রতিটি সারি বাইটের আকারের ভিত্তিতে বাছাই করে। আর কিছুই নয়
এতিমরা

2

du -s --inodes * 2>/dev/null |sort -gআউটপুট এবং পুনরাবৃত্তি মধ্যে শেষ dir মধ্যে সিডি চেষ্টা করুন।

সম্পূর্ণ প্রকাশ: --inodesডু কমান্ডের জন্য সমস্ত ওএসের সমর্থন পতাকা নয় (আমার ম্যাক ওএস দেয় না) তবে অনেকগুলি লিনাক্স ওএসের কাজ।

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