2009-05-25 36 views
32

मैं एक उपकरण जारी करने के लिए तैयार हो रहा हूं जो नियमित हार्ड ड्राइव के साथ प्रभावी है, एसएसडी (ठोस राज्य ड्राइव) नहीं। वास्तव में, इसका उपयोग एसएसडी के साथ नहीं किया जाना चाहिए क्योंकि इसका परिणाम वास्तविक प्रभावशीलता के साथ बहुत अधिक पढ़ा/लिखना होगा।क्या यह पता लगाने का कोई तरीका है कि कोई ड्राइव एसएसडी है या नहीं?

कोई भी यह पता लगाने का तरीका जानता है कि कोई दिया गया ड्राइव ठोस-राज्य है या नहीं?

+0

यह सवाल है ([यूनिक्स और लिनक्स पर एक जवाब] http://unix.stackexchange.com/questions/65595/how-to-know-if-a-disk-is- एक-एसएसडी या एक-HDD/65602 # 65602)। – Totor

+0

[यह जांचने के लिए कि क्या मेरा उबंटू एसएसडी पर रखा गया है?] (Http://askubuntu.com/q/792814/253474) –

उत्तर

3

एसएसडी का पता लगाना उतना असंभव नहीं है जितना कि डिस्फ़र्ट बाहर निकलता है। लिनक्स के libata (http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-04/msg03625.html) में पहले से ही कुछ प्रगति हुई है, हालांकि यह अभी तक उपयोगकर्ता-तैयार प्रतीत नहीं होता है।

और मुझे निश्चित रूप से समझ में आता है कि इसे क्यों करने की आवश्यकता है। यह मूल रूप से एक लिंक्ड सूची और एक सरणी के बीच का अंतर है। डीफ्रैग्मेंटेशन और आमतौर पर एसएसडी पर काउंटर-उत्पादक होता है।

0

एसएसडी डिवाइस हार्ड डिस्क डिवाइस इंटरफ़ेस का अनुकरण करते हैं, इसलिए उन्हें केवल हार्ड डिस्क की तरह उपयोग किया जा सकता है। इसका यह भी अर्थ है कि वे क्या हैं इसका पता लगाने का कोई सामान्य तरीका नहीं है।

आप शायद ड्राइव (विलंबता, गति, आकार) की कुछ विशेषताओं का उपयोग कर सकते हैं, हालांकि यह सभी ड्राइव के लिए सटीक नहीं होगा। एसएमएआरआर को देखने की एक और संभावना हो सकती है। डेटा देखें और देखें कि आप इस प्रकार के माध्यम से (मॉडल नाम, कुछ मानों के आधार पर) का निर्धारण कर सकते हैं, हालांकि जब तक कि आप वहां सभी ड्राइव का डेटाबेस नहीं रखते हैं, यह 100% सटीक नहीं होगा।

+0

मैं सहमत हूं, मुझे लगता है कि एकमात्र तरीका यह पता लगाता है कि निर्माता अपने एसएसडी के लिए धारावाहिक कुंजी कैसे उत्पन्न करते हैं एचडीडी वाले के विपरीत डिवाइस। फिर सभी निर्माताओं और उनके एसएसडी स्ट्रिंग पैटर्न की एक सूची बनाएं। मुझे यह निर्धारित करने के लिए कुछ डिवाइस सीरियल नंबरों की तलाश करनी पड़ती थी कि वे मेरी जरूरतों के लिए सही हैं (यूएस बाजार के लिए आइपॉड, लिनक्स एफडब्ल्यू के साथ लिंकिस राउटर) – Mihaela

+0

यह कहना सही नहीं है कि धारावाहिक कुंजी ही एकमात्र संभव तरीका है। कुछ ड्राइव उपयोगी रूप से उनके आरपीएम को 1 या 0 के रूप में रिपोर्ट करते हैं (http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-04/msg02562.html) –

+1

शायद आप सही हैं, लेकिन मुझे यकीन नहीं है। "कुछ ड्राइव" -> समस्या है, इसे सभी ड्राइव, कोई अटकलें नहीं होनी चाहिए। – Mihaela

8

आप वास्तव में घूर्णन विलंबता को आसानी से निर्धारित कर सकते हैं - मैंने इसे एक बार विश्वविद्यालय परियोजना के हिस्से के रूप में किया था। यह this report में वर्णित है। आप पेज 7 पर जाना चाहेंगे जहां आप विलंबता के कुछ अच्छे ग्राफ देखते हैं। यह 9.3 मीटर से 1.1 एमएस तक है - 8.2 एमएस की बूंद। यह सीधे 60 s/8.2 ms = 7317 RPM से मेल खाता है।

यह with simple C code किया गया था - यहां वह हिस्सा है जो स्क्रैच फ़ाइल में a और b के बीच उपायों को मापता है।

 
/* Measure the difference in access time between a and b. The result 
* is measured in nanoseconds. */ 
int measure_latency(off_t a, off_t b) { 
    cycles_t ta, tb; 

    overflow_disk_buffer(); 

    lseek(work_file, a, SEEK_SET); 
    read(work_file, buf, KiB/2); 

    ta = get_cycles(); 
    lseek(work_file, b, SEEK_SET); 
    read(work_file, buf, KiB/2); 
    tb = get_cycles(); 

    int diff = (tb - ta)/cycles_per_ns; 
    fprintf(stderr, "%i KiB to %i KiB: %i nsec\n", a/KiB, b/KiB, diff); 
    return diff; 
} 
+0

सी कोड नहीं! जेफ कभी संभालने में सक्षम नहीं है! पीएस: इसे पॉड कास्ट पर उल्लिखित करें और हम पीते हैं! – geoffc

+0

हेहे :-) मैंने अभी "डेल्फी" टैग देखा है ... इसके बारे में खेद है :-) मैं आपको विश्वास करता हूं कि लड़के लोग इसे पास्कल में परिवर्तित करने के लिए, मैंने कई वर्षों में डेल्फी का उपयोग नहीं किया है। –

