디스크가 연결되어 있지 않은 것처럼 리눅스 커널이 디스크를 완전히 무시하도록하려면 어떻게해야합니까?


18

주의

답을 보려면 아래로 스크롤 하십시오 (점은 적지 만 올바른 것입니다). 이 문제는 커널 3.12.7 이상에있는 패치로 해결됩니다. 나는 그것이 이전 것들로 백 포트되기를 바랍니다.

내 노트북은 Samsung Chronos 시리즈 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

그 후 많은 검사, 부팅 지연, 종료 지연 및 일시 중지가 불가능 해집니다.

ata2 링크의 모든 것을 무시하도록 Linux에 지시 할 수 있습니까? 이 줄을 /etc/udev/rules.d/10-local.rules에 추가하려고했습니다.

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

그러나 작동하지 않습니다.

다른 한편으로, 누군가 Windows를 사용하지 않고 "캐시"모드로 남아있는 경우 SSD를 재설정하는 방법을 알고 있다면 ... 또는 "라이브"창을 부팅하여 동일한 작업을 수행합니다.

감사!

추가 된 데이터 :

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의 SSD 데이터 ).

추가 생각 :

Linux를 설치하기 전에 Intel Smart Response Technology의 부작용으로이 기능이 비활성화되지 않을 수 있습니까? 그렇다면 컴퓨터에 창을 다시 설치하지 않는 방법을 어떻게 확인할 수 있습니까? 아니면이 어둠 속에서 촬영입니까? (BIOS에서는 SSD 드라이브가 표시되지 않으며 Intel SRT에 대해서는 아무것도 없습니다).

중복으로 표시하기 :

질문 제목을 변경했습니다. 링크 된 질문이 내 문제에 답한다고 생각하지 않습니다. SSD에 문제가 있음 을 긍정적으로 알고 있습니다. 나는 리눅스 커널에게 그것을 조사하지 말라고 말할 수 있는지 묻고있다.


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 커널 드라이버 용 패치를 작성했습니다 ( 유닉스 / 리눅스 스택 교환 사이트에 있음 ).

업데이트 1 이제 패치가 업스트림 (적어도 3.12.7 안정적인 커널에서)되었습니다 ( git 저장소 참조) . 우분투 런치 패드에서 백 포트를 요청했습니다 .

업데이트 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

커널 매개 변수를 추가하려면 (일시적으로 그리고 영구적으로)이 Q & A를 확인하십시오 : 커널 부트 매개 변수를 어떻게 추가합니까?

해결 방법

적어도 suspend-resume을 활성화하는 문제는 /unix//a/103742/52205의 Unix StackExchange 사용자 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.
Michael Shigorin

@kikuto --- 제안 된 편집은 약간 주제가 아닌 것처럼 보였지만 커널 부팅 매개 변수를 추가하는 방법에 대한 링크를 추가했습니다. 감사합니다.
Rmano

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

당신은 일치하도록 시도 할 수있다 "서브 시스템""드라이버" 키, "바인드합니다 {REV}"바인드합니다을 {모델} , 다음 지정 속성 "UDISKS" 무시하는 변수.

99-hide-ssd.rules 파일의 내용은 다음과 같습니다.

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

nano에서 변경 사항을 저장하려면 ... Ctrl+ O, Enter마지막으로 Ctrl+ X.

2) 마지막으로 udev 규칙을 다음과 같이 새로 고칩니다.

  • sudo udevadm trigger

참고 : 함께 ENV {UDISKS_IGNORE} = "1" 이 우분투 12.10 및 13.04의 디스크를 무시합니다.
Ubuntu 12.04의 경우 변수는 ENV {UDISKS_PRESENTATION_HIDE} = "1" 입니다.

도움이 되었기를 바랍니다.


시도했지만 여전히 부팅시 sdb가 감지되어 지연됩니다. 나는 커널 라인 매개 변수 옵션이어야한다고 생각하지만 아무것도 찾을 수 없었습니다 ... 한숨. 어쨌든 고마워
Rmano

@Rmano ... 커널 키만 일치 시키려고한다면?. 규칙은 KERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" ... 디스크가 udev에서 감지되는지 확인합니다.
Roman Raguet 1

나는 많은 시간이 걸렸다는 것을 알고 있습니다. 그러나이 문제는 여전히 답이 없습니다 ... 제안 사항이 없습니다. 어쨌든 감사합니다.
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 = ignore kernel command line option ... 그리고 불행히도 그렇습니다. 보증 후입니다.
Rmano

BTW, 나는 그 파일을 가지고 있지 않았기 때문에 그것을 추가했다.
Rmano

2

다른 디스크가 ahci를 사용하지 않거나 SSD를 사용하지 않는 경우 해당 디스크의 커널 드라이버를 제거 할 수 있습니다.

해당 세션에서 제거하려면 (다음 재부팅까지) 다음을 실행하십시오.

sudo rmmod ahci

다시로드하려면 다음을 실행하십시오.

sudo modprobe ahci

모든 것이 제대로 작동하는 것을 확인하면 이제 완전히 비활성화 할 수 있습니다 (다음 부팅에서는로드하지 마십시오). /etc/modprobe.d/blacklist.conf 파일을 열고 다음 행을 추가하십시오.

blacklist ahci 

ssd 드라이버를 블랙리스트에 올리려면 ahcisd로 바꾸십시오.


2
그러면 디스크가없는 시스템이 ata1나옵니다 ata2. 메인 드라이브가 켜져 있고, 실패한 SSD가 있습니다. BIOS에서 ahci 모드를 비활성화하면 시스템을 부팅 할 수 없습니다 ...
Rmano

1

내가 아는 한, SSD를 제거하는 것 외에는 메시지를 제거 할 수있는 방법이 없습니다.


불행히도 SSD는 메인 보드에 납땜되어 있습니다. 그냥 8G 칩입니다.
Rmano

칩의 LED 중 하나를 잘라 내고 + 5V 라인을 찾아 X-Acto로 잘라내십시오.
K7AAY

... 어떤 칩이 어디에 있는지 만 알고 있다면. 그런 다음 그로 인해 더 많은 문제가 발생할 수 있습니다 (구동되지 않은 3 상태 ...).
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.