मैं लिनक्स कर्नेल को डिस्क को पूरी तरह से अनदेखा करने के लिए कैसे कह सकता हूं जैसे कि यह भी जुड़ा नहीं था?


18

नोटिस

कृपया उत्तर के लिए नीचे स्क्रॉल करें (इसमें कुछ बिंदु हैं लेकिन यह सही है)। समस्या को एक पैच द्वारा हल किया जाता है जो कर्नेल में होगा 3.12.7 और ऊपर; मुझे उम्मीद है कि यह पहले वाले लोगों के लिए भी वापस आ जाएगा।

मेरा लैपटॉप एक सैमसंग क्रोनोस सीरी है। 7. उबंटू ग्नोम रीमिक्स 13.04, इंटेल अपडेटेड ड्राइवरों के साथ।

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

समस्या यह है कि डिस्क udv द्वारा मान्यता प्राप्त है:

KERNEL[9.515930] add      /devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb (block)
ACTION=add
DEVNAME=sdb
DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
DEVTYPE=disk
MAJOR=8
MINOR=16
SEQNUM=1785
SUBSYSTEM=block
UDEV_LOG=3

और उसके बाद यह बहुत सारे चेक में विफल रहता है, बूट में देरी, शटडाउन में देरी, और बनाना (मुझे लगता है) असंभव को निलंबित कर देता है।

क्या लिनक्स को पूरी तरह से ata2 लिंक पर कुछ भी अनदेखा करना संभव है? मैंने इस पंक्ति को /etc/udev/rules.d/10-local.rules में जोड़ने का प्रयास किया

SUBSYSTEMS=="pci"  DRIVERS=="ahci" KERNELS=="ata2" OPTIONS=="ignore_device"

लेकिन यह काम नहीं करता है।

दूसरी ओर, अगर कोई जानता है कि एसएसडी को रीसेट कैसे करना है अगर इसे विंडोज का उपयोग किए बिना "कैश" मोड में छोड़ दिया गया था ... या ऐसा करने के लिए "लाइव" विंडोज़ बूट करने के लिए ...

धन्यवाद!

डेटा जोड़ा गया:

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 )।

अतिरिक्त THOUGHT:

क्या यह सब इंटेल स्मार्ट रिस्पांस टेक्नोलॉजी का साइड इफेक्ट होने के कारण लिनक्स स्थापित करने से पहले अक्षम नहीं किया जा सकता है? यदि हाँ, तो मैं मशीन पर विंडोज़ को फिर से स्थापित करने के बारे में कैसे जाँच सकता हूँ? या यह अंधेरे में एक शॉट है? (बायोस में SSD ड्राइव शो नहीं करता है और Intel SRT के बारे में कुछ भी नहीं है)।

डुप्लिकेट के रूप में विपणन के बारे में:

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


2
यदि आप जिस डिस्क को छिपाना चाहते हैं वह "sdb" है, तो क्या आप कृपया "udevadm info -a -n / dev / sdb" का पूरा आउटपुट पोस्ट कर सकते हैं?
रोमन रागेट

1
यह लिंक किए गए प्रश्न का कोई डुप्लिकेट नहीं है। क्या आप कृपया इसे डुप्लिकेट के रूप में चिह्नित कर सकते हैं? मैंने सवाल को बेहतर ढंग से व्यक्त करने के लिए शीर्षक को बदल दिया। एसएसडी चेक के बारे में नहीं है, लिनक्स पर डिस्क प्रबंधन पर एक सामान्य सवाल है। धन्यवाद!
रमनो

1
बस क्या समस्या है ... डिस्क को अनप्लग करना?
बृहम

1
सुपर उपयोगकर्ता पर समान प्रश्न: ड्राइव के लिए कर्नेल जांच को कैसे अक्षम करें?
ændrük

3
Braiam: SSD डिस्क को मेनबोर्ड में मिलाया जाता है।
रमनो

जवाबों:


14

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

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

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

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

अद्यतन 2 पैच Ubuntu ट्रस्टी थार 14.04 के लिए मानक गिरी में है; इसलिए अब केवल बूट पैरामीटर के अतिरिक्त जोड़ की जरूरत है।

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

 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

एक कर्नेल पैरामीटर (बॉट को अस्थायी और स्थायी रूप से जोड़ने के लिए) आप इस Q & A की जाँच कर सकते हैं: मैं कर्नेल बूट पैरामीटर कैसे जोड़ूँ?

वैकल्पिक हल

कम से कम सस्पेंड-रेज़्यूमे को सक्षम करने की समस्या को /unix//a/103742/52205 में Unix StackExchange user Emmanuel द्वारा हल किया गया है । रूट के रूप में, कमांड जारी करें:

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

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

इसे स्थायी बनाने के लिए, निम्न फ़ाइल को इसमें जोड़ें /etc/pm/sleep.d/और इसे निष्पादन योग्य बनाएँ :

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

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

#!/bin/sh

# Delete the failing disk so that it will not block suspend

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

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


