ड्राइव के लिए कर्नेल जांच को कैसे अक्षम करें?


9

मेरे पास 30GB ExpressCache SanDisk SSD के साथ sbb लैपटॉप है जो कि मेनबॉर्ड पर टिकी है। SSD की मृत्यु हो गई (जब मैं किसी तरह इसे एक्सेस करने का प्रयास करता हूं तो बहुत सी त्रुटियां देता है), लेकिन यह अभी भी कर्नेल बूट पर जांचा जाता है, मैं देखता हूं कि यह विभाजन है, ubuntu की एकता ऐप ड्रावर में अनमाउंट ड्राइव आइकन दिखाती है, और सबसे बुरी बात यह है कि मैं लैपटॉप को निलंबित कर सकता हूं , क्योंकि ssd डिवाइस के लिए सस्पेंड कमांड भेजना विफल हो जाता है। मैंने sdb = noprobe कर्नेल पैरामीटर को पास करने की कोशिश की, लेकिन ऐसा लग रहा है कि यह 3.8.0 कर्नेल (Ubuntu 13.04) में बहुत पहले से मान लिया गया है। मैं हाल की गुठली में sata डिवाइस को कैसे निष्क्रिय कर सकता हूं?

जवाबों:


1

यहां दो समाधान: एक को लागू करने के लिए तेजी से है, हालांकि समस्या को आंशिक रूप से हल करता है, दूसरा एक पूर्ण है, लेकिन आपको अपना कर्नेल संकलित करने की आवश्यकता है।

सही उत्तर एक कर्नेल पैच है।

रॉबिन एच। जॉनसन ने एसएटीए कर्नेल ड्राइवर के लिए एक पैच लिखा ( इसे यूनिक्स / लिनक्स स्टैक एक्सचेंज साइट में खोजें ) जो ड्राइव को पूरी तरह से छुपाता है।

अद्यतन पैच अब अपस्ट्रीम है (कम से कम 3.12.7 स्थिर कर्नेल में), गिट रिपॉजिटरी देखें । मैंने उबंटू लॉन्चपैड में बैकपोर्ट के लिए कहा ।

एक बार पैच स्थापित करने, जोड़ने

 libata.force=2.00:disable

कर्नेल बूट पैरामीटर लिनक्स कर्नेल से डिस्क को छिपाएगा। डबल जांचें कि संख्या सही है; डिवाइस का नाम खोजने में मदद मिल सकती है:

(0)samsung-romano:~% dmesg | grep iSSD
[    1.493279] ata2.00: ATA-8: SanDisk iSSD P4 8GB, SSD 9.14, max UDMA/133
[    1.494236] scsi 1:0:0:0: Direct-Access     ATA      SanDisk iSSD P4  SSD  PQ: 0 ANSI: 5

वैकल्पिक हल

यूनिक्स StackExchange उपयोगकर्ता इमैनुएल द्वारा https://unix.stackexchange.com/a/103742/52205205 में उत्तर दिया गया

आप कम से कम कमांड जारी करके सस्पेंड समस्या का समाधान कर सकते हैं

echo 1 > /sys/block/sdb/device/delete

निलंबित करने से पहले।

इसे स्वचालित करने के लिए, मैंने निम्नलिखित फ़ाइल जोड़ी: (झंडे ध्यान दें, यह निष्पादन योग्य होना चाहिए)

-rwxr-xr-x 1 root root 204 Dec  6 16:03 99_delete_sdb

निर्देशिका में /etc/pm/sleep.d/

#!/bin/sh

# Tell grub that resume was successful

case "$1" in
    suspend|hibernate)
        if [ -d /sys/block/sdb ]; then
            echo Deleting device sdb 
            echo 1 > /sys/block/sdb/device/delete       
        fi
        ;;
esac

... और अब सिस्टम सही तरीके से (और फिर से शुरू) निलंबित करता है। मैंने स्निपेट को जोड़ा

if [ -d /sys/block/sdb ]; then
      echo Deleting device sdb 
      echo 1 > /sys/block/sdb/device/delete     
fi

करने के लिए /etc/rc.localभी, अच्छा उपाय।


धन्यवाद @Rmano, गूंज सामान काम किया। लेकिन यह स्पष्ट नहीं है, मुझे 99_delete_sdbनिष्पादन योग्य फ़ाइल कहां रखनी चाहिए ? में /etc/rc0.d/हो सकता है?
सेर्गेई मेलेखिन

क्षमा करें --- ने प्रासंगिक जानकारी जोड़ी।
रामानो

5

