लिनक्स में, आप कैसे जांचते हैं कि कोई डिस्क खंडित है या नहीं?


28

बूट पर, fsck कभी-कभी डिस्क के लिए घर्षण की रिपोर्ट करता है: "5.3% गैर-सन्निहित"।

यह जानकारी मुझे स्वयं कैसे मिल सकती है? क्या कोई विशिष्ट fsck आह्वान है?

जवाबों:


27

आप सुरक्षित रूप से fsck.ext2 को ext2 ext3 या ext4 फाइल सिस्टम पर चला सकते हैं, भले ही वह इस तरह माउंट हो

sudo fsck.ext2 -fn /dev/sdXY

यदि ड्राइव माउंट किया गया है, तो यह बहुत सारी त्रुटियों को आउटपुट करेगा, लेकिन -n तर्क यह बताता है कि ड्राइव को स्पर्श नहीं करना है।

$ sudo fsck.ext2 -fn /dev/sda1
e2fsck 1.42 (29-Nov-2011)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Ubuntu_Rescue: 291595/1222992 files (0.2% non-contiguous), 1927790/4882432 blocks

धन्यवाद! fsck.ext2 ने मेरे होम विभाजन पर कई त्रुटियां पाईं। अब मैं इसकी मरम्मत करना चाहूंगा। यह सवाल है: मैं अपने घर विभाजन की मरम्मत कैसे करूं, जिसे लॉगिन करने के लिए मुझे घुड़सवार रखने की आवश्यकता है?
माइकल

3
@ मिचेल यदि आपका ड्राइव माउंट है, तो उस पर एक चेक चलाना हमेशा त्रुटियों की रिपोर्ट करेगा। फिर भी, यदि आप अगले रिबूट पर फाइल सिस्टम की जांच करना चाहते हैं, तो इसे चलाएं sudo tune2fs -C 16000 /dev/sda1और रिबूट करें।
Rucent88

1
fsck जाँचता है कि डिस्क / स्टोरेज पर क्या है, लेकिन यदि माउंट किया गया है तो प्रगति में सामान होगा (आधा लिखा हुआ)। इसलिए आप त्रुटियां देखेंगे, वे वास्तविक त्रुटियां नहीं हैं, वे गलत त्रुटियां हैं। उन पर ध्यान न दें।
ctrl-alt-delor-

8

फाइलों के आवंटन के समय फाइलसिस्टम के आधुनिक एक्स्ट्रीम परिवार संतुलन और आकस्मिकता को ध्यान में रखते हैं। Ext3 और ext4 बैलेंसिंग में आमतौर पर जर्नल एंट्रीज़ को क्रम में लगाने से, और विशेष रूप से ext4 में, सन्निहित ब्लॉकों को बढ़ाने के लिए फाइल-सिस्टम एक्सटेंशंस को प्री-एलोकेंट करके ध्यान रखा जाता है। 20% से कम विखंडन स्तर का पीछा करना आपके समय के लायक नहीं हो सकता है, खासकर यदि आपका सिस्टम बार-बार कुछ फाइलों तक पहुंच रहा है। मेरा सुझाव है कि एकल डिस्क सिस्टम के लिए रीड स्पीड बढ़ाने के लिए इन युक्तियों का अनुसरण करें:

  • increase ram: इससे फाइलसिस्टम कैश बढ़ता है

  • ब्लॉक का आकार बढ़ाएँ: 1k से 4k ब्लॉक साइज़ की ओर बढ़ने से, आपको अपने ब्लॉक साइज़ के पास या उससे बड़ी फ़ाइलों के लिए रीड्स पर बेहतर प्रदर्शन मिलेगा

  • यदि आप पांडित्यपूर्ण हैं, तो आप बड़ी फ़ाइलों और छोटी फ़ाइलों को उनके ब्लॉक आकार द्वारा विभाजन में व्यवस्थित कर सकते हैं, आप केवल ऐसा करना चाहते हैं यदि आप अलग-अलग निर्देशिकाओं में फ़ोटो, वीडियो और स्रोत कोड संग्रहीत कर सकते हैं

  • एचडीपीआर और / या लैपटॉप-मोड उपयोगिता का उपयोग करके अपनी रीड-फॉरवर्ड सेटिंग बढ़ाएं

  • बैकअप और अपने फाइल सिस्टम को एक रेखीय अंदाज़ में पुनर्स्थापित करें जैसे कि टार के साथ

यदि आपके पास कई डिस्क हैं और आप रेड स्ट्रिपिंग और / या एलवीएम का उपयोग कर रहे हैं, तो आप अन्य कारकों पर विचार करेंगे, जैसे कि स्ट्राइप का आकार।


4

हाँ, एक विशिष्ट fsckआह्वान है (जड़, या सुडोल के रूप में):

