Como desativar a análise do kernel para a unidade?

9

Eu tenho laptop Samsung com SSD ExpressCache SanDisk de 30 GB soldado no mainbord. O SSD morreu (dá muitos erros quando tento acessá-lo de alguma forma), mas ainda é investigado na inicialização do kernel, vejo sua partição, a unidade do ubuntu mostra o ícone da unidade desmontada na gaveta do aplicativo e, o pior de tudo, não consigo suspender o laptop , porque o envio do comando de suspensão para o dispositivo ssd falha. Tentei passar o parâmetro sdb = noprobe kernel, mas parece que está obsoleto há muito tempo no kernel 3.8.0 (Ubuntu 13.04). Como posso desativar o dispositivo sata nos kernels recentes?

Sergey Melekhin
fonte

Respostas:

1

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 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 .

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

 libata.force=2.00:disable

para os 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

Gambiarra

Respondida por Emmanuel, usuário do StackExchange, Emmanuel em https://unix.stackexchange.com/a/103742/52205

Você pode pelo menos resolver o problema de suspensão emitindo o comando

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

antes de suspender.

Para automatizá-lo, adicionei o seguinte arquivo: (observe os sinalizadores, ele deve ser executável)

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

no diretório /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

... e agora o sistema suspende (e continua) corretamente. Eu adicionei o trecho

if [ -d /sys/block/sdb ]; then
      echo Deleting device sdb 
      echo 1 > /sys/block/sdb/device/delete     
fi

a /etc/rc.localtambém, para uma boa medida.

Rmano
fonte
Obrigado @Rmano, as coisas de eco funcionaram. Mas não está claro, onde devo colocar 99_delete_sdbo arquivo executável? Em /etc/rc0.d/talvez?
Sergey Melekhin
Desculpe --- adicionou as informações relevantes.
Rmano
5

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
11
Obrigada pelos teus esforços. Talvez você possa comentar (para aqueles que não estão familiarizados com os patches do kernel), como aplicar o patch e como usá-lo (provavelmente sdb=disablecomo parâmetro do kernel).
Mpy
11
O kernel.org/doc/Documentation/applying-patches.txt cobre a aplicação de patches do kernel em geral, mas muitas distribuições têm métodos específicos de aplicação de patches. Este patch implementa mais especificamente um sinalizador de força 'desativar' para libata. O usuário precisará usá-lo com libata.force = ID: desative onde ID é um número ou número. Número tupla que identifica a unidade em questão.
precisa saber é o seguinte
Não sei se estas instruções: wiki.ubuntu.com/Kernel/BuildYourOwnKernel estão atualizadas. Vou tentar se puder esta semana ...
Rmano 9/13/13
A propósito, no caso do laptop Samsung, o comando provavelmente deve ser "libata.force = 2.00: desativar" ( grep iSSD /var/log/syslogdeve dar uma dica).
Rmano
11
Para sua informação, ele foi mesclado ao kernel para 3.13, bem como à árvore estável do kernel. A opção nodisable NÃO foi aceita no entanto.
robbat2
0

Eu pesquisei isso e encontrei uma solução que pode ser implementada facilmente no Ubuntu. A distribuição usa kmod, portanto, o seguinte deve funcionar bem nessa e em qualquer distribuição que use kmod.

Dependendo do driver que você estiver usando, você precisará colocá-lo na lista negra se desejar desativar todos os dispositivos SATA. Tente lsmod | grep satadescobrir qual driver (s) você está usando. Em seguida, /etc/modprobe.d/crie um novo arquivo com echo blacklist (module) > blacklist.confpara adicioná-lo à lista negra. Reconstrua o initramfs mkinitramfspara que ele entre em vigor. Reinicie.

Como alternativa, basta adicionar modprobe.blacklist=(module)aos seus parâmetros do kernel.

Hector
fonte
11
Ele desativará todos os dispositivos SATA, incluindo o disco rígido, para que meu laptop não inicialize mais. E o suporte a sata é compilado no kernel (não como um módulo), então não posso colocá-lo na lista negra.
Sergey Melekhin 23/09/13
Ok, então em seguida, basta abrir o seu laptop e remova a unidade ...
Hector
Infelizmente eu não sou competente o suficiente para fazê-lo - ele é soldado no mainbord, não é conectado via cabo sata. Nem tenho certeza de que o laptop funcionará se eu o remover.
Sergey Melekhin 24/13