मैंने आपके लिए एक कर्नेल पैच लिखा और लिखा जो बूट समय पर एक डिस्क को अक्षम करने की क्षमता को लागू करता है, ताकि आपको इसे udv में अक्षम करने, या प्रारंभिक बूट के दौरान प्रतीक्षा करने की आवश्यकता न हो।

http://dev.gentoo.org/~robbat2/patches/3.13-libata-disable-disks-by-param.patch

बहुत आसानी से कई गुठली पर लागू होना चाहिए (इसके ऊपर की पंक्ति 2013-05-21 / v3.10-rc1 * जोड़ी गई थी, लेकिन उस पंक्ति के बिना मैन्युअल रूप से सुरक्षित रूप से लागू की जा सकती है)।


1
आपके प्रयासों के लिए धन्यवाद। शायद आप टिप्पणी कर सकते हैं (उन लोगों के लिए जो कर्नेल पैच से परिचित नहीं हैं), पैच कैसे लागू करें और इसका उपयोग कैसे करें (शायद sdb=disableकर्नेल पैरामीटर के रूप में)।
मपी

1
kernel.org/doc/Documentation/applying-patches.txt सामान्य रूप से कर्नेल पैच लागू करने को कवर करता है, लेकिन कई वितरणों में पैच लगाने के विशिष्ट तरीके होते हैं। यह पैच अधिक विशेष रूप से libata के लिए 'अक्षम' बल ध्वज को लागू करता है। उपयोगकर्ता को libata.force = ID के साथ इसका उपयोग करने की आवश्यकता होगी: ID जहां एक नंबर या नंबर है। अक्षम करें। प्रश्नावली में ड्राइव को पहचानने वाली नलिका।
रॉबट 2

मुझे नहीं पता कि यह निर्देश क्या है: wiki.ubuntu.com/Kernel/BuildYourOwnKernel अप-टू-डेट है। मैं कोशिश करूँगा अगर मैं इस सप्ताह कर सकता हूँ ...
Rmano

वैसे, सैमसंग लैपटॉप के मामले में कमांड संभवतः "libata.force = 2.00: अक्षम" grep iSSD /var/log/syslogहोना चाहिए ( आपको संकेत देना चाहिए)।
रमानो

1
FYI करें, यह 3.13 के लिए कर्नेल के साथ-साथ स्थिर गिरी के पेड़ में विलय हो गया है। हालाँकि, विकल्प को स्वीकार्य नहीं किया गया था।
रॉबट 2

0

मैंने इस पर शोध किया है और एक समाधान पाया है जिसे उबंटू पर काफी आसानी से लागू किया जा सकता है। डिस्ट्रो kmod का उपयोग करता है, इसलिए निम्नलिखित को उस पर ठीक काम करना चाहिए और किसी भी डिस्ट्रो में kmod का उपयोग करना चाहिए।

आपके द्वारा उपयोग किए जा रहे ड्राइवर के आधार पर, यदि आप सभी SATA उपकरणों को अक्षम करना चाहते हैं, तो आपको इसे ब्लैकलिस्ट करना होगा। कोशिश करें lsmod | grep sataऔर पता करें कि आप किस ड्राइवर का उपयोग कर रहे हैं। फिर अपनी काली सूची में जोड़ने के /etc/modprobe.d/लिए एक नई फ़ाइल बनाएं echo blacklist (module) > blacklist.confmkinitramfsइसके प्रभाव के लिए अपने initramfs को फिर से बनाएँ । रीबूट।

वैकल्पिक रूप से, बस modprobe.blacklist=(module)अपने कर्नेल मापदंडों में जोड़ें ।


1
यह हार्ड ड्राइव सहित सभी साटा उपकरणों को निष्क्रिय कर देगा, इसलिए मेरा लैपटॉप अब बूट नहीं होगा। और sata समर्थन को कर्नेल में संकलित किया जाता है (मॉड्यूल के रूप में नहीं), इसलिए मैं इसे ब्लैकलिस्ट नहीं कर सकता।
सेर्गेई मेलेखिन

ठीक है, तो बस अपने लैपटॉप को खोलें और ड्राइव को हटा दें ...
हेक्टर

दुर्भाग्य से मैं इसे करने के लिए सक्षम नहीं हूं - यह मुख्य तार पर टांका लगाया गया है, न किटाटा केबल के माध्यम से जुड़ा हुआ है। मैं यह भी नहीं कह रहा हूं कि अगर मैं इसे हटा देता हूं तो लैपटॉप कार्यात्मक होगा।
सर्गेई मेलेखिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.