पूरी तरह से एक असफल डिस्क को अनदेखा करने के लिए लिनक्स कर्नेल> 3.0 कैसे बताएं?


23

मैं बस पर एक SATA हार्ड डिस्क के साथ एक सैमसंग लैपटॉप (Chronos S7) है ata:1, जो के रूप में पाया जाता है /dev/sda, पर एक 8 जी एसएसडी ata:2, /dev/sdbSATA अंतरफलक के बाकी पर विभिन्न अन्य उपकरणों, और।

समस्या यह है कि एसएसडी डिस्क है

  • मुख्य बोर्ड के लिए मिलाप (unmovable)
  • पर्दाफाश (यह किसी भी ऑपरेशन के लिए I / O त्रुटियां देता है)
  • यह बायोस में प्रकट नहीं होता है (शायद इसलिए कि यह टूट गया है)

अब यह डिस्क:

  • फ़ेलिंग डिस्क की जाँच करने के लिए तीन से पाँच मिनट का समय देता है, जो कि कष्टप्रद है;
  • लेकिन सबसे ज्यादा परेशान करने वाली बात यह है कि सिस्टम फेल होने के कारण सस्पेंड नहीं हो पाता है /dev/sdb

ध्यान दें कि मैं बूट में देरी के साथ रह सकता हूं --- मुझे कौन सी चिंता है फिर से शुरू / निलंबित करें।


तो सवाल यह है: क्या मैं कर्नेल को ata: 2 पर डिवाइस की जांच करने से बचने के लिए कह सकता हूं?

पुराने कर्नेल में (<3.0), जब मैं अभी भी स्रोत में थोड़ी खुदाई करने में सक्षम था, तो शैली का एक कमांड-लाइन पैरामीटर hdb=ignoreथा जिसने चाल चली होगी।

मैं सभी चाल के साथ नीचे प्रस्तावित की कोशिश की है udevऔर libata:forceकोई लाभ नहीं हुआ कर्नेल पैरामीटर,। विशेष रूप से, निम्नलिखित काम नहीं करता है:

  1. निम्न /etc/udev/rules.d/फ़ाइल में से एक में जोड़ना (जैसे जल्दी निष्पादन में 00-ignoredisk.rulesया देर से 99-ignoredisk.rulesया दोनों स्थानों में)

    SUBSYSTEMS=="scsi", DRIVERS=="sd", ATTRS{rev}=="SSD ", ATTRS{model}=="SanDisk iSSD P4 ", ENV{UDISKS_IGNORE}="1" 
    

    KERNEL=="sdb", ENV{UDISKS_IGNORE}="1"
    

    न तो बहुत अधिक मध्यवर्ती समाधान --- यह बूट को बूट के बाद सुलभ नहीं बनाता है, लेकिन इसे बूट पर जांचा जाता है, और फिर भी निलंबित होने पर जांच की जाती है - जिससे निलंबन विफल हो जाता है।

  2. सिस्टम फ़ाइलों को संपादित करना /lib/udev/rules.d/60-persistent-storage.rules(और udisks, udisks2) बदलना

    KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md", GOTO="persistent_storage_end"
    

    सेवा मेरे

    KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md|sdb*", GOTO="persistent_storage_end"
    

    फिर से, इसका कुछ प्रभाव होता है, डिस्क को उपयोक्ता से मास्किंग करता है, लेकिन डिस्क अभी भी कर्नेल को दिखाई देता है।

  3. डीएमए को कम करने के लिए सभी संभावित संयोजनों (अच्छी तरह से, उनमें से बहुत से) libata:force(उदाहरण के लिए यहां पाए गए) के साथ बूट करना , कम गति या असफल डिस्क के बारे में जो भी काम नहीं करता है ---। पैरामीटर का उपयोग किया जाता है, लेकिन डिस्क अभी भी जांच की जाती है और विफल रहती है।

    Http://paste.ubuntu.com/6186145/ पर पूरा udevadm info -a -n /dev/sdbचिपकाया गया

    smartctl -i /dev/sdb -T permissive देता है:

    root@samsung-romano:/home/romano# smartctl -i /dev/sdb -T permissive
    smartctl 5.43 2012-06-30 r3573 [x86_64-linux-3.8.0-31-generic] (local build)
    Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
    
    Vendor:               /1:0:0:0
    Product:              
    User Capacity:        600,332,565,813,390,450 bytes [600 PB]
    Logical block size:   774843950 bytes
    >> Terminate command early due to bad response to IEC mode page
    

    जो स्पष्ट रूप से गलत है। फिर भी:

    root@samsung-romano:/home/romano# fdisk -b 512 -C 970 -H 256 -S 63 /dev/sdb
    fdisk: unable to read /dev/sdb: Input/output error
    

(से एसएसडी डेटा http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579 )।


