Como posso dizer ao kernel do linux que ignore completamente um disco como se nem estivesse conectado?

18

Aviso prévio

Por favor, desloque-se para a resposta (que tem alguns pontos, mas é o correto). O problema é resolvido por um patch que estará no kernel 3.12.7 ou superior; Espero que seja portado para os anteriores também.

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

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

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, falha em muitas verificações, atrasando a inicialização, atrasando o desligamento e tornando (eu acho) a suspensão impossível.

É possível dizer ao Linux para ignorar completamente qualquer coisa no link ata2? Tentei adicionar esta 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 redefinir o SSD se ele foi deixado no modo "cache" sem usar o Windows ... ou inicializar uma janela "ativa" para fazer o mesmo ...

Obrigado!

Dados adicionados:

Completo udevadm info -a -n /dev/sdbcolado em http://paste.ubuntu.com/6186145/

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

o que está claramente errado. Mesmo assim:

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 de http://ubuntuforums.org/showthread.php?t=1935699&p=11739579#post11739579 ).

PENSAMENTO ADICIONAL:

Tudo isso poderia ser um efeito colateral da tecnologia Intel Smart Response não desativada antes da instalação do Linux? Se sim, como posso checá-lo antes de reinstalar uma janela na máquina? Ou isso é um tiro no escuro? (Na BIOS, a unidade SSD não aparece e não há nada sobre o Intel SRT).

SOBRE MARCAR COMO DUPLICADO:

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

Rmano
fonte
2
Se o disco que você deseja ocultar for "sdb", você pode postar a saída completa de "udevadm info -a -n / dev / sdb" ?.
Roman Raguet
11
Isso não é duplicado da pergunta vinculada, de forma alguma. Você poderia desmarcá-lo como duplicado? Mudei o título para melhor transmitir a pergunta. Não se trata de uma verificação de SSD, trata-se de uma pergunta geral sobre gerenciamento de disco no Linux. Obrigado!
Rmano 4/13
11
Qual é o problema de apenas ... desconectar o disco?
Braiam
11
Pergunta semelhante sobre o Superusuário: Como desativar a verificação do kernel para a unidade?
Octndrük
3
Braiam: o disco SSD é soldado à placa principal.
Rmano 4/13

Respostas:

14

Duas soluções aqui: uma é rápida de aplicar, embora resolva o problema apenas parcialmente, a outra é a completa, mas exige 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 ( encontre-o no site de troca de pilhas Unix / Linux ) que oculta completamente a unidade.

Atualização 1 O patch está agora upstream (pelo menos no 3.12.7 kernel estável), consulte o repositório git . Pedi backport na barra de lançamento do Ubuntu .

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

Após a instalação do patch, adicionar

 libata.force=2.00:disable

aos parâmetros de inicialização do kernel ocultará o disco do kernel do Linux. Verifique novamente se o número está correto; procurar o 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 estas perguntas e respostas: Como adiciono um parâmetro de inicialização do kernel?

Gambiarra

Pelo menos o problema de ativar o resumo de suspensão foi resolvido pelo usuário do Emix StackExchange Emmanuel em /unix//a/103742/52205 . Como root, emita o comando:

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

antes de suspender.

Para torná-lo permanente, adicione o seguinte arquivo /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 "$1" 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.

Rmano
fonte
11
Obrigado por lembrar sobre /sys/block/*/device/delete.
Michael Shigorin
@kikuto --- sua edição proposta parecia um pouco fora de tópico, mas adicionei um link para adicionar um parâmetro de inicialização do kernel. Obrigado.
Rmano 23/01
5

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 teclas "SUBSYSTEMS " e "DRIVERS" e os atributos "ATTRS {rev}" e ATTRS {model} e atribuir 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 Entere finalmente Ctrl+ X.

2) Por fim, atualize as regras do udev com:

  • sudo udevadm trigger

NOTA: Com o ENV {UDISKS_IGNORE} = "1", ele ignorará o disco do Ubuntu 12.10 e 13.04.
Para o Ubuntu 12.04, a variável seria ENV {UDISKS_PRESENTATION_HIDE} = "1" .

Espero que isto ajude.

Roman Raguet
fonte
Tentei, ainda sdb é detectado na inicialização (e atrasa). Eu acho que deveria ser uma opção de parâmetro de linha de kernel, mas não consegui encontrar nada ... suspiro. Obrigado mesmo assim.
Rmano
@Rmano ... Se você tentar corresponder apenas à chave do kernel ?. a regra seria KERNEL == "sdb", ENV {UDISKS_IGNORE} = "1" ... para ver se o disco foi detectado no udev.
Roman Raguet 04/10/2013
Eu sei que isso foi há muito tempo. mas esse problema ainda não tem resposta ... nenhuma das sugestões funcionou. Obrigado a todos de qualquer maneira.
Rmano 7/11
2

/server/112147/tell-ubuntu-to-ignore-dead-hard-drive-during-booting sugere em parte:

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

Algumas linhas abaixo, você provavelmente verá uma linha assim:

pular regras para dispositivos de bloco inadequados

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

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

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

K7AAY
fonte
Tentei, sem sorte. Ainda tem a unidade sdb, ainda bloqueando a suspensão. Era uma vez uma opção de linha de comando sdb = ignore kernel ... E infelizmente sim, é pós-garantia.
Rmano 9/10
BTW, eu não tinha esse arquivo, então eu o adicionei ...
Rmano 9/10
2

Se seus outros discos não estiverem usando ahci ou não são SSD, você poderá 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ê perceber que tudo está indo bem, agora poderá desativá-lo totalmente (não carregue na próxima inicialização). abra o arquivo /etc/modprobe.d/blacklist.conf e adicione a seguinte linha:

blacklist ahci 

na lista negra de drivers ssd, basta substituir ahci por sd

Ohad Cohen
fonte
2
Isso me deixará um sistema sem disco ... a unidade principal está ligada ata1, o ssd com falha está ativado ata2. Desativar o modo ahci no BIOS torna o sistema não inicializável ...
Rmano 11-13
1

Pelo que sei, não há como remover a mensagem, exceto remover seu SSD.

Anudeep Revuri
fonte
Infelizmente, o SSD é (pelo que sei) soldado à placa-mãe. É apenas um chip 8G.
Rmano
Corte um dos leds no chip, preferencialmente encontre a linha + 5V e corte-a com um X-Acto?
K7AAY
... se eu soubesse qual chip é e onde está. Então, eu temo que isso possa criar ainda mais problemas (três estados não acionados ...).
Rmano 11/10
1

Eu escrevi um patch do kernel para você que implementa a capacidade de desativar 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 inicial.

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

Deve aplicar-se 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).

robbat2
fonte