1
के बारे में याद दिलाने के लिए धन्यवाद /sys/block/*/device/delete
माइकल शगोरिन

@kikuto --- आपका प्रस्तावित संपादन थोड़ा-सा विषय-वस्तु लग रहा था, लेकिन मैंने एक लिंक जोड़ा कि कर्नेल बूट पैरामीटर कैसे जोड़ा जाए। धन्यवाद।
रमनो

5

आप निम्नलिखित जानकारी (udevadm info -a -n / dev / sdb के आउटपुट) के साथ udev नियम बनाने का प्रयास कर सकते हैं

जानकारी:

looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0':
    KERNELS=="1:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{rev}=="SSD "
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="6"
    ATTRS{model}=="SanDisk iSSD P4 "
    ATTRS{state}=="running"
    ATTRS{queue_type}=="none"
    ATTRS{iodone_cnt}=="0x309"
    ATTRS{iorequest_cnt}=="0x30a"
    ATTRS{queue_ramp_up_period}=="120000"
    ATTRS{timeout}=="30"
    ATTRS{evt_media_change}=="0"
    ATTRS{ioerr_cnt}=="0x1d6"
    ATTRS{queue_depth}=="1"
    ATTRS{vendor}=="ATA     "
    ATTRS{device_blocked}=="0"
    ATTRS{iocounterbits}=="32"

1) udev नियम बनाएं।

  • sudo nano /etc/udev/rules.d/99-hide-ssd.rules

आप "SUBSYSTEMS " और "DRIVERS" कुंजियाँ, और "ATTRS {Rev}" और ATTRS {मॉडल} विशेषताओं का मिलान करने का प्रयास कर सकते हैं , फिर "UDISKS" असाइन करें इसे अनदेखा करने के चर ।

99-छिपाने-ssd.rules फ़ाइल की सामग्री होगी:

SUBSYSTEMS == "scsi", DRIVERS == "sd", ATTRS {Rev} == "SSD", ATTRS {मॉडल} == "SanDisk iSSD P4", ENV (UDISKS_IGNORE} = "1"

नैनो में परिवर्तन को बचाने के लिए ... Ctrl+ O, फिर Enterऔर अंत में Ctrl+ X

2) अंत में के साथ udev नियमों को ताज़ा करें:

  • sudo udevadm trigger

नोट: के साथ ENV {UDISKS_IGNORE} = "1" यह उबंटू 12.10 और 13.04 के लिए डिस्क पर ध्यान नहीं देगा।
उबंटू 12.04 के लिए चर ENV {UDISKS_PRESENTATION_HIDE} = "1" होगा

उम्मीद है की यह मदद करेगा।


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

@Rmano ... यदि आप केवल कर्नेल कुंजी से मेल खाते हैं? नियम KERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" होगा ... यह देखने के लिए कि क्या डिस्क udev में पाई गई है।
रोमन रागेट

मुझे पता है कि यह बहुत समय पहले था। लेकिन यह समस्या अभी भी उत्तर के बिना है ... किसी भी सुझाव ने काम नहीं किया। वैसे भी आप सभी का धन्यवाद।
रमनो

2

/server/112147/tell-ubuntu-to-ignore-dead-hard-drive-during-booting सुझाव देता है:

रूट के रूप में, अपने पसंदीदा टेक्स्ट एडिटर के साथ /etc/udev/rules.d/60-persistent-storage.rules खोलें ।

नीचे कुछ पंक्तियाँ, आप शायद इस तरह दिखने वाली एक पंक्ति देखेंगे:

अनुचित ब्लॉक डिवाइस के लिए नियम छोड़ें

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md ", GOTO = "persistent_storage_end" "sdb *" को उस दूसरी पंक्ति में जोड़ें, इसलिए यह इस तरह दिखता है:

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

सहेजें, रिबूट, और शायद यह काम करता है। यदि नहीं, तो ठीक है, क्या यह पोस्ट-वारंटी है?


कोशिश की, नसीब नहीं। अभी भी sdb ड्राइव है, फिर भी सस्पेंड को रोक रहा है। एक बार एक sdb अस्तित्व में है = कर्नेल कमांड लाइन विकल्प को अनदेखा करें ... और दुर्भाग्य से हाँ, यह पोस्ट-वारंटी है।
रामानो

BTW, मेरे पास वह फ़ाइल नहीं थी, इसलिए मैंने इसे जोड़ा ...
Rmano

2

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

उस सत्र को हटाने के लिए (अगले रिबूट तक), चलाएं:

sudo rmmod ahci

इसे फिर से लोड करें, चलाएं:

sudo modprobe ahci

यदि आप देखते हैं कि सब कुछ ठीक चल रहा है, तो आप अब इसे पूरी तरह से अक्षम कर सकते हैं (अगले जूते लोड न करें)। फ़ाइल खोलें /etc/modprobe.d/blacklist.conf , और निम्न पंक्ति जोड़ें:

blacklist ahci 

ssd ड्राइवरों को ब्लैकलिस्ट करने के लिए, बस sci को sd से बदलें


2
यह मुझे बिना किसी डिस्क के एक सिस्टम छोड़ देगा ... मुख्य ड्राइव चालू है ata1, असफल एसएसडी ata2। बायोस में अहिसी मोड को निष्क्रिय करने से सिस्टम
अप्राप्य हो जाता

1

मैं जो जानता हूं, उससे आपको एसएसडी को हटाने के अलावा, संदेश को हटाने का कोई तरीका नहीं है।


दुर्भाग्य से, एसएसडी मेनबोर्ड के लिए सोल्डर किया गया है। यह सिर्फ 8G चिप है।
रमनो

चिप पर लीड में से किसी एक को काटें, बेहतर 5V लाइन ढूंढें और एक्स-एक्टो के साथ काटें?
K7AAY

... अगर मुझे केवल यह पता था कि कौन सी चिप है, और यह कहां है। तब मुझे डर है कि इससे और भी समस्याएँ पैदा हो सकती हैं (अविभाजित तीन-राज्य ...)।
रमनो

1

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

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

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

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