क्षमा करें यदि यह बहुत स्पष्ट है, लेकिन चूंकि आपने अपने प्रश्न में शामिल नहीं किया है: क्या आपने सुनिश्चित किया है कि डिवाइस का नाम या UUID में सूचीबद्ध नहीं है /etc/fstab? क्योंकि बूट पर देरी पहले कर्नेल या udv के कारण हो सकती है, जो कि लगता है, लेकिन यह भी बाद में fsck द्वारा, जब पढ़ रहा हो fstab
टेरेसा ई जूनियर

हां, सिस्टम फ़ाइलों में / dev / sdb (या इसके विभाजन) का कोई उल्लेख नहीं है। देरी शुरू होने से पहले ही देरी हो जाती है ... यह एक खूंटे में है (क्योंकि बूट समानांतर में जारी है), लेकिन यह अधिक मौलिक स्तर पर है। लेकिन वास्तव में बूट देरी समस्या का कम है --- अगर केवल मैं सस्पेंड / रिज्यूम के दौरान डिस्क को अनदेखा कर सकता हूं, ताकि काम को निलंबित कर दिया जाए तो मुझे खुशी होगी। (फिर भी धन्यवाद)।
रमनो

क्या आप initrd का उपयोग कर रहे हैं? अगर ऐसा है तो किसका?
hildred

@ बच्चों: मैं Ubuntu 13.04 से स्टॉक कर्नेल और इनट्राम्राम्स का उपयोग कर रहा हूं। मैं वहां AHCI या सभी SATA को निष्क्रिय कर सकता हूं, लेकिन तब मेरा सिस्टम मर चुका है --- बिल्कुल भी डिस्क नहीं।
रमानो

डेबियन (और उम्बुत्तु) एटा सबसिस्टम को मॉड्यूल के रूप में संकलित करता है। क्या आपने मॉड्यूल को पैरामीटर सेट करने की कोशिश की है जब यह initrd द्वारा लोड किया गया है?
हल्दी

जवाबों:


26

libataएक noprobe विकल्प बिल्कुल नहीं है; यह एक विरासत आईडीई विकल्प था ...

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

अपडेट पैच अब अपस्ट्रीम है (कम से कम 3.12.7 स्टेबल कर्नेल में)। यह Ubuntu 14.04 (जो 3.13-स्थिर पर आधारित है) के साथ वितरित मानक कर्नेल में है।

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

 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

महत्वपूर्ण संख्या ata2.00ऊपर की पहली पंक्ति में है।


बहुत बहुत धन्यवाद। जैसे ही मुझे याद होगा कि मैं अपने उबंटू पर एक कर्नेल को कैसे संकलित और स्थापित कर सकता हूं, इसे जांचने की कोशिश करूंगा। दुर्भाग्य से, मेरे पास एक बहुत ही जटिल सप्ताह होगा ...
रमनो

1
+1 यह मेरे द्वारा पोस्ट की गई चाल से स्पष्ट रूप से बेहतर है। मुझे उम्मीद है कि यह आधिकारिक हो जाएगा।
इमैनुएल

1
ठीक है, पैच का परीक्षण किया। यह काम करता हैं। यदि आपको इसे ऊपर की ओर धकेलने की आवश्यकता है तो मैं अपना टेस्टेड-बाय: पैच में जोड़ सकता हूं --- आपके पास मेरी प्रोफाइल में मेरा सच्चा ईमेल है। मैंने इसे wiki.ubuntu.com/Kernel/BuildYourOwnKernel के निर्देशों का पालन करते हुए ( क्वर्की के साथ) स्थापित किया ।
रमानो

1
@ illumin --- --- बस उस अर्थ में उत्तर संपादित किया है --- इसके स्वीकृत होने की प्रतीक्षा करें।
रमनो

1
GENTOO प्यार करने के लिए एक और कारण !!
eyoung100

15

हार्डवेयर समस्याओं का हार्डवेयर समाधान है। क्या आपने ड्राइव की बिजली आपूर्ति को अनसॉल्वड या कट करने पर विचार किया?

संपादित करें: ठीक है अगर एक विकल्प नहीं है लोग इसे हार्ड-ड्राइव को गर्म करने से पहले उपयोग कर रहे हैं। आप अपनी ड्राइव को निष्क्रिय करने के लिए इसका उपयोग कर सकते हैं।

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

ध्यान दें कि कोई भी अन्य प्रक्रिया SATA बस के स्कैन को बाध्य कर सकती है, और फिर इसे वापस बनाती है। लैपटॉप को हाइबरनेट करने से ठीक पहले ऐसा करने की कोशिश करें।

ओपी द्वारा संपादित: यह काम किया । मैंने निम्नलिखित फ़ाइल जोड़ी:

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

सामग्री के साथ:

#!/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

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


1
अगर यह सच होता। मैं यह भी नहीं कह सकता कि कौन सी चिप (या चिप्स) एसएसडी ड्राइव हैं --- सबसे अधिक अचिह्नित हैं। और एक चिप को खोलना सुरक्षित नहीं है --- तीन-राज्य पिन के बारे में क्या? मैंने लैपटॉप को यह उम्मीद करते हुए खोला कि एसएसडी ड्राइव किसी प्रकार के बेटीबोर्ड से जुड़ा था। कोई भाग्य नहीं। (और इसके अलावा, कर्नेल ड्राइवरों को लिखने में सबसे अधिक कठिनाई खराब डिज़ाइन किए गए hw के आसपास काम करना है)।
रमनो