$ fsck /dev/sdXY

अपने मामले के लिए सही मापदंडों के साथ एक्स और वाई को बदलें (जैसे /dev/sda1)।

एक विभाजन पक्ष पर इस दौड़ मत करो! यह आपके फाइल सिस्टम को गंभीर रूप से नुकसान पहुंचा सकता है।

लिनक्स और डीफ़्रैग्मेन्टिंग के बारे में कुछ और जानकारी के लिए, मेरा जवाब यहाँ देखें ।


यदि आपको विशेष रूप से fsck चलाने की आवश्यकता नहीं है, लेकिन बस अपने ड्राइव के विखंडन की जांच करना चाहते हैं, तो निम्न स्क्रिप्ट ( यहां से ली गई ) चाल को करना चाहिए:

#!/usr/bin/perl -w

#this script search for frag on a fs
use strict;

#number of files
my $files = 0;
#number of fragment
my $fragments = 0;
#number of fragmented files
my $fragfiles = 0;

#search fs for all file
open (FILES, '-|', "find '$ARGV[0]' -xdev -type f -print0");

$/ = "\0";

while (defined (my $file = <FILES>)) {
        open (FRAG, "-|", "filefrag", $file);
        my $res = <FRAG>;
        if ($res =~ m/.*:\s+(\d+) extents? found/) {
                my $fragment = $1;
                $fragments += $fragment;
                if ($fragment > 1) {
                        $fragfiles++;
                }
                $files++;
        } else {
                print ("$res : not understand for $file.\n");
        }
        close (FRAG);
}
close (FILES);

print ( $fragfiles / $files * 100 . "% non contiguous files, " . $fragments / $files . " average fragments.\n"); 

आप इसे प्रश्न में निर्देशिका (या आरोह बिंदु) पर चला सकते हैं:

$ frag_check.pl $HOME/
  1.32410691664555% non contiguous files, 1.05380668862427 average fragments.

यह विभाजन पर सिर्फ fsck कह रहा है, और जैसा कि हम दोनों जानते हैं, यह एक घुड़सवार विभाजन को नष्ट कर देगा। क्या रीड-ओनली में fsck का उपयोग करने का कोई तरीका है, मुझे बताओ-कैसे-खंडित-मेरा-डिस्क-तरीका है?
Peltier

जहाँ तक मुझे पता है, @Peltier नहीं है। मैं सोच रहा था कि आप एक निचले रनवे में बूट कर सकते हैं, संबंधित डिस्क को अनमाउंट कर सकते हैं और fsck चला सकते हैं। किसी भी मामले में, गंभीरता से, आप लगभग निश्चित रूप से अधिकांश लिनक्स सिस्टम पर विखंडन की अनदेखी कर सकते हैं।
टेराडन

@ कैल्टियर, मेरा अद्यतन उत्तर देखें।
टेराडन

1
हाँ, यह धीमा है। ध्यान रहे आपने मेरे 500GB / होम / पार्टीशन पर ~ 2-3mins लिया। फिर से, मैं तनाव, ड्राइव विखंडन वास्तव में कोई समस्या नहीं है। खासकर यदि आप एक EXT3-4 फाइल सिस्टम का उपयोग कर रहे हैं।
टेराडन

1
@KentFredric आह! हाँ सचमुच। मैं देख सकता हूं कि तुम्हरा अब क्या मतलब है। मैं तदनुसार संपादित, धन्यवाद। अव्यवस्था को दूर करने के लिए टिप्पणियों को हटा दें।
टेराडन

0

आप इस जानकारी को प्राप्त करने के लिए e2defrag जैसे टूल का उपयोग कर सकते हैं।

ध्यान रखें कि लिनक्स फ़ाइल सिस्टम की प्रकृति के कारण, डीफ़्रेगिंग सामान्य रूप से अनावश्यक है।


क्या आप अपने उत्तर का विवरण देना चाहेंगे? मैंने उस जानकारी को प्राप्त करने की कोशिश की e4defrag -c, लेकिन यह काम नहीं किया।
Peltier

@Peltier -cअंतिम तर्क के रूप में विकल्प के बाद इसे Ext3 या Ext4 moint बिंदु पर इंगित करें । और ... "काम नहीं किया"? आपको क्या त्रुटि है?
gertvdijk

इसे कहते हैं "हो गया"। हालांकि, मैंने इसे सीधे डिवाइस पर इंगित नहीं किया, लेकिन माउंट बिंदु पर। मैं डिवाइस के साथ फिर से कोशिश कर रहा हूं।
पेल्टियर

ध्यान दें कि इसमें बहुत समय लगता है, जबकि fsck बहुत तेज है।
Peltier

बस डिवाइस के साथ इसे फिर से आज़माया, यह केवल "पूर्ण" कहता है।
पेल्टियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.