드라이브에서 커널 프로빙을 비활성화하는 방법은 무엇입니까?


9

메인 보드에 30GB ExpressCache SanDisk SSD가 납땜 된 삼성 노트북이 있습니다. SSD가 죽었습니다 (어쨌든 액세스하려고 할 때 많은 오류가 발생합니다).하지만 여전히 커널 부팅에서 검색됩니다. 파티션이 있고 우분투의 통일성이 앱 서랍에 마운트되지 않은 드라이브 아이콘을 표시하며 최악의 경우 노트북을 일시 중지시킬 수 없습니다 ssd 장치에 suspend 명령을 보내는 데 실패했기 때문입니다. sdb = noprobe 커널 매개 변수를 전달하려고 시도했지만 3.8.0 커널 (Ubuntu 13.04)에서 오래 전에 사용되지 않는 것처럼 보입니다. 최근 커널에서 sata 장치를 비활성화하려면 어떻게해야합니까?

답변:


1

두 가지 해결책 : 하나는 적용하기가 빠르지 만 부분적으로 만 문제를 해결하지만 다른 하나는 완전한 해결책이지만 자신의 커널을 컴파일해야합니다.

정답은 커널 패치입니다.

Robin H. Johnson은 드라이브를 완전히 숨기는 SATA 커널 드라이버 용 패치를 작성했습니다 ( 유닉스 / 리눅스 스택 교환 사이트에 있음 ).

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

패치가 설치되면 추가

 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

해결 방법

https://unix.stackexchange.com/a/103742/52205의 Unix StackExchange 사용자 Emmanuel이 답변했습니다.

최소한 명령을 실행하여 일시 중단 문제점을 해결할 수 있습니다.

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/어쩌면?
Sergey Melekhin

죄송합니다 --- 관련 정보를 추가했습니다.
Rmano

5

부팅시 단일 디스크를 비활성화하는 기능을 구현하는 커널 패치를 작성하여 작성했기 때문에 udev에서 디스크를 비활성화하거나 초기 부팅 중 대기하는 데 신경 쓰지 않아도됩니다.

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

많은 커널에 매우 쉽게 적용되어야합니다 (위의 줄은 2013-05-21 / v3.10-rc1 *에 추가되었지만 해당 줄없이 수동으로 안전하게 적용 할 수 있음).


1
당신의 노력에 감사드립니다. 아마도 (커널 패치에 익숙하지 않은 사람들을 위해), 패치를 적용하는 방법과 그것을 사용하는 방법 (아마도 sdb=disable커널 매개 변수로)을 언급 할 수 있습니다 .
mpy

1
kernel.org/doc/Documentation/applying-patches.txt 는 일반적으로 커널 패치 적용을 다루지 만 많은 배포판에는 패치를 적용하는 특정 방법이 있습니다. 이 패치는 좀 더 구체적으로 libata에 대해 'disable'force 플래그를 구현합니다. 사용자는 libata.force = ID : disable과 함께이를 사용해야합니다. 여기서 ID는 해당 드라이브를 식별하는 숫자 또는 숫자입니다.
robbat2

wiki.ubuntu.com/Kernel/BuildYourOwnKernel 이 최신 버전 인지 잘 모르겠습니다 . 이번 주에 할 수 있으면 노력하겠습니다 ...
Rmano

그건 그렇고, Samsung Laptop의 경우 명령은 아마도 "libata.force = 2.00 : disable" grep iSSD /var/log/syslog이어야합니다 (힌트를 주어야합니다).
Rmano

1
참고로, 3.13 커널과 안정적인 커널 트리로 병합되었습니다. 그러나 nodisable 옵션은 허용되지 않았습니다.
robbat2

0

나는 이것을 연구하고 우분투에서 아주 쉽게 구현 할 수있는 솔루션을 찾았습니다. 배포판은 kmod를 사용하므로 다음과 같이 kmod를 사용하는 모든 배포판에서 잘 작동합니다.

사용중인 드라이버에 따라 모든 SATA 장치를 비활성화하려면 드라이버를 블랙리스트에 추가 해야 합니다. lsmod | grep sata사용중인 드라이버를 찾아 보십시오 . 그런 다음 블랙리스트에 추가 할 /etc/modprobe.d/새 파일을 만듭니다 echo blacklist (module) > blacklist.conf. 로 initramfs를 다시 빌드하십시오mkinitramfs 적용하십시오. 재부팅하십시오.

또는 modprobe.blacklist=(module)커널 매개 변수에 추가 하십시오.


1
하드 드라이브를 포함한 모든 SATA 장치가 비활성화되므로 랩탑이 더 이상 부팅되지 않습니다. 그리고 sata 지원은 모듈이 아닌 커널로 컴파일되므로 블랙리스트에 올릴 수 없습니다.
Sergey Melekhin

좋아, 그럼 그냥 노트북을 열고 드라이브를 제거하십시오 ...
Hector

불행히도 나는 그것을 할만 큼 유능하지 않습니다-메인 보드에 납땜되어 있으며 sata 케이블을 통해 연결되지 않습니다. 노트북을 제거하면 노트북이 제대로 작동 할 것입니다.
Sergey Melekhin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.