@ रमनो "डिलीट" ट्रिक कैसे करता है?
इमैनुएल

यह काम करता है --- "डिलीट" ट्रिक के बाद मैं सस्पेंड कर सकता हूं। बहुत बहुत धन्यवाद। (यह अभी भी बूट में देरी करता है, लेकिन अच्छी तरह से --- कोई समस्या नहीं है)।
रामानो

के बारे में याद दिलाने के लिए बहुत बहुत धन्यवाद delete
माइकल शगोरिन

3

BIOS

क्या यह डिवाइस आपके BIOS के माध्यम से किसी भी प्रकार से दिखाई नहीं देता है?

अक्सर एचडीडी को "ऑटो" मोड में कॉन्फ़िगर किया जाता है, मैं इसके माध्यम से जाना और सुनिश्चित करूंगा कि ये डिवाइस अक्षम स्थिति में हैं और यहां तक ​​कि केवल एक एचडीडी को स्पष्ट रूप से सक्षम करने और बाकी सब को अक्षम करने की सीमा तक जाते हैं।

कर्नेल बूट विकल्प

अक्सर बार आप विभिन्न उपतंत्रों को बूट करने वाले लिनक्स कर्नेल द्वारा स्वतः-पहचाने जाने से अलग बूट विकल्पों के उपयोग से निष्क्रिय कर सकते हैं जिन्हें स्विच के रूप में इसे पारित किया जा सकता है।

यदि सभी विकल्प यहां सूचीबद्ध नहीं हैं, तो अधिकांश:

एक संक्षेप पुस्तक में लिनक्स

आप विशेष रूप से, अध्याय 7: एक कर्नेल को अनुकूलित करते हुए , विशेष रूप से ओ'रिली पुस्तक, लिनक्स कर्नेल के माध्यम से स्किम करना चाह सकते हैं ।

यह पुस्तक इसके लेखक ग्रेग क्रोहा-हार्टमैन द्वारा अपनी निजी वेबसाइट पर मुफ्त में उपलब्ध कराई गई है। पूरी किताब को भी डाउनलोड किया जा सकता है।


नहीं, BIOS में इस डिस्क का कोई निशान नहीं है; मैं देख सकता हूँ HDD और डीवीडी और नहीं। असफल होने से पहले, विंडोज में (अब सिस्टम में अब कोई विंडोज़ नहीं है) इसका उपयोग मुख्य डिस्क के लिए स्पीड-अप कैश के रूप में किया गया था। मैंने विरासत, ऑफ, यस या ऑटो (सभी डिस्क के लिए) को एएचसीआई मोड सेट करने की कोशिश की, लेकिन इससे कुछ भी नहीं बदला या (ऑफ के लिए) बस सिस्टम को बूट नहीं किया।
रमनो

दूसरी विधि जिसका मैंने अतीत में उपयोग किया है, जब कर्नेल बूट करने के लिए इसे ग्रब (कर्नेल बूट विकल्प) के माध्यम से बता रहा है noide=....। हार्डवेयर के ऑटो-डिटेक्शन को अक्षम करने के लिए आप बूटिंग कर्नेल को प्रदान कर सकने वाले अन्य विकल्पों की मेजबानी कर सकते हैं।
SLM

डिस्क SATA (scsi) है, कोई IDE नहीं है। और hdb=noprobeविकल्प ने मस्टर को एससीआई में पारित नहीं किया है (मुझे लगता है कि इसे 2.6.x के आसपास समाप्त कर दिया गया था), इसलिए यह मौजूद नहीं है (जैसे ही मुझे पता है) sdb=noprobeया एक ata:2=noprobeविकल्प। मैंने kernel-parameters.txtकर्नेल स्रोत की सभी फ़ाइल (लगभग) पढ़ ली हैं और मुझे सही पैरामीटर नहीं मिल रहा है। यदि आप किसी को जानते हैं, तो कृपया उत्तर में बताएं --- मैं वास्तव में आभारी रहूंगा।
रमनो

@ रमनो - मुझे इसे खोजने के लिए और अधिक खुदाई करनी होगी, मुझे एचडीडी और बस का पता लगाने से संबंधित कई विकल्प याद हैं, लेकिन मेरे सिर के ऊपर से नहीं।
SLM

@Rmano - विकल्प के बारे में क्या:libata.dma=
SLM

0

लिनक्स लॉक की जांच करने का तरीका: sudo hdparm -I /dev/sdX(X = a..z के साथ; आपको पता होना चाहिए कि आपका ड्राइव कौन सा डिवाइस है)। (बड़े) आउटपुट के अंत में, आपको अंतिम 10 पंक्तियों में पढ़ने में सक्षम होना चाहिए *not* locked:।

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