3

आप भाग्यशाली हो सकता है

smartctl -i sda 

चल Smartmontools से द्वारा: जब तक हम एक सिलेंडर के आसपास सभी तरह फिरते दिया है हम अधिकाधिक b मूल्यों के साथ ऐसा किया। मॉडल क्षेत्र में लगभग सभी एसएसडी में एसएसडी है। हालांकि कोई गारंटी नहीं है।

+0

आपका मतलब है 'smartctl -i/dev/sda' – EarthMind

29

अंत में एक विश्वसनीय समाधान! उनमें से दो, असल में!

चेक/sys/block/sdX/queue/rotational, जहां sdX ड्राइव नाम है। यदि यह 0 है, तो आप एक एसएसडी से निपट रहे हैं, और 1 का अर्थ सादे पुराने एचडीडी है।

मैं अपनी अंगुली को लिनक्स संस्करण पर नहीं डाल सकता जहां इसे पेश किया गया था, लेकिन यह उबंटू के लिनक्स 3.2 में और वेनिला लिनक्स 3.6 में मौजूद है और वेनिला 2.6.38 में मौजूद नहीं है। ओरेकल भी backported यह उनके अटूट एंटरप्राइज़ कर्नेल 5.5 पर है, जो 2.6.32 पर आधारित है।

यह देखने के लिए एक ioctl भी है कि यह ड्राइव लिनक्स 3.3 के बाद घूर्णनशील है, this commit द्वारा पेश की गई है। Sysfs का उपयोग आमतौर पर अधिक सुविधाजनक है, हालांकि।

+0

भी RHEL 6.4 में मौजूद है। – Raedwald

+6

मैंने कोशिश की और 'घूर्णन' झूठ बोला। – Flimm

+3

@Flimm कृपया [इसके बारे में एक कर्नेल बग रिपोर्ट फ़ाइल करें] (https://bugzilla.kernel.org/)। – Totor

0

मेरे दो सेंट इस पुराने लेकिन बहुत महत्वपूर्ण सवाल का जवाब देने के लिए ... यदि डिस्क को एससीएसआई के माध्यम से एक्सेस किया जाता है, तो आप (संभावित रूप से) अपनी घूर्णन दर का अनुरोध करने के लिए एससीएसआई पूछताछ आदेश का उपयोग करने में सक्षम होंगे।इसके लिए वीपीडी (महत्वपूर्ण उत्पाद डेटा) पृष्ठ Block Device Characteristics कहा जाता है और इसकी संख्या 0xB1 है। बाइट्स 4 और इस पेज के 5 अर्थ के साथ एक नंबर होते हैं:

  • 0000h "मध्यम रोटेशन दर सूचना नहीं है"
  • 0001h "गैर घूर्णन मध्यम (जैसे, ठोस राज्य)"
  • 0002h - 0400h "सुरक्षित"
  • 0401h - FFFEh "नाममात्र मध्यम रोटेशन प्रति मिनट रोटेशन में दर (यानी, आरपीएम) (जैसे, 7 200 आरपीएम = 1C20h, 10 000 आरपीएम = 2710h, और 15 000 आरपीएम = 3A98h)"
  • एफएफएफएफएच "आरक्षित"

तो, एसएसडी में इस क्षेत्र में 0001h होना चाहिए। इस पृष्ठ के बारे में T10.org दस्तावेज़ here पाया जा सकता है।

हालांकि, इस मानक की कार्यान्वयन स्थिति मुझे स्पष्ट नहीं है।

0

मैंने निम्नलिखित जावास्क्रिप्ट कोड लिखा था। मुझे यह निर्धारित करने की आवश्यकता थी कि क्या मशीन एसएसडी ड्राइव का उपयोग कर रही थी और यदि यह बूट ड्राइव था। समाधान MSFT_PhysicalDisk WMI इंटरफ़ेस का उपयोग करता है।

function main() 
{ 
    var retval= false; 
    // MediaType - 0 Unknown, 3 HDD, 4 SSD 
    // SpindleSpeed - -1 has rotational speed, 0 has no rotational speed (SSD) 
    // DeviceID - 0 boot device 
    var objWMIService = GetObject("winmgmts:\\\\.\\root\\Microsoft\\Windows\\Storage"); 
    var colItems = objWMIService.ExecQuery("select * from MSFT_PhysicalDisk"); 
    var enumItems = new Enumerator(colItems); 
    for (; !enumItems.atEnd(); enumItems.moveNext()) 
    { 
     var objItem = enumItems.item(); 
     if (objItem.MediaType == 4 && objItem.SpindleSpeed == 0) 
     { 
      if (objItem.DeviceID ==0) 
      { 
       retval=true; 
      } 
     } 
    } 
    if (retval) 
    { 
     WScript.Echo("You have SSD Drive and it is your boot drive."); 
    } 
    else 
    { 
     WScript.Echo("You do not have SSD Drive"); 
    } 
    return retval; 
} 
main(); 
+2

यह कोई जवाब नहीं है। – TomSlick

3

यह आदेश lsblk -d -o name,rota सूचियों को अपने ड्राइव और ROTA में एक 1 है अगर यह एक घूर्णी डिस्क है और एक 0 अगर यह एक एसएसडी है। उदाहरण आउटपुट:

 
NAME ROTA 
sda  1 
sdb  0 
संबंधित मुद्दे

 संबंधित मुद्दे