Eu tenho um laptop Samsung (Chronos S7) com um disco rígido SATA de ônibus ata:1
, que é detectado como /dev/sda
, um SSD de 8GB on ata:2
, /dev/sdb
e vários outros dispositivos no resto da interface SATA.
O problema é que o disco SSD é
- soldado à placa principal (imóvel)
- interrompido (apenas fornece erros de E / S para qualquer operação)
- ele não aparece no BIOS (provavelmente porque está quebrado)
Agora este disco:
- atrasa a inicialização de três a cinco minutos, tentando detectar o disco com falha, o que é irritante;
- mas a coisa mais irritante é que o sistema falha ao suspender devido a
/dev/sdb
falha.
Observe que eu posso viver com o atraso na inicialização - o que me preocupa é a coisa de retomar / suspender.
Portanto, a pergunta é: posso dizer ao kernel para evitar mesmo investigar o dispositivo no ata: 2?
No kernel mais antigo (<3.0), quando eu ainda era capaz de cavar um pouco a fonte, havia um parâmetro de linha de comando do estilo hdb=ignore
que teria feito o truque.
Eu tentei todos os truques propostos abaixo com os parâmetros udev
e do libata:force
kernel, sem sucesso. Especificamente, o seguinte não funciona:
Adicionando a um dos seguintes
/etc/udev/rules.d/
arquivos (em execução inicial como00-ignoredisk.rules
ou atrasada como99-ignoredisk.rules
ou nos dois locais)SUBSYSTEMS=="scsi", DRIVERS=="sd", ATTRS{rev}=="SSD ", ATTRS{model}=="SanDisk iSSD P4 ", ENV{UDISKS_IGNORE}="1"
nem
KERNEL=="sdb", ENV{UDISKS_IGNORE}="1"
nem muitas soluções intermediárias - isso torna o disco não acessível após a inicialização, mas é analisado na inicialização e ainda é verificado durante a suspensão - causando falha na suspensão.
Editando os arquivos do sistema
/lib/udev/rules.d/60-persistent-storage.rules
(eudisks
,udisks2
) alterandoKERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md", GOTO="persistent_storage_end"
para
KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-|md|sdb*", GOTO="persistent_storage_end"
novamente, isso tem algum efeito, mascarando o disco do espaço do usuário, mas o disco ainda está visível para o kernel.
A inicialização com todas as combinações possíveis (bem, muitas delas) dos
libata:force
parâmetros (encontrados por exemplo aqui ) para desativar o DMA, a velocidade mais baixa ou qualquer outra coisa sobre o disco com falha - não funciona. O parâmetro é usado, mas o disco ainda é analisado e falha.Completo
udevadm info -a -n /dev/sdb
colado 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 ).
fonte
/etc/fstab
? Porque o atraso na inicialização pode ser causado anteriormente pelo kernel ou pelo udev, que parece ser o caso, mas também mais tarde pelo fsck, ao lerfstab
.Respostas:
libata
não possui uma opção noprobe; essa era uma opção IDE herdada ...Mas eu escrevi um patch do kernel para você que o implementa. 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).
Atualização O patch está agora upstream (pelo menos no kernel estável 3.12.7). Está no kernel padrão distribuído com o Ubuntu 14.04 (que é baseado no 3.13-stable).
Após a instalação do patch, adicionar
para os parâmetros de inicialização do kernel ocultará o disco do kernel do Linux. Verifique se o número está correto; procurar pelo nome do dispositivo pode ajudar (obviamente, você deve verificar as mensagens do kernel antes de adicionar os parâmetros de inicialização):
O número importante é o
ata2.00
da primeira linha acima.fonte
Problemas de hardware têm solução de hardware físico. Você considerou dessoldar ou cortar a fonte de alimentação da unidade?
Edição: Ok, se isso não é uma opção que as pessoas estão usando isso antes para hot-plug um disco rígido. Você pode usar isso para desativar sua unidade.
Observe que qualquer outro processo pode forçar uma varredura do barramento SATA e, em seguida, faz com que ele volte. Tente fazer isso antes de hibernar o laptop.
Editado pelo OP: funcionou . Eu adicionei o seguinte arquivo:
com conteúdo:
... e agora o sistema suspende (e continua) corretamente.
fonte
delete
.BIOS
Este dispositivo não aparece de forma alguma através do BIOS?
Muitas vezes, os HDDs são configurados no modo "automático". Eu procurava garantir que esses dispositivos estivessem desabilitados e chegasse ao ponto de explicitamente ativar apenas um HDD e desativar todo o resto.
Opções de inicialização do kernel
Muitas vezes, você pode impedir que vários subsistemas sejam detectados automaticamente pelo Linux Kernel de inicialização através do uso de diferentes opções de inicialização que podem ser transmitidas a ele como comutadores.
A maioria, se não todas, as opções estão listadas aqui:
Linux em um livro Nutshell
Você pode examinar o livro O'Reilly, Linux Kernel in a Nutshell , especificamente o Capítulo 7: Personalizando um Kernel .
Este livro é disponibilizado gratuitamente pelo seu autor, Greg Kroah-Hartman, em seu site pessoal. O livro inteiro também pode ser baixado.
fonte
noide=....
. Existem várias outras opções que você pode fornecer ao kernel de inicialização para desativar a detecção automática de hardware.hdb=noprobe
opções não passaram o agrupamento para o scsi (acho que foi eliminado em torno do 2.6.x), por isso não existe (assim que eu sei) umasdb=noprobe
ouata:2=noprobe
opção. Eu li (quase) todo okernel-parameters.txt
arquivo na fonte do kernel e não consigo encontrar o parâmetro correto. Se você conhece alguém, diga-o em uma resposta - ficarei muito agradecido.libata.dma=
Maneira do Linux de verificar o bloqueio:
sudo hdparm -I /dev/sdX
(com X = a..z; você deve saber qual é o dispositivo da sua unidade, é claro). No final do (grande) de saída, você deve ser capaz de ler no nos últimos 10 linhas:*not* locked
.fonte