ฉันจะบอกให้เคอร์เนล linux เพิกเฉยต่อดิสก์ราวกับว่ามันไม่ได้เชื่อมต่อได้อย่างไร


18

แจ้งให้ทราบ

โปรดเลื่อนลงเพื่อดูคำตอบ (มีคะแนนน้อย แต่เป็นคำตอบที่ถูกต้อง) ปัญหาได้รับการแก้ไขโดยแพตช์ที่จะอยู่ในเคอร์เนล 3.12.7 ขึ้นไป; ฉันหวังว่ามันจะกลับไปยังพอร์ตก่อนหน้าเช่นกัน

แล็ปท็อปของฉันคือ Samsung Chronos serie s 7 Ubuntu Gnome Remix 13.04 พร้อมไดรเวอร์ที่อัปเดตจาก Intel

ฉันมีปัญหากับไดรฟ์ SSD ภายใน (ความจุ 8G) มันล้มเหลวด้วยข้อผิดพลาด COMRESET และอินพุต / เอาต์พุต ฉันค่อนข้างมั่นใจว่าปัญหาคือฮาร์ดแวร์ น่าเสียดายที่ฉันไม่ได้ติดตั้ง Windows ไว้ในแล็ปท็อปเพื่อตรวจสอบว่าเป็นเรื่องของการกำหนดค่า SSD หรืออะไรก็ตาม

ปัญหาคือดิสก์รับรู้โดย udev:

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

และหลังจากนั้นมันล้มเหลวในการตรวจสอบจำนวนมากล่าช้าในการบูตการชะลอการปิดเครื่องและทำให้ (ฉันคิดว่า) ระงับเป็นไปไม่ได้

เป็นไปได้ไหมที่จะบอกให้ Linux ละเว้นสิ่งใด ๆ บนลิงก์ ata2 อย่างสมบูรณ์? ฉันพยายามเพิ่มบรรทัดนี้ใน /etc/udev/rules.d/10-local.rules

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

แต่มันไม่ทำงาน

ในทางกลับกันถ้าใครรู้วิธีการรีเซ็ต SSD หากมันถูกทิ้งไว้ในโหมด "แคช" โดยไม่ต้องใช้ Windows ... หรือเพื่อบูตหน้าต่าง "สด" เพื่อทำเช่นเดียวกัน ...

ขอบคุณ!

ข้อมูลที่เพิ่ม:

udevadm info -a -n /dev/sdbวางเต็มไปที่http://paste.ubuntu.com/6186145/

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

