Como posso dizer ao kernel do Linux para ignorar completamente um disco como se ele não estivesse conectado?

11

Aviso

Por favor role para baixo para a resposta (tem poucos pontos, mas é o correto). O problema é resolvido por um patch que estará no kernel 3.12.7 e acima; Espero que seja também transferido para os anteriores.

Meu laptop é uma série Samsung Chronos 7. Ubuntu Gnome Remix 13.04, com drivers atualizados da Intel.

Eu tenho um problema com a unidade SSD interna (capacidade de 8G). Ele falha com COMRESET e erros de entrada / saída. Estou bastante convencido de que o problema é hardware; infelizmente eu não tenho o Windows instalado no laptop para verificar se é uma questão de configuração SSD ou qualquer outra coisa.

O problema é que o disco é reconhecido pelo 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

e depois disso ele falha em muitas verificações, atrasando a inicialização, atrasando o desligamento e fazendo (eu acho) suspender impossível.

É possível dizer ao Linux para ignorar completamente qualquer coisa no link ata2? Eu tentei adicionar essa linha ao /etc/udev/rules.d/10-local.rules

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

mas não funciona.

Por outro lado, se alguém souber como redefinir o SSD se ele foi deixado no modo "cache" sem usar o Windows ... ou para inicializar as janelas "ao vivo" para fazer o mesmo ...

Obrigado!

Dados adicionados:

Completa udevadm info -a -n /dev/sdb colada ao link

smartctl -i /dev/sdb -T permissive dá:

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

que está claramente errado. No entanto:

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

(dados SSD do link ).

PENSAMENTO ADICIONAL:

Poderia tudo isso ser um efeito colateral da tecnologia Intel Smart Response não ser desativado antes de instalar o Linux? Se sim, como posso verificar a falta de reinstalação de janelas na máquina? Ou isso é um tiro no escuro? (Na BIOS, a unidade SSD não é mostrada e não há nada sobre a Intel SRT).

SOBRE MARCAÇÃO COMO DUPLICADO:

Eu mudei o título da pergunta; Eu não acho que a questão vinculada responda ao meu problema. Eu positivamente sei que o SSD está falhando. Eu estou perguntando se é possível dizer ao kernel do linux para não testar nada.

    
por Rmano 02.10.2013 / 21:47

6 respostas

7

Duas soluções aqui: uma é rápida de aplicar, embora resolva o problema apenas parcialmente, a outra é a completa, mas requer que você compile seu próprio kernel.

A resposta correta é um patch do kernel.

Robin H. Johnson escreveu um patch para o driver do kernel SATA ( encontra-o no site de troca de pilha Unix / Linux ) que esconde completamente o drive.

Update 1 O patch agora é upstream (pelo menos no 3.12.7 kernel estável), veja o repositório git . Eu pedi por backport na barra de lançamento do Ubuntu .

Update 2 O patch está no kernel padrão do Ubuntu Trusty Thar 14.04; então agora apenas a seguinte adição ao parâmetro de inicialização é necessária.

Quando o patch estiver instalado, adicione

 libata.force=2.00:disable

para os parâmetros de inicialização do kernel irá esconder o disco do kernel do Linux. Verifique novamente se o número está correto; pesquisar pelo nome do dispositivo pode ajudar:

(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

Para adicionar um parâmetro do kernel (bot temporariamente e permanentemente), você pode verificar este Q & amp; A: Como eu adiciono um parâmetro de inicialização do kernel?

Solução alternativa

Pelo menos, o problema de ativar a suspensão-continuação foi resolvido pelo usuário Emmanuel do Unix StackExchange no link . Como root, emita o comando:

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

antes de suspender.

Para torná-lo permanente, adicione o seguinte arquivo em /etc/pm/sleep.d/ e torne-o executável:

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

com conteúdo:

#!/bin/sh

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

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

... e agora o sistema suspende (e continua) corretamente.

    
por Rmano 07.12.2013 / 00:25
4

Você pode tentar criar a regra do udev com as seguintes informações (saída do udevadm info -a -n / dev / sdb).

INFO:

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) Crie a regra do udev.

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

Você pode tentar combinar as chaves "SUBSYSTEMS" e "DRIVERS" e "ATTRS {rev}" & amp; Atributos ATTRS {model} e, em seguida, atribua a variável "UDISKS" para ignorá-la.

O conteúdo do arquivo 99-hide-ssd.rules seria:

  

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

Para salvar as alterações no nano ... Ctrl + O , então Enter e finalmente Ctrl + X .

2) Finalmente atualize as regras do udev com:

  • sudo udevadm trigger

NOTA: Com o ENV {UDISKS_IGNORE}="1" ele irá ignorar o disco para o Ubuntu 12.10 & amp; 13.04.
Para o Ubuntu 12.04, a variável seria ENV {UDISKS_PRESENTATION_HIDE}="1" .

Espero que isso ajude.

    
por Roman Raguet 03.10.2013 / 16:58
2

link sugere em parte:

Como root, abra o /etc/udev/rules.d/60-persistent-storage.rules com o seu editor de texto favorito.

Algumas linhas abaixo, você provavelmente verá uma linha parecida com esta:

ignorar regras para dispositivos de bloqueio inadequados

KERNEL == "ram * | loop * | fd * | nbd * | gnbd * | dm- | md ", GOTO="persistent_storage_end" Adicione "sdb *" a essa segunda linha, assim será:

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

Salve, reinicie e talvez funcione. Se não, bem, esta garantia pós-garantia?

    
por K7AAY 08.10.2013 / 23:20
1

Pelo que eu sei, não há como remover a mensagem, além de remover seu SSD.

    
por Anudeep Revuri 02.10.2013 / 22:33
1

Se seus outros discos não estão usando ahci, ou não são SSD, você pode remover o driver do kernel para eles.

para remover para essa sessão (até a próxima reinicialização), execute:

sudo rmmod ahci

para recarregá-lo, execute:

sudo modprobe ahci

Se você ver que tudo está indo bem, agora você pode desativá-lo totalmente (não carregá-lo na próxima inicialização). abra o arquivo /etc/modprobe.d/blacklist.conf e adicione a seguinte linha:

blacklist ahci 

para os drivers ssd da lista negra, basta substituir ahci por sd

    
por Ohad Cohen 11.10.2013 / 01:04
1

Eu fui e escrevi um patch de kernel para você que implementa a capacidade de desabilitar um único disco no momento da inicialização, para que você não precise se preocupar em desabilitá-lo no udev ou na espera durante a inicialização.

link

Deve ser aplicado a muitos kernels com muita facilidade (a linha acima foi adicionada 2013-05-21 / v3.10-rc1 *, mas pode ser aplicada com segurança manualmente sem essa linha).

    
por robbat2 08.12.2013 / 02:02