(ข้อมูล SSD จากhttp://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579 )

ความคิดเพิ่มเติม:

ทั้งหมดนี้เป็นผลข้างเคียงของเทคโนโลยี Intel Smart Response ที่ไม่ได้ถูกปิดใช้งานก่อนที่จะติดตั้ง Linux หรือไม่? ถ้าใช่ฉันจะตรวจสอบว่ามีการติดตั้ง windows บนเครื่องได้อย่างไร หรือนี่เป็นการยิงในที่มืด? (ในไบออสไดรฟ์ SSD ไม่แสดงขึ้นมาและไม่มีอะไรเกี่ยวกับ Intel SRT)

เกี่ยวกับการทำเครื่องหมายว่าซ้ำซ้อน:

ฉันเปลี่ยนชื่อคำถาม ฉันไม่คิดว่าคำถามที่เชื่อมโยงตอบปัญหาของฉัน ฉัน รู้ดีว่า SSD กำลังล้มเหลว ฉันกำลังถามว่าเป็นไปได้หรือไม่ที่จะบอกให้เคอร์เนล linux ไม่ทำการสอบสวนเลย


2
หากดิสก์ที่คุณต้องการซ่อนคือ "sdb" คุณช่วยกรุณาโพสต์ผลลัพธ์ทั้งหมดของ "udevadm info -a -n / dev / sdb" ได้ไหม
Roman Raguet

1
นี่ไม่ใช่คำถามที่เชื่อมโยงกันเลย คุณช่วยกรุณายกเลิกการทำเครื่องหมายว่าซ้ำกันได้หรือไม่? ฉันเปลี่ยนชื่อเพื่อถ่ายทอดคำถามให้ดีขึ้น ไม่เกี่ยวกับการตรวจสอบ SSD เป็นคำถามทั่วไปเกี่ยวกับการจัดการดิสก์บน Linux ขอบคุณ!
Rmano

1
มีปัญหาอะไรกับ ... แค่ถอดดิสก์?
Braiam


3
Braiam: ดิสก์ SSD นั้นถูกบัดกรีเข้ากับเมนบอร์ด
Rmano

คำตอบ:


14

วิธีแก้ปัญหาสองข้อที่นี่: วิธีหนึ่งใช้ได้อย่างรวดเร็วแม้ว่าจะแก้ปัญหาเพียงบางส่วนเท่านั้นส่วนวิธีอื่นนั้นสมบูรณ์ แต่คุณต้องการคอมไพล์เคอร์เนลของคุณเอง

คำตอบที่ถูกต้องคือแพทช์เคอร์เนล

Robin H. Johnson เขียนแพตช์สำหรับไดรเวอร์เคอร์เนล SATA ( ค้นหาได้จากไซต์แลกเปลี่ยน Unix / Linux ) ที่ซ่อนไดรฟ์ไว้อย่างสมบูรณ์

1 การปรับปรุงแพทช์อยู่ในขณะนี้ต้นน้ำ (อย่างน้อยใน 3.12.7 มั่นคงเคอร์เนล) ดู ที่เก็บคอมไพล์ ผมขอย้ายกลับใน Launchpad

อัปเดต 2แพทช์อยู่ในเคอร์เนลมาตรฐานสำหรับ Ubuntu Trusty Thar 14.04; ดังนั้นตอนนี้จำเป็นต้องเพิ่มพารามิเตอร์การบูตต่อไปนี้เท่านั้น

เมื่อติดตั้งแพตช์แล้วให้เพิ่ม

 libata.force=2.00:disable

พารามิเตอร์บูตเคอร์เนลจะซ่อนดิสก์จากเคอร์เนล Linux ตรวจสอบอีกครั้งว่าหมายเลขถูกต้อง การค้นหาชื่ออุปกรณ์สามารถช่วยได้:

(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

ในการเพิ่มพารามิเตอร์เคอร์เนล (บอทชั่วคราวและถาวร) คุณสามารถตรวจสอบคำถาม & คำตอบนี้: ฉันจะเพิ่มพารามิเตอร์การบู๊ตเคอร์เนลได้อย่างไร

วิธีแก้ปัญหา

อย่างน้อยปัญหาของการใช้งาน Suspend-ประวัติการทำงานได้รับการแก้ไขโดยโดยผู้ใช้ระบบปฏิบัติการยูนิกซ์ StackExchange Emmanuel ใน/unix//a/103742/52205 ในฐานะที่เป็น root ให้ใช้คำสั่ง:

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ขอบคุณสำหรับการเตือนเกี่ยวกับ
Michael Shigorin

@kikuto --- การแก้ไขที่เสนอของคุณดูเหมือนจะเป็นเรื่องเล็กน้อย แต่ฉันได้เพิ่มลิงก์ไปยังวิธีเพิ่มพารามิเตอร์การบูตเคอร์เนล ขอขอบคุณ.
Rmano

5

คุณสามารถลองสร้างกฎ udev ด้วยข้อมูลต่อไปนี้(ผลลัพธ์ของ udevadm info -a -n / dev / sdb)

ข้อมูล:

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 {model}จากนั้นกำหนดตัวแปร"UDISKS"เพื่อเพิกเฉย

เนื้อหาของไฟล์ 99-hide-ssd.rules จะเป็น:

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

การบันทึกการเปลี่ยนแปลงในนาโน ... Ctrl+ Oแล้วEnterและในที่สุดก็+CtrlX

2)ในที่สุดรีเฟรชกฎ udev ด้วย:

  • sudo udevadm trigger

หมายเหตุ:ด้วยENV {UDISKS_IGNORE} = "1"มันจะไม่สนใจดิสก์สำหรับ Ubuntu 12.10 และ 13.04
สำหรับ Ubuntu 12.04 ตัวแปรจะENV {} UDISKS_PRESENTATION_HIDE = "1"

หวังว่านี่จะช่วยได้


ลองแล้วยังคงมีการตรวจพบ sdb เมื่อบู๊ต (และชะลอ) ฉันคิดว่าควรเป็นตัวเลือกพารามิเตอร์บรรทัดเคอร์เนล แต่ฉันไม่พบอะไรเลย ... ถอนหายใจ ขอบคุณอยู่ดี
Rmano

@Rmano ... หากคุณพยายามจับคู่คีย์เคอร์เนลเท่านั้น กฎจะเป็นKERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" ... เพื่อดูว่าตรวจพบดิสก์ใน udev หรือไม่
Roman Raguet

ฉันรู้ว่ามันเป็นเวลานานแล้ว แต่ปัญหานี้ยังคงไม่มีคำตอบ ... ไม่มีข้อเสนอแนะใด ๆ ขอบคุณทุกคนอยู่ดี
Rmano

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 = ไม่สนใจตัวเลือกบรรทัดคำสั่งเคอร์เนล ... และน่าเสียดายใช่มันคือการรับประกันหลังการขาย
Rmano

BTW ฉันไม่ได้มีไฟล์นั้นดังนั้นฉันจึงเพิ่ม ...
Rmano

2

หากดิสก์อื่นของคุณไม่ได้ใช้ ahci หรือไม่ใช่ SSD คุณสามารถลบไดรเวอร์เคอร์เนลสำหรับพวกเขาได้

หากต้องการลบสำหรับเซสชันนั้น (จนกระทั่งรีบูตครั้งถัดไป) ให้รัน:

sudo rmmod ahci

เพื่อโหลดซ้ำให้รัน:

sudo modprobe ahci

หากคุณเห็นว่าทุกอย่างเรียบร้อยดีตอนนี้คุณสามารถปิดการใช้งานได้อย่างสมบูรณ์ (อย่าโหลดในบูทถัดไป) เปิดไฟล์/etc/modprobe.d/blacklist.confและเพิ่มบรรทัดต่อไปนี้:

blacklist ahci 

ไปยังบัญชีดำไดรเวอร์ ssd เพียงแค่แทนที่ahciกับsd


2
ที่จะปล่อยให้ฉันระบบโดยไม่ต้องดิสก์ใด ๆ ... ไดรฟ์หลักอยู่ที่ความล้มเหลวในata1 SSD ata2การปิดใช้งานโหมด ahci ในไบออสทำให้ระบบไม่สามารถบูตได้ ...
Rmano

1

จากสิ่งที่ฉันรู้ไม่มีทางที่จะลบข้อความนอกจากการลบ SSD ของคุณ


โชคไม่ดีที่ SSD นั้นถูกบัดกรีด้วยเมนบอร์ด มันเป็นเพียงชิป 8G
Rmano

ตัดหนึ่งในไฟ LED บนชิปควรหาสาย + 5V และตัดด้วย X-Acto?
K7AAY

... ถ้าฉันรู้ว่าชิปตัวไหนอยู่ที่ไหนและอยู่ที่ไหน ถ้าอย่างนั้นฉันก็กลัวว่ามันจะสร้างปัญหาได้มากขึ้น
Rmano

1

ฉันไปและเขียนโปรแกรมปรับปรุงเคอร์เนลสำหรับคุณที่ใช้ความสามารถในการปิดการใช้งานดิสก์เดียวในเวลาบูตเพื่อให้คุณไม่ต้องกังวลกับการปิดการใช้งานมันใน udev หรือรอระหว่างการบูตครั้งแรก

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

ควรนำไปใช้กับเมล็ดจำนวนมากได้อย่างง่ายดาย (บรรทัดด้านบนมันถูกเพิ่ม 2013-05-21 / v3.10-rc1 * แต่สามารถใช้ได้อย่างปลอดภัยด้วยตนเองโดยไม่มีบรรทัดนั้น)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.